webtape 1.7.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 +99 -0
- package/dist/analyzer.d.ts +27 -0
- package/dist/analyzer.d.ts.map +1 -0
- package/dist/analyzer.js +128 -0
- package/dist/analyzer.js.map +1 -0
- package/dist/config.d.ts +36 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +158 -0
- package/dist/config.js.map +1 -0
- package/dist/context.d.ts +4 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +276 -0
- package/dist/context.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +326 -0
- package/dist/index.js.map +1 -0
- package/dist/install.d.ts +17 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +235 -0
- package/dist/install.js.map +1 -0
- package/dist/native-host.d.ts +15 -0
- package/dist/native-host.d.ts.map +1 -0
- package/dist/native-host.js +129 -0
- package/dist/native-host.js.map +1 -0
- package/dist/rules.d.ts +59 -0
- package/dist/rules.d.ts.map +1 -0
- package/dist/rules.js +115 -0
- package/dist/rules.js.map +1 -0
- package/dist/server.d.ts +32 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +122 -0
- package/dist/server.js.map +1 -0
- package/dist/storage.d.ts +48 -0
- package/dist/storage.d.ts.map +1 -0
- package/dist/storage.js +271 -0
- package/dist/storage.js.map +1 -0
- package/dist/templates/context.md.ejs +79 -0
- package/dist/types.d.ts +103 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/workspace.d.ts +15 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +128 -0
- package/dist/workspace.js.map +1 -0
- package/dist/workspace.zip +0 -0
- package/package.json +52 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
export interface WorkspacePaths {
|
|
2
|
+
root: string;
|
|
3
|
+
recordings: string;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Resolve the WebTape workspace root. Priority:
|
|
7
|
+
* 1. Explicit --workspace CLI flag
|
|
8
|
+
* 2. ~/Desktop/WebTape (works on macOS and Windows)
|
|
9
|
+
*/
|
|
10
|
+
export declare function resolveWorkspaceRoot(explicit?: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Ensure the workspace directory tree exists and return the resolved paths.
|
|
13
|
+
*/
|
|
14
|
+
export declare function ensureWorkspace(root: string, version: string): WorkspacePaths;
|
|
15
|
+
//# sourceMappingURL=workspace.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.d.ts","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9D;AAWD;;GAEG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,cAAc,CAwG7E"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
import { mkdirSync, existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
|
+
import { join, dirname } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
import { fileURLToPath } from 'node:url';
|
|
5
|
+
import { execSync } from 'node:child_process';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import AdmZip from 'adm-zip';
|
|
8
|
+
import { minimatch } from 'minimatch';
|
|
9
|
+
const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
10
|
+
/**
|
|
11
|
+
* Resolve the WebTape workspace root. Priority:
|
|
12
|
+
* 1. Explicit --workspace CLI flag
|
|
13
|
+
* 2. ~/Desktop/WebTape (works on macOS and Windows)
|
|
14
|
+
*/
|
|
15
|
+
export function resolveWorkspaceRoot(explicit) {
|
|
16
|
+
if (explicit)
|
|
17
|
+
return explicit;
|
|
18
|
+
return join(homedir(), 'Desktop', 'WebTape');
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Get the path to the bundled workspace.zip.
|
|
22
|
+
*/
|
|
23
|
+
function getBundledZipPath() {
|
|
24
|
+
// In development, it's in dist/
|
|
25
|
+
// In production (after build), it's also in dist/ relative to this file
|
|
26
|
+
return join(__dirname, 'workspace.zip');
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Ensure the workspace directory tree exists and return the resolved paths.
|
|
30
|
+
*/
|
|
31
|
+
export function ensureWorkspace(root, version) {
|
|
32
|
+
const recordings = join(root, 'recordings');
|
|
33
|
+
const pkgPath = join(root, 'package.json');
|
|
34
|
+
const zipPath = getBundledZipPath();
|
|
35
|
+
if (!existsSync(zipPath)) {
|
|
36
|
+
console.error(chalk.red(` ✗ 错误: 找不到工作区模板压缩包: ${zipPath}`));
|
|
37
|
+
process.exit(1);
|
|
38
|
+
}
|
|
39
|
+
const zip = new AdmZip(zipPath);
|
|
40
|
+
let needsInstall = false;
|
|
41
|
+
if (!existsSync(root)) {
|
|
42
|
+
// First time initialization
|
|
43
|
+
mkdirSync(root, { recursive: true });
|
|
44
|
+
console.log(chalk.green(' 📁 已创建工作区目录: ' + root));
|
|
45
|
+
// Extract all entries except overwrite_list.json
|
|
46
|
+
const allEntries = zip.getEntries();
|
|
47
|
+
for (const entry of allEntries) {
|
|
48
|
+
if (entry.entryName !== 'overwrite_list.json') {
|
|
49
|
+
zip.extractEntryTo(entry, root, false, true);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
console.log(chalk.green(' 📄 已初始化工作区文件'));
|
|
53
|
+
needsInstall = true;
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
// Check for updates
|
|
57
|
+
let currentVersion = '0.0.0';
|
|
58
|
+
if (existsSync(pkgPath)) {
|
|
59
|
+
try {
|
|
60
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
61
|
+
currentVersion = pkg.version || '0.0.0';
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// ignore
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
if (currentVersion !== version) {
|
|
68
|
+
console.log(chalk.cyan(` 🔄 检测到工作区版本更新 (${currentVersion} -> ${version})`));
|
|
69
|
+
// Read overwrite list from zip
|
|
70
|
+
const overwriteListEntry = zip.getEntry('overwrite_list.json');
|
|
71
|
+
let overwriteList = ['package.json', 'AGENTS.md']; // Default
|
|
72
|
+
if (overwriteListEntry) {
|
|
73
|
+
try {
|
|
74
|
+
overwriteList = JSON.parse(overwriteListEntry.getData().toString('utf-8'));
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// ignore
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// Overwrite files matching glob patterns
|
|
81
|
+
const allEntries = zip.getEntries();
|
|
82
|
+
const updatedFiles = [];
|
|
83
|
+
for (const pattern of overwriteList) {
|
|
84
|
+
for (const entry of allEntries) {
|
|
85
|
+
// Skip directories and the overwrite_list.json itself
|
|
86
|
+
if (entry.isDirectory || entry.entryName === 'overwrite_list.json')
|
|
87
|
+
continue;
|
|
88
|
+
if (minimatch(entry.entryName, pattern)) {
|
|
89
|
+
zip.extractEntryTo(entry, root, false, true);
|
|
90
|
+
updatedFiles.push(entry.entryName);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (updatedFiles.length > 0) {
|
|
95
|
+
console.log(chalk.gray(` - 已更新: ${updatedFiles.join(', ')}`));
|
|
96
|
+
}
|
|
97
|
+
// Update version in package.json
|
|
98
|
+
if (existsSync(pkgPath)) {
|
|
99
|
+
try {
|
|
100
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
|
|
101
|
+
pkg.version = version;
|
|
102
|
+
writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n', 'utf-8');
|
|
103
|
+
needsInstall = true;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
// ignore
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// Ensure recordings directory exists
|
|
112
|
+
if (!existsSync(recordings)) {
|
|
113
|
+
mkdirSync(recordings, { recursive: true });
|
|
114
|
+
}
|
|
115
|
+
// Run npm install if needed
|
|
116
|
+
if (needsInstall) {
|
|
117
|
+
console.log(chalk.cyan(' 📦 正在安装工作区依赖 (npm install)...'));
|
|
118
|
+
try {
|
|
119
|
+
execSync('npm install', { cwd: root, stdio: 'inherit' });
|
|
120
|
+
console.log(chalk.green(' ✅ 依赖安装完成'));
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
console.error(chalk.yellow(' ⚠️ 依赖安装失败,请手动在工作区运行 npm install'));
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return { root, recordings };
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=workspace.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workspace.js","sourceRoot":"","sources":["../src/workspace.ts"],"names":[],"mappings":"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"}
|
|
Binary file
|
package/package.json
ADDED
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "webtape",
|
|
3
|
+
"version": "1.7.0",
|
|
4
|
+
"description": "CLI tool for WebTape: registers the Native Messaging host so the Chrome extension can record and analyze web sessions via AI without any manual server management.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"bin": {
|
|
7
|
+
"webtape": "./dist/index.js",
|
|
8
|
+
"webtape-receiver": "./dist/index.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "tsc && node scripts/pack-workspace.js",
|
|
15
|
+
"dev": "tsx src/index.ts",
|
|
16
|
+
"ws": "ln -snf ~/Desktop/WebTape WebTape && echo '✅ ~/Desktop/WebTape → WebTape'",
|
|
17
|
+
"start": "npm run build && npm link && webtape install --no-open && echo '\\n\\x1b[32m[Success]\\x1b[0m webtape 已完成编译、链接并注册 Native Messaging Host,插件侧改动后可直接触发录制验证。'",
|
|
18
|
+
"prepublishOnly": "npm run build"
|
|
19
|
+
},
|
|
20
|
+
"repository": {
|
|
21
|
+
"type": "git",
|
|
22
|
+
"url": "git+https://github.com/FurtherBank/WebTape.git",
|
|
23
|
+
"directory": "packages/webtape-receiver"
|
|
24
|
+
},
|
|
25
|
+
"homepage": "https://github.com/FurtherBank/WebTape/tree/main/packages/webtape-receiver",
|
|
26
|
+
"bugs": {
|
|
27
|
+
"url": "https://github.com/FurtherBank/WebTape/issues"
|
|
28
|
+
},
|
|
29
|
+
"keywords": [
|
|
30
|
+
"webtape",
|
|
31
|
+
"native-messaging",
|
|
32
|
+
"api-analysis",
|
|
33
|
+
"chrome-extension",
|
|
34
|
+
"llm"
|
|
35
|
+
],
|
|
36
|
+
"license": "MIT",
|
|
37
|
+
"dependencies": {
|
|
38
|
+
"adm-zip": "^0.5.16",
|
|
39
|
+
"chalk": "^5.3.0",
|
|
40
|
+
"commander": "^12.1.0",
|
|
41
|
+
"ejs": "^5.0.1",
|
|
42
|
+
"minimatch": "^10.2.4",
|
|
43
|
+
"ora": "^8.1.0"
|
|
44
|
+
},
|
|
45
|
+
"devDependencies": {
|
|
46
|
+
"@types/adm-zip": "^0.5.7",
|
|
47
|
+
"@types/ejs": "^3.1.5",
|
|
48
|
+
"@types/node": "^22.10.0",
|
|
49
|
+
"tsx": "^4.19.0",
|
|
50
|
+
"typescript": "^5.7.0"
|
|
51
|
+
}
|
|
52
|
+
}
|