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 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
@@ -20,6 +20,8 @@ if (!binaryName) {
20
20
  process.exit(1);
21
21
  }
22
22
 
23
+
24
+
23
25
  const installDir = path.join(__dirname, "..", ".owl");
24
26
  const binaryPath = path.join(installDir, binaryName);
25
27
 
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.6";
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
- if (info.isZip) {
129
- // Pure Node.js zip extraction — no PowerShell needed
130
- extractZip(archive, installDir);
131
- } else {
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 (no-op on Windows)
140
- if (fs.existsSync(binaryPath) && os.platform() !== "win32") {
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
- if (os.platform() === "win32") {
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
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "openowl",
3
- "version": "0.3.6",
3
+ "version": "0.3.8",
4
4
  "description": "AI desktop automation MCP server — give your AI eyes and hands",
5
5
  "homepage": "https://openowl.dev",
6
6
  "repository": {