openowl 0.3.6 → 0.3.8
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 +2 -2
- package/bin/owl +2 -0
- package/install.js +8 -69
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -42,14 +42,14 @@ OpenOwl gives AI assistants the ability to see your screen and interact with des
|
|
|
42
42
|
|
|
43
43
|
## Supported platforms
|
|
44
44
|
|
|
45
|
-
- macOS (Apple Silicon and Intel)
|
|
45
|
+
- macOS 10.9+ (Apple Silicon and Intel — Mavericks through Sequoia)
|
|
46
46
|
- Windows 10/11 (x64)
|
|
47
47
|
|
|
48
48
|
## Requirements
|
|
49
49
|
|
|
50
50
|
**macOS:** Grant Accessibility and Screen Recording permissions when prompted.
|
|
51
51
|
|
|
52
|
-
**Windows:** Run as Administrator for full desktop control. Python 3.10+ is installed automatically in a local venv on first run.
|
|
52
|
+
**Windows:** Windows 10+. Run as Administrator for full desktop control. Python 3.10+ is installed automatically in a local venv on first run.
|
|
53
53
|
|
|
54
54
|
## Links
|
|
55
55
|
|
package/bin/owl
CHANGED
package/install.js
CHANGED
|
@@ -7,9 +7,8 @@ const path = require("path");
|
|
|
7
7
|
const https = require("https");
|
|
8
8
|
const http = require("http");
|
|
9
9
|
const { execSync } = require("child_process");
|
|
10
|
-
const zlib = require("zlib");
|
|
11
10
|
|
|
12
|
-
const VERSION = "0.3.
|
|
11
|
+
const VERSION = "0.3.8";
|
|
13
12
|
const BASE_URL =
|
|
14
13
|
"https://dedjlsvrwafhyznaazbm.supabase.co/storage/v1/object/public/releases";
|
|
15
14
|
|
|
@@ -22,11 +21,6 @@ const PLATFORMS = {
|
|
|
22
21
|
url: `${BASE_URL}/v${VERSION}/owl-darwin-x64.tar.gz`,
|
|
23
22
|
binary: "owl-darwin-x86_64",
|
|
24
23
|
},
|
|
25
|
-
"win32-x64": {
|
|
26
|
-
url: `${BASE_URL}/v${VERSION}/owl-win32-x64.zip`,
|
|
27
|
-
binary: "owl-windows-x86_64.exe",
|
|
28
|
-
isZip: true,
|
|
29
|
-
},
|
|
30
24
|
};
|
|
31
25
|
|
|
32
26
|
function getPlatformKey() {
|
|
@@ -53,51 +47,6 @@ function download(url) {
|
|
|
53
47
|
});
|
|
54
48
|
}
|
|
55
49
|
|
|
56
|
-
/**
|
|
57
|
-
* Extract a zip file using pure Node.js (no PowerShell dependency).
|
|
58
|
-
* Handles the zip local file header format directly.
|
|
59
|
-
*/
|
|
60
|
-
function extractZip(zipBuffer, destDir) {
|
|
61
|
-
let offset = 0;
|
|
62
|
-
while (offset < zipBuffer.length - 4) {
|
|
63
|
-
const sig = zipBuffer.readUInt32LE(offset);
|
|
64
|
-
// Local file header signature = 0x04034b50
|
|
65
|
-
if (sig !== 0x04034b50) break;
|
|
66
|
-
|
|
67
|
-
const compressionMethod = zipBuffer.readUInt16LE(offset + 8);
|
|
68
|
-
const compressedSize = zipBuffer.readUInt32LE(offset + 18);
|
|
69
|
-
const uncompressedSize = zipBuffer.readUInt32LE(offset + 22);
|
|
70
|
-
const nameLen = zipBuffer.readUInt16LE(offset + 26);
|
|
71
|
-
const extraLen = zipBuffer.readUInt16LE(offset + 28);
|
|
72
|
-
const nameStart = offset + 30;
|
|
73
|
-
const fileName = zipBuffer.toString("utf8", nameStart, nameStart + nameLen);
|
|
74
|
-
const dataStart = nameStart + nameLen + extraLen;
|
|
75
|
-
|
|
76
|
-
const destPath = path.join(destDir, fileName);
|
|
77
|
-
|
|
78
|
-
if (fileName.endsWith("/")) {
|
|
79
|
-
// Directory entry
|
|
80
|
-
fs.mkdirSync(destPath, { recursive: true });
|
|
81
|
-
} else {
|
|
82
|
-
// File entry
|
|
83
|
-
fs.mkdirSync(path.dirname(destPath), { recursive: true });
|
|
84
|
-
const rawData = zipBuffer.slice(dataStart, dataStart + compressedSize);
|
|
85
|
-
|
|
86
|
-
if (compressionMethod === 0) {
|
|
87
|
-
// Stored (no compression)
|
|
88
|
-
fs.writeFileSync(destPath, rawData);
|
|
89
|
-
} else if (compressionMethod === 8) {
|
|
90
|
-
// Deflated
|
|
91
|
-
const inflated = zlib.inflateRawSync(rawData);
|
|
92
|
-
fs.writeFileSync(destPath, inflated);
|
|
93
|
-
} else {
|
|
94
|
-
console.warn(`[OpenOwl] Skipping ${fileName} (unsupported compression: ${compressionMethod})`);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
offset = dataStart + compressedSize;
|
|
99
|
-
}
|
|
100
|
-
}
|
|
101
50
|
|
|
102
51
|
async function install() {
|
|
103
52
|
const platformKey = getPlatformKey();
|
|
@@ -125,30 +74,20 @@ async function install() {
|
|
|
125
74
|
|
|
126
75
|
fs.mkdirSync(installDir, { recursive: true });
|
|
127
76
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
// macOS/Linux: use tar
|
|
133
|
-
const tmpFile = path.join(os.tmpdir(), `owl-${VERSION}.tar.gz`);
|
|
134
|
-
fs.writeFileSync(tmpFile, archive);
|
|
135
|
-
execSync(`tar -xzf "${tmpFile}" -C "${installDir}"`, { stdio: "pipe" });
|
|
136
|
-
fs.unlinkSync(tmpFile);
|
|
137
|
-
}
|
|
77
|
+
const tmpFile = path.join(os.tmpdir(), `owl-${VERSION}.tar.gz`);
|
|
78
|
+
fs.writeFileSync(tmpFile, archive);
|
|
79
|
+
execSync(`tar -xzf "${tmpFile}" -C "${installDir}"`, { stdio: "pipe" });
|
|
80
|
+
fs.unlinkSync(tmpFile);
|
|
138
81
|
|
|
139
|
-
// Make binary executable
|
|
140
|
-
if (fs.existsSync(binaryPath)
|
|
82
|
+
// Make binary executable
|
|
83
|
+
if (fs.existsSync(binaryPath)) {
|
|
141
84
|
fs.chmodSync(binaryPath, 0o755);
|
|
142
85
|
}
|
|
143
86
|
|
|
144
87
|
console.log(`[OpenOwl] Installed successfully (${(archive.length / 1024 / 1024).toFixed(1)} MB)`);
|
|
145
88
|
} catch (err) {
|
|
146
89
|
console.error(`[OpenOwl] Installation failed: ${err.message}`);
|
|
147
|
-
|
|
148
|
-
console.error("[OpenOwl] Try downloading manually from: https://openowl.dev/quick-setup");
|
|
149
|
-
} else {
|
|
150
|
-
console.error("[OpenOwl] Try: brew install mihir-kanzariya/owl/owl");
|
|
151
|
-
}
|
|
90
|
+
console.error("[OpenOwl] Try: brew install owl");
|
|
152
91
|
process.exit(1);
|
|
153
92
|
}
|
|
154
93
|
}
|