@onkernel/cli 0.10.1 → 0.10.2

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 (3) hide show
  1. package/README.md +37 -0
  2. package/lib.js +9 -61
  3. package/package.json +19 -20
package/README.md CHANGED
@@ -285,6 +285,12 @@ Create an API key from the [Kernel dashboard](https://dashboard.onkernel.com).
285
285
  - `--button <button>` - Mouse button: left, middle, right (default: left)
286
286
  - `--hold-key <key>` - Modifier keys to hold (repeatable)
287
287
 
288
+ ### Browser Playwright
289
+
290
+ - `kernel browsers playwright execute <id or persistent id> [code]` - Execute Playwright/TypeScript code against the browser
291
+ - `--timeout <seconds>` - Maximum execution time in seconds (defaults server-side)
292
+ - If `[code]` is omitted, code is read from stdin
293
+
288
294
  ### Extension Management
289
295
 
290
296
  - `kernel extensions list` - List all uploaded extensions
@@ -395,6 +401,37 @@ kernel browsers computer type my-browser --text "Hello, World!"
395
401
 
396
402
  # Type text with a 100ms delay between keystrokes
397
403
  kernel browsers computer type my-browser --text "Slow typing..." --delay 100
404
+
405
+ ```
406
+
407
+ ### Playwright execution
408
+
409
+ ```bash
410
+ # Execute inline Playwright (TypeScript) code
411
+ kernel browsers playwright execute my-browser 'await page.goto("https://example.com"); const title = await page.title(); return title;'
412
+
413
+ # Or pipe code from stdin
414
+ cat <<'TS' | kernel browsers playwright execute my-browser
415
+ await page.goto("https://example.com");
416
+ const title = await page.title();
417
+ return { title };
418
+ TS
419
+
420
+ # With a timeout in seconds
421
+ kernel browsers playwright execute my-browser --timeout 30 'await (await context.newPage()).goto("https://example.com")'
422
+
423
+ # Mini CDP connection load test (10s)
424
+ cat <<'TS' | kernel browsers playwright execute my-browser
425
+ const start = Date.now();
426
+ let ops = 0;
427
+ while (Date.now() - start < 10_000) {
428
+ await page.evaluate("new Date();");
429
+ ops++;
430
+ }
431
+ const durationMs = Date.now() - start;
432
+ const opsPerSec = ops / (durationMs / 1000);
433
+ return { opsPerSec, ops, durationMs };
434
+ TS
398
435
  ```
399
436
 
400
437
  ### Extension management
package/lib.js CHANGED
@@ -6,18 +6,8 @@ const path = require("path");
6
6
  const JSZip = require("jszip");
7
7
  const tar = require("tar");
8
8
  const axios = require("axios");
9
- const ProxyAgent = require("proxy-agent");
10
9
  const { spawnSync } = require("child_process");
11
10
 
12
- const proxyUrl =
13
- process.env.HTTPS_PROXY ||
14
- process.env.https_proxy ||
15
- process.env.HTTP_PROXY ||
16
- process.env.http_proxy ||
17
- null;
18
-
19
- const agent = proxyUrl ? new ProxyAgent(proxyUrl) : undefined;
20
-
21
11
  const getArchive = () => {
22
12
  let target = `${process.platform}-${process.arch}`;
23
13
  const archive = archives[target];
@@ -29,61 +19,31 @@ const getArchive = () => {
29
19
 
30
20
  const binDir = path.join(__dirname, "bin");
31
21
 
32
- async function extractTar(tarPath, binaries, dir, wrappedIn) {
22
+ async function extractTar(tarPath, binaries, dir) {
33
23
  try {
34
- const filesToExtract = wrappedIn
35
- ? binaries.map((bin) =>
36
- path.join(wrappedIn, bin).replace(/\\/g, "/"),
37
- )
38
- : binaries;
39
-
40
24
  await tar.x({
41
25
  file: tarPath,
42
26
  cwd: dir,
43
- filter: (path) => filesToExtract.includes(path),
27
+ filter: (path) => binaries.includes(path),
44
28
  });
45
-
46
- // If wrapped, move files from wrapped directory to bin directory
47
- if (wrappedIn) {
48
- const wrappedDir = path.join(dir, wrappedIn);
49
- for (const binary of binaries) {
50
- const srcPath = path.join(wrappedDir, binary);
51
- const destPath = path.join(dir, binary);
52
- if (fs.existsSync(srcPath)) {
53
- fs.renameSync(srcPath, destPath);
54
- }
55
- }
56
- // Clean up empty wrapped directory
57
- try {
58
- fs.rmSync(wrappedDir, { recursive: true, force: true });
59
- } catch (err) {
60
- // Ignore cleanup errors
61
- }
62
- }
63
-
64
- console.log(`Successfully extracted ${binaries} to "${dir}"`);
29
+ console.log(`Successfully extracted binaries to "${dir}"`);
65
30
  } catch (err) {
66
31
  throw new Error(`Extraction failed: ${err.message}`);
67
32
  }
68
33
  }
69
34
 
70
- async function extractZip(zipPath, binaries, dir, wrappedIn) {
35
+ async function extractZip(zipPath, binaries, dir) {
71
36
  try {
72
37
  const zipData = fs.readFileSync(zipPath);
73
38
  const zip = await JSZip.loadAsync(zipData);
74
-
75
39
  for (const binary of binaries) {
76
- const binaryPath = wrappedIn
77
- ? path.join(wrappedIn, binary).replace(/\\/g, "/")
78
- : binary;
79
-
80
- if (!zip.files[binaryPath]) {
40
+ if (!zip.files[binary]) {
81
41
  throw new Error(
82
- `Error: ${binaryPath} does not exist in ${zipPath}`,
42
+ `Error: ${binary} does not exist in ${zipPath}`,
83
43
  );
84
44
  }
85
45
 
86
- const content = await zip.files[binaryPath].async("nodebuffer");
46
+ const content = await zip.files[binary].async("nodebuffer");
87
47
  if (!fs.existsSync(dir)) {
88
48
  fs.mkdirSync(dir, { recursive: true });
89
49
  }
@@ -134,21 +94,11 @@ const install = async () => {
134
94
  fs.chmodSync(bin, 0o755);
135
95
  return;
136
96
  case "zip":
137
- return extractZip(
138
- archivePath,
139
- archive.bins,
140
- binDir,
141
- archive.wrappedIn,
142
- );
97
+ return extractZip(archivePath, archive.bins, binDir);
143
98
  case "tar":
144
99
  case "tar.gz":
145
100
  case "tgz":
146
- return extractTar(
147
- archivePath,
148
- archive.bins,
149
- binDir,
150
- archive.wrappedIn,
151
- );
101
+ return extractTar(archivePath, archive.bins, binDir);
152
102
  case "tar.zst":
153
103
  case "tzst":
154
104
  case "tar.xz":
@@ -190,8 +140,6 @@ const download = async (url, filename) => {
190
140
  url: url,
191
141
  responseType: "stream",
192
142
  timeout: 300000, // 5min
193
- httpAgent: agent,
194
- httpsAgent: agent,
195
143
  });
196
144
 
197
145
  const writer = fs.createWriteStream(filename);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@onkernel/cli",
3
- "version": "0.10.1",
3
+ "version": "0.10.2",
4
4
  "description": "Kernel CLI",
5
5
  "scripts": {
6
6
  "postinstall": "node install.js",
@@ -29,80 +29,79 @@
29
29
  "dependencies": {
30
30
  "axios": "^1.8.2",
31
31
  "jszip": "^3.10.1",
32
- "proxy-agent": "^6.5.0",
33
32
  "tar": "^7.4.3"
34
33
  },
35
34
  "archives": {
36
35
  "darwin-arm64": {
37
- "name": "kernel_0.10.1_darwin_arm64.tar.gz",
38
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_darwin_arm64.tar.gz",
36
+ "name": "kernel_0.10.2_darwin_arm64.tar.gz",
37
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_darwin_arm64.tar.gz",
39
38
  "bins": [
40
39
  "kernel"
41
40
  ],
42
41
  "format": "tar.gz",
43
42
  "checksum": {
44
43
  "algorithm": "sha256",
45
- "digest": "7c8d3028baca527d42bd99f52bf48d21f8470a9680664ca69436b6093a5583a3"
44
+ "digest": "117c02a06ee73fdbb91b9c2fa3ea427def7de2ef2d8c60a5c2390f61a646e7db"
46
45
  }
47
46
  },
48
47
  "darwin-x64": {
49
- "name": "kernel_0.10.1_darwin_amd64.tar.gz",
50
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_darwin_amd64.tar.gz",
48
+ "name": "kernel_0.10.2_darwin_amd64.tar.gz",
49
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_darwin_amd64.tar.gz",
51
50
  "bins": [
52
51
  "kernel"
53
52
  ],
54
53
  "format": "tar.gz",
55
54
  "checksum": {
56
55
  "algorithm": "sha256",
57
- "digest": "34c0d640c4285bba4e27ad0d7ec3e8fbe3ad859cd7cdf115d12871e200c67114"
56
+ "digest": "5456760000a041064dafda8c9cc184c89d3552154006a6f370b5dbd2841e4ab8"
58
57
  }
59
58
  },
60
59
  "linux-arm64": {
61
- "name": "kernel_0.10.1_linux_arm64.tar.gz",
62
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_linux_arm64.tar.gz",
60
+ "name": "kernel_0.10.2_linux_arm64.tar.gz",
61
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_linux_arm64.tar.gz",
63
62
  "bins": [
64
63
  "kernel"
65
64
  ],
66
65
  "format": "tar.gz",
67
66
  "checksum": {
68
67
  "algorithm": "sha256",
69
- "digest": "0a47a1e0292c96635d932b582b9054fd639ec30bd400dd76de20144f6f60f629"
68
+ "digest": "5426208fa8116a12048a7ec8afbc2c2e9a79a5cdef3104d2f1d9380b5d76b557"
70
69
  }
71
70
  },
72
71
  "linux-x64": {
73
- "name": "kernel_0.10.1_linux_amd64.tar.gz",
74
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_linux_amd64.tar.gz",
72
+ "name": "kernel_0.10.2_linux_amd64.tar.gz",
73
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_linux_amd64.tar.gz",
75
74
  "bins": [
76
75
  "kernel"
77
76
  ],
78
77
  "format": "tar.gz",
79
78
  "checksum": {
80
79
  "algorithm": "sha256",
81
- "digest": "724e9403c571237dfab1eff0adc56a806b51ca00f6a4e25ca6b1cd117c1836e4"
80
+ "digest": "afc3dce0374a4738dc3971c9cf3ba8f75bda54272ce6f493680f2439b36ca4d6"
82
81
  }
83
82
  },
84
83
  "win32-arm64": {
85
- "name": "kernel_0.10.1_windows_arm64.tar.gz",
86
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_windows_arm64.tar.gz",
84
+ "name": "kernel_0.10.2_windows_arm64.tar.gz",
85
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_windows_arm64.tar.gz",
87
86
  "bins": [
88
87
  "kernel.exe"
89
88
  ],
90
89
  "format": "tar.gz",
91
90
  "checksum": {
92
91
  "algorithm": "sha256",
93
- "digest": "cbd77fc981bd2e4f83314eafe3399caf97a7b9e21d3c19717633a680dc1d2c6d"
92
+ "digest": "1ff7130ed53e428412647d7bc9907bba8150898fca61802ce5bccfa74f196a72"
94
93
  }
95
94
  },
96
95
  "win32-x64": {
97
- "name": "kernel_0.10.1_windows_amd64.tar.gz",
98
- "url": "https://github.com/onkernel/cli/releases/download/v0.10.1/kernel_0.10.1_windows_amd64.tar.gz",
96
+ "name": "kernel_0.10.2_windows_amd64.tar.gz",
97
+ "url": "https://github.com/onkernel/cli/releases/download/v0.10.2/kernel_0.10.2_windows_amd64.tar.gz",
99
98
  "bins": [
100
99
  "kernel.exe"
101
100
  ],
102
101
  "format": "tar.gz",
103
102
  "checksum": {
104
103
  "algorithm": "sha256",
105
- "digest": "dca0c309789cf7dd79f5c52c360cdbea82092d0f6589a569a2fb07ec7d0e1f1c"
104
+ "digest": "dd3300a9ede1ea056d2516e5cca841702e57a669625ddf4f149dda4b4c5940f7"
106
105
  }
107
106
  }
108
107
  }