webtape-receiver 1.0.0 → 1.2.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 +116 -0
- package/dist/analyzer.d.ts +8 -2
- package/dist/analyzer.d.ts.map +1 -1
- package/dist/analyzer.js +21 -13
- package/dist/analyzer.js.map +1 -1
- package/dist/index.js +21 -4
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +1 -0
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +6 -6
- package/dist/server.js.map +1 -1
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +4 -0
- package/dist/storage.js.map +1 -1
- package/package.json +1 -1
package/README.md
ADDED
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
# webtape-receiver
|
|
2
|
+
|
|
3
|
+
接收 [WebTape](https://github.com/FurtherBank/WebTape) Chrome 插件的 webhook 数据,保存录制内容并通过 AI 分析业务接口链路。
|
|
4
|
+
|
|
5
|
+
## 安装
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g webtape-receiver
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## 快速开始
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# 启动 webhook 接收服务器
|
|
15
|
+
webtape-receiver serve
|
|
16
|
+
|
|
17
|
+
# 在 WebTape 插件中将 webhook URL 设置为:
|
|
18
|
+
# http://localhost:5643/webhook
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
## 命令
|
|
22
|
+
|
|
23
|
+
### `serve` — 启动 webhook 接收服务器
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
webtape-receiver serve [options]
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
| 选项 | 说明 | 默认值 |
|
|
30
|
+
|------|------|--------|
|
|
31
|
+
| `-p, --port <number>` | 监听端口 | `5643` |
|
|
32
|
+
| `-w, --workspace <path>` | 工作区路径 | `~/Desktop/WebTape` |
|
|
33
|
+
| `--no-auto-analyze` | 接收数据后不自动运行 AI 分析 | — |
|
|
34
|
+
| `--backend <name>` | AI 分析后端 | `cursor` |
|
|
35
|
+
| `--model <name>` | AI 模型名称(例如 `kimi-k2.5`) | — |
|
|
36
|
+
|
|
37
|
+
示例:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
webtape-receiver serve -p 8080 --model kimi-k2.5
|
|
41
|
+
webtape-receiver serve --no-auto-analyze
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### `list` — 列出所有录制会话
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
webtape-receiver list [-w <path>]
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### `analyze` — 对指定会话运行 AI 分析
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
webtape-receiver analyze <session> [options]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
| 选项 | 说明 | 默认值 |
|
|
57
|
+
|------|------|--------|
|
|
58
|
+
| `-w, --workspace <path>` | 工作区路径 | `~/Desktop/WebTape` |
|
|
59
|
+
| `--backend <name>` | AI 分析后端 | `cursor` |
|
|
60
|
+
| `--model <name>` | AI 模型名称 | — |
|
|
61
|
+
| `--prompt-only` | 仅生成提示词文件,不执行分析 | `false` |
|
|
62
|
+
|
|
63
|
+
示例:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
webtape-receiver analyze 2024-01-14_12-45-30 --model kimi-k2.5
|
|
67
|
+
webtape-receiver analyze 2024-01-14_12-45-30 --prompt-only
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## 工作区目录结构
|
|
71
|
+
|
|
72
|
+
```
|
|
73
|
+
~/Desktop/WebTape/
|
|
74
|
+
├── recordings/
|
|
75
|
+
│ └── 2024-01-14_12-45-30/
|
|
76
|
+
│ ├── index.json # 操作时间线和上下文
|
|
77
|
+
│ ├── meta.json # 元数据(时间戳、版本、来源)
|
|
78
|
+
│ ├── prompt.md # AI 分析提示词
|
|
79
|
+
│ ├── requests/ # 请求详情
|
|
80
|
+
│ │ ├── req_0001_body.json
|
|
81
|
+
│ │ └── ...
|
|
82
|
+
│ └── responses/ # 响应详情
|
|
83
|
+
│ ├── req_0001_res.json
|
|
84
|
+
│ └── ...
|
|
85
|
+
└── analyses/
|
|
86
|
+
└── 2024-01-14_12-45-30.md # AI 分析报告
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## HTTP API
|
|
90
|
+
|
|
91
|
+
服务器启动后提供以下 HTTP 端点:
|
|
92
|
+
|
|
93
|
+
| 方法 | 路径 | 说明 |
|
|
94
|
+
|------|------|------|
|
|
95
|
+
| `GET` | `/` 或 `/health` | 健康检查 |
|
|
96
|
+
| `POST` | `/` 或 `/webhook` | 接收 WebTape webhook 数据 |
|
|
97
|
+
| `POST` | `/analyze/<session>` | 触发指定会话的 AI 分析 |
|
|
98
|
+
| `POST` | `/prompt/<session>` | 生成提示词文件 |
|
|
99
|
+
|
|
100
|
+
## 分析流程
|
|
101
|
+
|
|
102
|
+
1. WebTape 插件录制用户操作和网络请求
|
|
103
|
+
2. 插件通过 webhook 将数据发送到 receiver 服务器
|
|
104
|
+
3. Receiver 将录制数据保存为结构化文件,同时生成 `prompt.md` 分析提示词
|
|
105
|
+
4. 自动或手动触发 AI 分析(通过 Cursor Agent CLI)
|
|
106
|
+
5. 分析报告保存到 `analyses/` 目录
|
|
107
|
+
|
|
108
|
+
实际调用的 Cursor 命令:
|
|
109
|
+
|
|
110
|
+
```bash
|
|
111
|
+
cursor agent prompt "请阅读当前目录下的 prompt.md 文件..." --model "kimi-k2.5"
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## License
|
|
115
|
+
|
|
116
|
+
ISC
|
package/dist/analyzer.d.ts
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
import type { WorkspacePaths } from './workspace.js';
|
|
2
|
+
/**
|
|
3
|
+
* Build the analysis prompt from a recording session.
|
|
4
|
+
*/
|
|
5
|
+
export declare function buildPrompt(sessionDir: string): string;
|
|
2
6
|
export type AnalyzerBackend = 'cursor';
|
|
3
7
|
export interface AnalyzeOptions {
|
|
4
8
|
backend: AnalyzerBackend;
|
|
5
9
|
workspace: WorkspacePaths;
|
|
6
10
|
sessionDir: string;
|
|
11
|
+
model?: string;
|
|
7
12
|
}
|
|
8
13
|
/**
|
|
9
14
|
* Run AI analysis on a recording session.
|
|
@@ -11,7 +16,8 @@ export interface AnalyzeOptions {
|
|
|
11
16
|
*/
|
|
12
17
|
export declare function analyzeRecording(opts: AnalyzeOptions): Promise<string>;
|
|
13
18
|
/**
|
|
14
|
-
* Generate
|
|
19
|
+
* Generate (or refresh) the prompt.md file inside the session directory
|
|
20
|
+
* for manual use (e.g. paste into Cursor chat).
|
|
15
21
|
*/
|
|
16
|
-
export declare function generatePromptFile(
|
|
22
|
+
export declare function generatePromptFile(sessionDir: string): string;
|
|
17
23
|
//# sourceMappingURL=analyzer.d.ts.map
|
package/dist/analyzer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"analyzer.d.ts","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AA6BrD;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAUtD;AAED,MAAM,MAAM,eAAe,GAAG,QAAQ,CAAC;AAEvC,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,eAAe,CAAC;IACzB,SAAS,EAAE,cAAc,CAAC;IAC1B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,CAkB5E;AAmDD;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,MAAM,GACjB,MAAM,CAKR"}
|
package/dist/analyzer.js
CHANGED
|
@@ -30,7 +30,7 @@ const ANALYSIS_PROMPT_TEMPLATE = `你是一个专业的 Web 前端业务分析
|
|
|
30
30
|
/**
|
|
31
31
|
* Build the analysis prompt from a recording session.
|
|
32
32
|
*/
|
|
33
|
-
function buildPrompt(sessionDir) {
|
|
33
|
+
export function buildPrompt(sessionDir) {
|
|
34
34
|
const indexPath = join(sessionDir, 'index.json');
|
|
35
35
|
if (!existsSync(indexPath)) {
|
|
36
36
|
throw new Error(`index.json not found in ${sessionDir}`);
|
|
@@ -45,27 +45,35 @@ function buildPrompt(sessionDir) {
|
|
|
45
45
|
* Returns the path to the generated analysis report.
|
|
46
46
|
*/
|
|
47
47
|
export async function analyzeRecording(opts) {
|
|
48
|
-
const { backend, workspace, sessionDir } = opts;
|
|
48
|
+
const { backend, workspace, sessionDir, model } = opts;
|
|
49
49
|
const sessionName = sessionDir.split('/').pop() || 'unknown';
|
|
50
50
|
const reportPath = join(workspace.analyses, `${sessionName}.md`);
|
|
51
|
-
|
|
51
|
+
// Ensure prompt.md exists in the session directory (backward compatibility)
|
|
52
|
+
const promptPath = join(sessionDir, 'prompt.md');
|
|
53
|
+
if (!existsSync(promptPath)) {
|
|
54
|
+
const prompt = buildPrompt(sessionDir);
|
|
55
|
+
writeFileSync(promptPath, prompt, 'utf-8');
|
|
56
|
+
}
|
|
52
57
|
if (backend === 'cursor') {
|
|
53
|
-
return analyzeByCursor(
|
|
58
|
+
return analyzeByCursor(sessionDir, reportPath, model);
|
|
54
59
|
}
|
|
55
60
|
throw new Error(`Unsupported analyzer backend: ${backend}`);
|
|
56
61
|
}
|
|
57
62
|
/**
|
|
58
63
|
* Analyze via `cursor agent` CLI.
|
|
59
|
-
*
|
|
64
|
+
* The prompt is read from prompt.md in the session directory.
|
|
65
|
+
* Command: cursor agent prompt "<instruction>" --model "<model>"
|
|
60
66
|
*/
|
|
61
|
-
async function analyzeByCursor(
|
|
62
|
-
const
|
|
63
|
-
writeFileSync(promptPath, prompt, 'utf-8');
|
|
67
|
+
async function analyzeByCursor(sessionDir, reportPath, model) {
|
|
68
|
+
const instruction = '请阅读当前目录下的 prompt.md 文件,按照其中的指示完成分析任务,并将分析报告输出为 Markdown 格式。';
|
|
64
69
|
return new Promise((resolve, reject) => {
|
|
65
70
|
const args = [
|
|
66
71
|
'agent',
|
|
67
|
-
'
|
|
72
|
+
'prompt', instruction,
|
|
68
73
|
];
|
|
74
|
+
if (model) {
|
|
75
|
+
args.push('--model', model);
|
|
76
|
+
}
|
|
69
77
|
const child = execFile('cursor', args, {
|
|
70
78
|
cwd: sessionDir,
|
|
71
79
|
maxBuffer: 10 * 1024 * 1024,
|
|
@@ -89,11 +97,11 @@ async function analyzeByCursor(prompt, sessionDir, reportPath) {
|
|
|
89
97
|
});
|
|
90
98
|
}
|
|
91
99
|
/**
|
|
92
|
-
* Generate
|
|
100
|
+
* Generate (or refresh) the prompt.md file inside the session directory
|
|
101
|
+
* for manual use (e.g. paste into Cursor chat).
|
|
93
102
|
*/
|
|
94
|
-
export function generatePromptFile(
|
|
95
|
-
const
|
|
96
|
-
const promptPath = join(workspace.analyses, `${sessionName}_prompt.md`);
|
|
103
|
+
export function generatePromptFile(sessionDir) {
|
|
104
|
+
const promptPath = join(sessionDir, 'prompt.md');
|
|
97
105
|
const prompt = buildPrompt(sessionDir);
|
|
98
106
|
writeFileSync(promptPath, prompt, 'utf-8');
|
|
99
107
|
return promptPath;
|
package/dist/analyzer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAGjC,MAAM,wBAAwB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;yBAyBR,CAAC;AAE1B;;GAEG;AACH,
|
|
1
|
+
{"version":3,"file":"analyzer.js","sourceRoot":"","sources":["../src/analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { relative } from 'node:path';
|
|
2
3
|
import { Command } from 'commander';
|
|
3
4
|
import chalk from 'chalk';
|
|
4
5
|
import ora from 'ora';
|
|
@@ -6,7 +7,7 @@ import { resolveWorkspaceRoot, ensureWorkspace } from './workspace.js';
|
|
|
6
7
|
import { createWebhookServer } from './server.js';
|
|
7
8
|
import { listRecordings } from './storage.js';
|
|
8
9
|
import { analyzeRecording, generatePromptFile } from './analyzer.js';
|
|
9
|
-
const VERSION = '1.
|
|
10
|
+
const VERSION = '1.2.0';
|
|
10
11
|
const program = new Command();
|
|
11
12
|
program
|
|
12
13
|
.name('webtape-receiver')
|
|
@@ -18,8 +19,9 @@ program
|
|
|
18
19
|
.description('启动 webhook 接收服务器')
|
|
19
20
|
.option('-p, --port <number>', '监听端口', '5643')
|
|
20
21
|
.option('-w, --workspace <path>', '工作区路径(默认 ~/Desktop/WebTape)')
|
|
21
|
-
.option('--auto-analyze', '
|
|
22
|
+
.option('--no-auto-analyze', '接收数据后不自动运行 AI 分析')
|
|
22
23
|
.option('--backend <name>', 'AI 分析后端(cursor)', 'cursor')
|
|
24
|
+
.option('--model <name>', 'AI 模型名称(例如 kimi-k2.5)')
|
|
23
25
|
.action(async (opts) => {
|
|
24
26
|
const port = parseInt(opts.port, 10);
|
|
25
27
|
const workspaceRoot = resolveWorkspaceRoot(opts.workspace);
|
|
@@ -31,6 +33,9 @@ program
|
|
|
31
33
|
console.log(` ${chalk.green('端口')} ${port}`);
|
|
32
34
|
console.log(` ${chalk.green('自动分析')} ${opts.autoAnalyze ? chalk.yellow('开启') : chalk.gray('关闭')}`);
|
|
33
35
|
console.log(` ${chalk.green('AI 后端')} ${opts.backend}`);
|
|
36
|
+
if (opts.model) {
|
|
37
|
+
console.log(` ${chalk.green('AI 模型')} ${opts.model}`);
|
|
38
|
+
}
|
|
34
39
|
console.log('');
|
|
35
40
|
const spinner = ora('正在启动服务器…').start();
|
|
36
41
|
const srv = createWebhookServer({
|
|
@@ -38,6 +43,7 @@ program
|
|
|
38
43
|
workspace,
|
|
39
44
|
autoAnalyze: opts.autoAnalyze,
|
|
40
45
|
analyzerBackend: opts.backend,
|
|
46
|
+
analyzerModel: opts.model,
|
|
41
47
|
onReceive(sessionDir, payload) {
|
|
42
48
|
const actions = payload.content['index.json'].filter((b) => b.action).length;
|
|
43
49
|
const requests = Object.keys(payload.content.requests).length;
|
|
@@ -46,11 +52,20 @@ program
|
|
|
46
52
|
console.log(` ${chalk.gray('会话')} ${sessionDir}`);
|
|
47
53
|
console.log(` ${chalk.gray('操作数')} ${actions}`);
|
|
48
54
|
console.log(` ${chalk.gray('请求数')} ${requests}`);
|
|
55
|
+
if (opts.autoAnalyze) {
|
|
56
|
+
console.log('');
|
|
57
|
+
console.log(chalk.cyan(' ⏳ 正在启动 AI 分析…'));
|
|
58
|
+
}
|
|
49
59
|
},
|
|
50
60
|
onAnalyzeDone(reportPath) {
|
|
61
|
+
const relativePath = relative(workspace.root, reportPath);
|
|
62
|
+
const isInsideWorkspace = !relativePath.startsWith('..');
|
|
51
63
|
console.log('');
|
|
52
64
|
console.log(chalk.green(' ✓ AI 分析完成'));
|
|
53
|
-
|
|
65
|
+
if (isInsideWorkspace) {
|
|
66
|
+
console.log(` ${chalk.gray('产物位置')} ${relativePath}`);
|
|
67
|
+
}
|
|
68
|
+
console.log(` ${chalk.gray('完整路径')} ${reportPath}`);
|
|
54
69
|
},
|
|
55
70
|
onError(err) {
|
|
56
71
|
console.error('');
|
|
@@ -109,6 +124,7 @@ program
|
|
|
109
124
|
.description('对指定的录制会话运行 AI 分析')
|
|
110
125
|
.option('-w, --workspace <path>', '工作区路径')
|
|
111
126
|
.option('--backend <name>', 'AI 分析后端(cursor)', 'cursor')
|
|
127
|
+
.option('--model <name>', 'AI 模型名称(例如 kimi-k2.5)')
|
|
112
128
|
.option('--prompt-only', '仅生成提示词文件,不执行分析', false)
|
|
113
129
|
.action(async (session, opts) => {
|
|
114
130
|
const workspaceRoot = resolveWorkspaceRoot(opts.workspace);
|
|
@@ -117,7 +133,7 @@ program
|
|
|
117
133
|
if (opts.promptOnly) {
|
|
118
134
|
const spinner = ora('正在生成提示词文件…').start();
|
|
119
135
|
try {
|
|
120
|
-
const promptPath = generatePromptFile(
|
|
136
|
+
const promptPath = generatePromptFile(sessionDir);
|
|
121
137
|
spinner.succeed('提示词文件已生成');
|
|
122
138
|
console.log(` ${chalk.gray('路径')} ${promptPath}`);
|
|
123
139
|
console.log('');
|
|
@@ -136,6 +152,7 @@ program
|
|
|
136
152
|
backend: opts.backend,
|
|
137
153
|
workspace,
|
|
138
154
|
sessionDir,
|
|
155
|
+
model: opts.model,
|
|
139
156
|
});
|
|
140
157
|
spinner.succeed('分析完成');
|
|
141
158
|
console.log(` ${chalk.gray('报告')} ${reportPath}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,GAAG,MAAM,KAAK,CAAC;AACtB,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAErE,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,kBAAkB,CAAC;KACxB,WAAW,CAAC,iDAAiD,CAAC;KAC9D,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,gFAAgF;AAEhF,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,kBAAkB,CAAC;KAC/B,MAAM,CAAC,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC;KAC7C,MAAM,CAAC,wBAAwB,EAAE,6BAA6B,CAAC;KAC/D,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export interface ServerOptions {
|
|
|
7
7
|
workspace: WorkspacePaths;
|
|
8
8
|
autoAnalyze: boolean;
|
|
9
9
|
analyzerBackend: AnalyzerBackend;
|
|
10
|
+
analyzerModel?: string;
|
|
10
11
|
onReceive?: (sessionDir: string, payload: WebTapePayload) => void;
|
|
11
12
|
onAnalyzeDone?: (reportPath: string) => void;
|
|
12
13
|
onError?: (err: Error) => void;
|
package/dist/server.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa;;;;EAyFtD"}
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,KAAK,eAAe,EAAE,KAAK,cAAc,EAAE,MAAM,WAAW,CAAC;AACpF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,OAAO,EAAwC,KAAK,eAAe,EAAE,MAAM,eAAe,CAAC;AAE3F,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,cAAc,CAAC;IAC1B,WAAW,EAAE,OAAO,CAAC;IACrB,eAAe,EAAE,eAAe,CAAC;IACjC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,KAAK,IAAI,CAAC;IAClE,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7C,OAAO,CAAC,EAAE,CAAC,GAAG,EAAE,KAAK,KAAK,IAAI,CAAC;CAChC;AAiCD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,aAAa;;;;EAyFtD"}
|
package/dist/server.js
CHANGED
|
@@ -30,7 +30,7 @@ function handleCors(req, res) {
|
|
|
30
30
|
return false;
|
|
31
31
|
}
|
|
32
32
|
export function createWebhookServer(opts) {
|
|
33
|
-
const { port, workspace, autoAnalyze, analyzerBackend, onReceive, onAnalyzeDone, onError } = opts;
|
|
33
|
+
const { port, workspace, autoAnalyze, analyzerBackend, analyzerModel, onReceive, onAnalyzeDone, onError } = opts;
|
|
34
34
|
const server = createServer(async (req, res) => {
|
|
35
35
|
if (handleCors(req, res))
|
|
36
36
|
return;
|
|
@@ -55,7 +55,7 @@ export function createWebhookServer(opts) {
|
|
|
55
55
|
const sessionDir = saveRecording(workspace, payload);
|
|
56
56
|
onReceive?.(sessionDir, payload);
|
|
57
57
|
if (autoAnalyze) {
|
|
58
|
-
runAnalysis(workspace, sessionDir, analyzerBackend, onAnalyzeDone, onError);
|
|
58
|
+
runAnalysis(workspace, sessionDir, analyzerBackend, analyzerModel, onAnalyzeDone, onError);
|
|
59
59
|
}
|
|
60
60
|
json(res, 200, {
|
|
61
61
|
status: 'received',
|
|
@@ -75,7 +75,7 @@ export function createWebhookServer(opts) {
|
|
|
75
75
|
const sessionName = req.url.slice('/analyze/'.length);
|
|
76
76
|
const sessionDir = `${workspace.recordings}/${sessionName}`;
|
|
77
77
|
try {
|
|
78
|
-
runAnalysis(workspace, sessionDir, analyzerBackend, onAnalyzeDone, onError);
|
|
78
|
+
runAnalysis(workspace, sessionDir, analyzerBackend, analyzerModel, onAnalyzeDone, onError);
|
|
79
79
|
json(res, 200, { status: 'analysis_started', session: sessionDir });
|
|
80
80
|
}
|
|
81
81
|
catch (err) {
|
|
@@ -89,7 +89,7 @@ export function createWebhookServer(opts) {
|
|
|
89
89
|
const sessionName = req.url.slice('/prompt/'.length);
|
|
90
90
|
const sessionDir = `${workspace.recordings}/${sessionName}`;
|
|
91
91
|
try {
|
|
92
|
-
const promptPath = generatePromptFile(
|
|
92
|
+
const promptPath = generatePromptFile(sessionDir);
|
|
93
93
|
json(res, 200, { status: 'prompt_generated', path: promptPath });
|
|
94
94
|
}
|
|
95
95
|
catch (err) {
|
|
@@ -110,8 +110,8 @@ export function createWebhookServer(opts) {
|
|
|
110
110
|
server,
|
|
111
111
|
};
|
|
112
112
|
}
|
|
113
|
-
function runAnalysis(workspace, sessionDir, backend, onDone, onError) {
|
|
114
|
-
analyzeRecording({ backend, workspace, sessionDir })
|
|
113
|
+
function runAnalysis(workspace, sessionDir, backend, model, onDone, onError) {
|
|
114
|
+
analyzeRecording({ backend, workspace, sessionDir, model })
|
|
115
115
|
.then((reportPath) => onDone?.(reportPath))
|
|
116
116
|
.catch((err) => onError?.(err instanceof Error ? err : new Error(String(err))));
|
|
117
117
|
}
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,WAAW,CAAC;AAGpF,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAwB,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAqBjD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,SAAS,EAAE,cAAc,EACzB,OAAO,EAAE,cAAc,GACtB,MAAM,CA0CR;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,MAAM,EAAE,CAUlE"}
|
package/dist/storage.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { mkdirSync, writeFileSync, readdirSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
|
+
import { buildPrompt } from './analyzer.js';
|
|
3
4
|
/**
|
|
4
5
|
* Build a human-readable session directory name from the payload metadata.
|
|
5
6
|
* Format: YYYY-MM-DD_HH-mm-ss
|
|
@@ -44,6 +45,9 @@ export function saveRecording(workspace, payload) {
|
|
|
44
45
|
writeFileSync(join(resDir, filename), JSON.stringify(data, null, 2), 'utf-8');
|
|
45
46
|
}
|
|
46
47
|
writeFileSync(join(sessionDir, 'meta.json'), JSON.stringify(payload.meta, null, 2), 'utf-8');
|
|
48
|
+
// Build and save the analysis prompt alongside the recording data
|
|
49
|
+
const prompt = buildPrompt(sessionDir);
|
|
50
|
+
writeFileSync(join(sessionDir, 'prompt.md'), prompt, 'utf-8');
|
|
47
51
|
return sessionDir;
|
|
48
52
|
}
|
|
49
53
|
/**
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED