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.
Files changed (48) hide show
  1. package/README.md +99 -0
  2. package/dist/analyzer.d.ts +27 -0
  3. package/dist/analyzer.d.ts.map +1 -0
  4. package/dist/analyzer.js +128 -0
  5. package/dist/analyzer.js.map +1 -0
  6. package/dist/config.d.ts +36 -0
  7. package/dist/config.d.ts.map +1 -0
  8. package/dist/config.js +158 -0
  9. package/dist/config.js.map +1 -0
  10. package/dist/context.d.ts +4 -0
  11. package/dist/context.d.ts.map +1 -0
  12. package/dist/context.js +276 -0
  13. package/dist/context.js.map +1 -0
  14. package/dist/index.d.ts +3 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +326 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/install.d.ts +17 -0
  19. package/dist/install.d.ts.map +1 -0
  20. package/dist/install.js +235 -0
  21. package/dist/install.js.map +1 -0
  22. package/dist/native-host.d.ts +15 -0
  23. package/dist/native-host.d.ts.map +1 -0
  24. package/dist/native-host.js +129 -0
  25. package/dist/native-host.js.map +1 -0
  26. package/dist/rules.d.ts +59 -0
  27. package/dist/rules.d.ts.map +1 -0
  28. package/dist/rules.js +115 -0
  29. package/dist/rules.js.map +1 -0
  30. package/dist/server.d.ts +32 -0
  31. package/dist/server.d.ts.map +1 -0
  32. package/dist/server.js +122 -0
  33. package/dist/server.js.map +1 -0
  34. package/dist/storage.d.ts +48 -0
  35. package/dist/storage.d.ts.map +1 -0
  36. package/dist/storage.js +271 -0
  37. package/dist/storage.js.map +1 -0
  38. package/dist/templates/context.md.ejs +79 -0
  39. package/dist/types.d.ts +103 -0
  40. package/dist/types.d.ts.map +1 -0
  41. package/dist/types.js +2 -0
  42. package/dist/types.js.map +1 -0
  43. package/dist/workspace.d.ts +15 -0
  44. package/dist/workspace.d.ts.map +1 -0
  45. package/dist/workspace.js +128 -0
  46. package/dist/workspace.js.map +1 -0
  47. package/dist/workspace.zip +0 -0
  48. 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
+ }