@onkernel/cli 0.8.2 → 0.9.1

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 +41 -0
  2. package/lib.js +9 -61
  3. package/package.json +19 -20
package/README.md CHANGED
@@ -106,12 +106,14 @@ Create an API key from the [Kernel dashboard](https://dashboard.onkernel.com).
106
106
  ### App Deployment
107
107
 
108
108
  - `kernel deploy <file>` - Deploy an app to Kernel
109
+
109
110
  - `--version <version>` - Specify app version (default: latest)
110
111
  - `--force` - Allow overwriting existing version
111
112
  - `--env <KEY=VALUE>`, `-e` - Set environment variables (can be used multiple times)
112
113
  - `--env-file <file>` - Load environment variables from file (can be used multiple times)
113
114
 
114
115
  - `kernel deploy logs <deployment_id>` - Stream logs for a deployment
116
+
115
117
  - `--follow`, `-f` - Follow logs in real-time (stream continuously)
116
118
  - `--since`, `-s` - How far back to retrieve logs. Duration formats: ns, us, ms, s, m, h (e.g., 5m, 2h, 1h30m). Timestamps also supported: 2006-01-02, 2006-01-02T15:04, 2006-01-02T15:04:05, 2006-01-02T15:04:05.000
117
119
  - `--with-timestamps`, `-t` - Include timestamps in each log line
@@ -234,6 +236,23 @@ Create an API key from the [Kernel dashboard](https://dashboard.onkernel.com).
234
236
  - `--mode <mode>` - File mode (octal string)
235
237
  - `--source <path>` - Local source file path (required)
236
238
 
239
+ ### Browser Extensions
240
+
241
+ - `kernel browsers extensions upload <id or persistent id> <extension-path>...` - Ad-hoc upload of one or more unpacked extensions to a running browser instance.
242
+
243
+ ### Extension Management
244
+
245
+ - `kernel extensions list` - List all uploaded extensions
246
+ - `kernel extensions upload <directory>` - Upload an unpacked browser extension directory
247
+ - `--name <name>` - Optional unique extension name
248
+ - `kernel extensions download <id-or-name>` - Download an extension archive
249
+ - `--to <directory>` - Output directory (required)
250
+ - `kernel extensions download-web-store <url>` - Download an extension from the Chrome Web Store
251
+ - `--to <directory>` - Output directory (required)
252
+ - `--os <os>` - Target OS: mac, win, or linux (default: linux)
253
+ - `kernel extensions delete <id-or-name>` - Delete an extension by ID or name
254
+ - `-y, --yes` - Skip confirmation prompt
255
+
237
256
  ## Examples
238
257
 
239
258
  ### Deploy with environment variables
@@ -309,6 +328,28 @@ kernel browsers fs upload my-browser --file "local.txt:remote.txt" --dest-dir "/
309
328
  kernel browsers fs list-files my-browser --path "/tmp"
310
329
  ```
311
330
 
331
+ ### Extension management
332
+
333
+ ```bash
334
+ # List all uploaded extensions
335
+ kernel extensions list
336
+
337
+ # Upload an unpacked extension directory
338
+ kernel extensions upload ./my-extension --name my-custom-extension
339
+
340
+ # Download an extension from Chrome Web Store
341
+ kernel extensions download-web-store "https://chrome.google.com/webstore/detail/extension-id" --to ./downloaded-extension
342
+
343
+ # Download a previously uploaded extension
344
+ kernel extensions download my-extension-id --to ./my-extension
345
+
346
+ # Delete an extension
347
+ kernel extensions delete my-extension-name --yes
348
+
349
+ # Upload extensions to a running browser instance
350
+ kernel browsers extensions upload my-browser ./extension1 ./extension2
351
+ ```
352
+
312
353
  ## Getting Help
313
354
 
314
355
  - `kernel --help` - Show all available commands
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.8.2",
3
+ "version": "0.9.1",
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.8.2_darwin_arm64.tar.gz",
38
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_darwin_arm64.tar.gz",
36
+ "name": "kernel_0.9.1_darwin_arm64.tar.gz",
37
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "4fe9d869fac89599da264a80d410534fbd0d10f08b9f39e90dee14f25428c3bf"
44
+ "digest": "c5411e6c8974901ed01ef193d8dd4bb281bdba430b3fc4a86d01a26e9e14c34d"
46
45
  }
47
46
  },
48
47
  "darwin-x64": {
49
- "name": "kernel_0.8.2_darwin_amd64.tar.gz",
50
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_darwin_amd64.tar.gz",
48
+ "name": "kernel_0.9.1_darwin_amd64.tar.gz",
49
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "bb5d67809c772accff55946f2f07a06ecac94bd1ba53a23fc93aba82204070d4"
56
+ "digest": "095407098a594fc77f34828a0599230e17cb17afdc76cc52c4d9a19316184729"
58
57
  }
59
58
  },
60
59
  "linux-arm64": {
61
- "name": "kernel_0.8.2_linux_arm64.tar.gz",
62
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_linux_arm64.tar.gz",
60
+ "name": "kernel_0.9.1_linux_arm64.tar.gz",
61
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "f8495b7163871cdf33af541c917f830e4520cbad1c95614a2a88c9bc2b63edb9"
68
+ "digest": "c161a5da37a7fec0ac308cd72a56e41b1ae3de01079d67d94cad17593963ae4d"
70
69
  }
71
70
  },
72
71
  "linux-x64": {
73
- "name": "kernel_0.8.2_linux_amd64.tar.gz",
74
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_linux_amd64.tar.gz",
72
+ "name": "kernel_0.9.1_linux_amd64.tar.gz",
73
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "7178c01c5d8337aebdac0d6723197ce2aa0841553b5ed0bcdaeb8450b57ea89e"
80
+ "digest": "7ed1d4a3b2a68ff446fc2fb6eb5d7ece95ccac51248a8b71f87184ba23c16d25"
82
81
  }
83
82
  },
84
83
  "win32-arm64": {
85
- "name": "kernel_0.8.2_windows_arm64.tar.gz",
86
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_windows_arm64.tar.gz",
84
+ "name": "kernel_0.9.1_windows_arm64.tar.gz",
85
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "cd8e70be651197b04b5e2fea0b6cf0aec13d7116e18cc4e0e6e0171a51699e9d"
92
+ "digest": "012f2bb76f95688084c2e7150c3201d2581f594bc292523d5f119ac808caa1ba"
94
93
  }
95
94
  },
96
95
  "win32-x64": {
97
- "name": "kernel_0.8.2_windows_amd64.tar.gz",
98
- "url": "https://github.com/onkernel/cli/releases/download/v0.8.2/kernel_0.8.2_windows_amd64.tar.gz",
96
+ "name": "kernel_0.9.1_windows_amd64.tar.gz",
97
+ "url": "https://github.com/onkernel/cli/releases/download/v0.9.1/kernel_0.9.1_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": "582f0bb2a10eacf09c905e22faf289bc50939bf534b0940a1e025932110aca69"
104
+ "digest": "921f62567e7be8adc379c256899695603f80596184d5589d301eabec1de17335"
106
105
  }
107
106
  }
108
107
  }