@genspark/cli 1.0.22 β 1.0.23
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 +86 -21
- package/dist/commands/mesh.js +1 -1
- package/dist/commands/mesh.js.map +1 -1
- package/dist/mesh/checkupdate.d.ts +40 -0
- package/dist/mesh/checkupdate.d.ts.map +1 -0
- package/dist/mesh/checkupdate.js +71 -0
- package/dist/mesh/checkupdate.js.map +1 -0
- package/dist/mesh/download.d.ts +4 -1
- package/dist/mesh/download.d.ts.map +1 -1
- package/dist/mesh/download.js +49 -11
- package/dist/mesh/download.js.map +1 -1
- package/dist/mesh/manifest.d.ts +1 -1
- package/dist/mesh/manifest.js +6 -6
- package/dist/mesh/upgrade.d.ts +1 -1
- package/dist/mesh/upgrade.d.ts.map +1 -1
- package/dist/mesh/upgrade.js +2 -52
- package/dist/mesh/upgrade.js.map +1 -1
- package/package.json +1 -1
- package/skills/gsk-google-drive/SKILL.md +8 -7
package/README.md
CHANGED
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
| π± **Social Media** | Twitter/X, Instagram, Reddit β search posts/users, get comments, connections, and more (30 APIs) |
|
|
27
27
|
| π€ **Agents** | Podcasts, docs, slides, deep research, fact-checking, websites, batch media generation |
|
|
28
28
|
| π **Voice** | Voice cloning, voice changer |
|
|
29
|
-
| πΈοΈ **Mesh** | Secure SSH between your devices over a private tailnet β `gsk mesh join
|
|
29
|
+
| πΈοΈ **Mesh** | Secure SSH between your devices over a private tailnet β `gsk mesh join` / `serve` / `ssh` / `scp` / `sftp` / `forward` |
|
|
30
30
|
|
|
31
31
|
## Table of Contents
|
|
32
32
|
|
|
@@ -564,9 +564,10 @@ gsk meeting get --task_id "e02fd0f1-..."
|
|
|
564
564
|
|
|
565
565
|
#### google_drive
|
|
566
566
|
|
|
567
|
-
Google Drive file operations: search, read, upload.
|
|
567
|
+
Google Drive file operations: list, search, read, upload.
|
|
568
568
|
|
|
569
569
|
```bash
|
|
570
|
+
gsk google_drive list --folder_url "https://drive.google.com/drive/folders/..."
|
|
570
571
|
gsk google_drive search --query "budget 2026"
|
|
571
572
|
gsk google_drive read --file_id 1hq9kH63sc...
|
|
572
573
|
```
|
|
@@ -880,42 +881,106 @@ This separation allows programs to parse clean JSON from stdout while humans can
|
|
|
880
881
|
|
|
881
882
|
## Mesh β Secure SSH Between Your Devices
|
|
882
883
|
|
|
883
|
-
`gsk mesh`
|
|
884
|
+
`gsk mesh` gives all the devices signed in to your Genspark account a private, end-to-end-encrypted network (a "tailnet", Tailscale-based) and SSH over it β no public IPs, no port-forwarding on your router, no separate login. Each device gets a stable `100.64.x.x` address; any device can reach any other.
|
|
884
885
|
|
|
885
|
-
|
|
886
|
+
It reuses your `gsk` login: once you `gsk login`, every `gsk mesh` command authenticates with the same token.
|
|
886
887
|
|
|
887
|
-
|
|
888
|
+
`gsk mesh` is a thin wrapper around the native `gsk-mesh` binary, fetched from the Genspark CDN on first use (~45 MB), verified by sha256, cached at `~/.genspark-tool-cli/bin/gsk-mesh`, and re-verified on every run (Apple-notarized on macOS, DigiCert-signed on Windows). Supported platforms: macOS (arm64/x64), Linux (x64/arm64), Windows (x64).
|
|
889
|
+
|
|
890
|
+
> **Scope:** the mesh only spans devices signed in to **your own account**. "Other devices" below always means your other devices β there is no cross-account access.
|
|
891
|
+
|
|
892
|
+
### Command reference
|
|
893
|
+
|
|
894
|
+
| Command | What it does |
|
|
895
|
+
|---|---|
|
|
896
|
+
| `gsk mesh join [--name <name>]` | Enroll **this** device in the mesh. Starts the local tailscaled daemon and reports the assigned tailnet IP. Run once per device. |
|
|
897
|
+
| `gsk mesh leave` | Sign this device out of the mesh, stop tailscaled, and remove its published SSH key. |
|
|
898
|
+
| `gsk mesh serve [--stop]` | Make this device **accept** incoming mesh SSH (runs an embedded SSH server β no OS-level `sshd` needed). Requires `join`. Keeps serving via a detached daemon; `--stop` tears it down. |
|
|
899
|
+
| `gsk mesh ssh <[user@]node> [-- <args>]` | SSH **into** another device. Anything after `--` is passed to `ssh` (a remote command, `-i`, etc.). |
|
|
900
|
+
| `gsk mesh scp <src...> <dst>` | Copy files to/from a node. Remote refs look like `[user@]node:path`. |
|
|
901
|
+
| `gsk mesh sftp <node>` | Interactive SFTP session to a node. |
|
|
902
|
+
| `gsk mesh forward -L <spec> <node>` | Hold an SSH port-forward open through the mesh (`-L` local, `-R` remote; repeatable). |
|
|
903
|
+
| `gsk mesh devices` | List the devices currently on your tailnet. |
|
|
904
|
+
| `gsk mesh status` | Health of the mesh + whether this device is serving. |
|
|
905
|
+
| `gsk mesh revoke <node-id>` | Expire another device by its id (from `gsk mesh devices`). |
|
|
906
|
+
| `gsk mesh whoami` | Show the resolved auth state (token source, base URL). |
|
|
907
|
+
| `gsk mesh upgrade [--force\|--prerelease]` | Update the native `gsk-mesh` binary. |
|
|
908
|
+
|
|
909
|
+
`node` is either a device name (resolved against `gsk mesh devices`) or a tailnet IP. Run `gsk mesh --help` (or `gsk mesh <cmd> --help`) for the authoritative, native help.
|
|
910
|
+
|
|
911
|
+
### 1. First-time setup (every device)
|
|
888
912
|
|
|
889
913
|
```bash
|
|
890
|
-
gsk login
|
|
891
|
-
gsk mesh join --name laptop
|
|
914
|
+
gsk login # once per machine; shared with all gsk commands
|
|
915
|
+
gsk mesh join --name laptop # downloads gsk-mesh on first use, joins the mesh
|
|
892
916
|
# Joined mesh as laptop (100.64.0.5).
|
|
893
917
|
```
|
|
894
918
|
|
|
895
|
-
|
|
919
|
+
Do this on each device you want in the mesh (`--name` defaults to the hostname).
|
|
920
|
+
|
|
921
|
+
### 2. Make a device reachable (the "server" side)
|
|
922
|
+
|
|
923
|
+
To let your **other** devices SSH *into* this one β e.g. a home workstation, a build box, a cloud VM:
|
|
896
924
|
|
|
897
925
|
```bash
|
|
898
|
-
gsk mesh
|
|
899
|
-
|
|
900
|
-
gsk mesh
|
|
901
|
-
gsk mesh forward -L 8080:localhost:80 laptop # port-forward
|
|
902
|
-
gsk mesh status # is the mesh service healthy?
|
|
903
|
-
gsk mesh leave # disconnect this device
|
|
926
|
+
gsk mesh serve # embedded SSH server; no sshd to install/configure
|
|
927
|
+
# Serving mesh SSH. Reachable at 100.64.0.7:22.
|
|
928
|
+
gsk mesh serve --stop # stop accepting connections
|
|
904
929
|
```
|
|
905
930
|
|
|
906
|
-
|
|
931
|
+
`serve` runs in the background and keeps serving after the command returns. Authorization is automatic: each serving device publishes its mesh SSH public key to your account, and peers pull the set β so a freshly-joined device can connect without any manual key exchange. (No `~/.ssh/authorized_keys` editing, no OpenSSH Server feature on Windows.)
|
|
932
|
+
|
|
933
|
+
### 3. Connect to other devices (the "client" side)
|
|
934
|
+
|
|
935
|
+
```bash
|
|
936
|
+
gsk mesh ssh laptop # interactive shell
|
|
937
|
+
gsk mesh ssh user@laptop # specify the remote login user
|
|
938
|
+
gsk mesh ssh laptop -- 'systemctl status nginx' # run a remote command and exit
|
|
939
|
+
gsk mesh ssh laptop -i ~/.ssh/id_ed25519 # use a specific identity file
|
|
940
|
+
|
|
941
|
+
gsk mesh scp ./build.tar.gz laptop:~/releases/ # push a file
|
|
942
|
+
gsk mesh scp laptop:/var/log/app.log ./ # pull a file
|
|
943
|
+
gsk mesh sftp laptop # interactive file browsing
|
|
944
|
+
|
|
945
|
+
# Forward a remote service to your local machine (e.g. a DB on the workstation):
|
|
946
|
+
gsk mesh forward -L 5432:localhost:5432 workstation
|
|
947
|
+
# Now localhost:5432 tunnels to the workstation over the mesh.
|
|
948
|
+
```
|
|
907
949
|
|
|
908
|
-
|
|
950
|
+
`ssh`/`scp`/`sftp`/`forward` shell out to your system `ssh`/`scp` over the tunnel, so all OpenSSH features work as-is: agent forwarding, `~/.ssh/config`, PTY, signal handling. To use a **non-default port**, set it in `~/.ssh/config` (`Host laptop` / `Port 2222`) β trailing `-- ...` args land in the remote-command position, so they're not the place for ssh options like `-p`.
|
|
909
951
|
|
|
910
|
-
###
|
|
952
|
+
### 4. Manage & inspect
|
|
911
953
|
|
|
912
954
|
```bash
|
|
913
|
-
gsk mesh
|
|
914
|
-
gsk mesh
|
|
915
|
-
gsk mesh
|
|
955
|
+
gsk mesh devices # who's on the tailnet
|
|
956
|
+
gsk mesh status # mesh health + serve state
|
|
957
|
+
gsk mesh revoke <node-id> # kick a lost/old device (id from `devices`)
|
|
958
|
+
gsk mesh leave # remove THIS device from the mesh
|
|
916
959
|
```
|
|
917
960
|
|
|
918
|
-
|
|
961
|
+
### 5. Keeping the binary current
|
|
962
|
+
|
|
963
|
+
```bash
|
|
964
|
+
gsk mesh upgrade # check + pull the latest gsk-mesh release
|
|
965
|
+
gsk mesh upgrade --force # reinstall even if already at the latest
|
|
966
|
+
gsk mesh upgrade --prerelease # opt into the beta channel
|
|
967
|
+
```
|
|
968
|
+
|
|
969
|
+
The native binary versions independently of `@genspark/cli`, so new mesh features land without an `npm install -g @genspark/cli` cycle. Once a binary is installed, `gsk mesh` also checks for updates in the background on the same 4-hour cadence as the CLI's own auto-update (honoring `GSK_NO_AUTO_UPDATE` / `"auto_update": false`; the background check is skipped on Windows, where a running `.exe` can't be replaced in place β run `gsk mesh upgrade` explicitly there).
|
|
970
|
+
|
|
971
|
+
> `gsk mesh login` / `logout` are not separate flows β `gsk` and `gsk mesh` share one authentication. Use `gsk login` / `gsk logout`.
|
|
972
|
+
|
|
973
|
+
### End-to-end example: reach a home box from a laptop
|
|
974
|
+
|
|
975
|
+
```bash
|
|
976
|
+
# On the home workstation:
|
|
977
|
+
gsk login && gsk mesh join --name workstation && gsk mesh serve
|
|
978
|
+
|
|
979
|
+
# On the laptop (anywhere in the world):
|
|
980
|
+
gsk login && gsk mesh join --name laptop
|
|
981
|
+
gsk mesh ssh workstation -- 'uname -a && uptime'
|
|
982
|
+
gsk mesh forward -L 8080:localhost:80 workstation # browse its local web app at localhost:8080
|
|
983
|
+
```
|
|
919
984
|
|
|
920
985
|
## Available Models
|
|
921
986
|
|
package/dist/commands/mesh.js
CHANGED
|
@@ -130,7 +130,7 @@ export async function runMesh(args, baseUrlOverride) {
|
|
|
130
130
|
// could call downloadAndInstall at once and race.
|
|
131
131
|
let bin;
|
|
132
132
|
try {
|
|
133
|
-
bin = await ensureMeshBinary();
|
|
133
|
+
bin = await ensureMeshBinary(baseUrlOverride);
|
|
134
134
|
}
|
|
135
135
|
catch (err) {
|
|
136
136
|
logError(err.message);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mesh.js","sourceRoot":"","sources":["../../src/commands/mesh.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"mesh.js","sourceRoot":"","sources":["../../src/commands/mesh.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared gsk-mesh "what's the latest release" probe against the backend.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from upgrade.ts so BOTH the explicit `gsk mesh upgrade` path AND
|
|
5
|
+
* first-run download (download.ts::ensureMeshBinary) can ask the backend for the
|
|
6
|
+
* current release β without a circular import (upgrade.ts imports download.ts,
|
|
7
|
+
* and download.ts now needs this probe).
|
|
8
|
+
*
|
|
9
|
+
* Endpoint (gen-spark#32059):
|
|
10
|
+
* GET {base}/api/gsk-mesh/checkupdate/{target}?channel=stable|beta
|
|
11
|
+
* ¤t_version=<installed>
|
|
12
|
+
* β 200 {version, sha256, url, notes} (update / latest available)
|
|
13
|
+
* β 204 (already latest / none promoted)
|
|
14
|
+
*
|
|
15
|
+
* Pass currentVersion=null to always get the channel's latest (first-run /
|
|
16
|
+
* `--force`). Auth is optional: the probe frequently fires unauthenticated, so
|
|
17
|
+
* the bearer token is sent only when present.
|
|
18
|
+
*/
|
|
19
|
+
import { type MeshTarget } from './manifest.js';
|
|
20
|
+
export interface CheckUpdateResponse {
|
|
21
|
+
version: string;
|
|
22
|
+
sha256: string;
|
|
23
|
+
url: string;
|
|
24
|
+
notes?: string;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Resolve the backend base URL the gsk-mesh endpoint is served from.
|
|
28
|
+
*
|
|
29
|
+
* Priority: explicit CLI override > GSK_BASE_URL env > config file > PROD
|
|
30
|
+
* default. Falls back to PROD rather than gsk's localhost dev default because
|
|
31
|
+
* the gsk-mesh binaries + endpoint are production-served.
|
|
32
|
+
*/
|
|
33
|
+
export declare function resolveBaseUrl(override?: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Query the backend for the latest gsk-mesh release for `target` + `channel`.
|
|
36
|
+
* Returns the manifest (200), null (204 / no update), or throws on transport /
|
|
37
|
+
* HTTP errors.
|
|
38
|
+
*/
|
|
39
|
+
export declare function fetchCheckUpdate(target: MeshTarget, channel: 'stable' | 'beta', currentVersion: string | null, baseUrlOverride?: string): Promise<CheckUpdateResponse | null>;
|
|
40
|
+
//# sourceMappingURL=checkupdate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkupdate.d.ts","sourceRoot":"","sources":["../../src/mesh/checkupdate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,KAAK,UAAU,EAAE,MAAM,eAAe,CAAA;AAG/C,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,CAAA;IACd,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,CAAC,EAAE,MAAM,CAAA;CACf;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAQxD;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,QAAQ,GAAG,MAAM,EAC1B,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,eAAe,CAAC,EAAE,MAAM,GACvB,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC,CA6BrC"}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared gsk-mesh "what's the latest release" probe against the backend.
|
|
3
|
+
*
|
|
4
|
+
* Extracted from upgrade.ts so BOTH the explicit `gsk mesh upgrade` path AND
|
|
5
|
+
* first-run download (download.ts::ensureMeshBinary) can ask the backend for the
|
|
6
|
+
* current release β without a circular import (upgrade.ts imports download.ts,
|
|
7
|
+
* and download.ts now needs this probe).
|
|
8
|
+
*
|
|
9
|
+
* Endpoint (gen-spark#32059):
|
|
10
|
+
* GET {base}/api/gsk-mesh/checkupdate/{target}?channel=stable|beta
|
|
11
|
+
* ¤t_version=<installed>
|
|
12
|
+
* β 200 {version, sha256, url, notes} (update / latest available)
|
|
13
|
+
* β 204 (already latest / none promoted)
|
|
14
|
+
*
|
|
15
|
+
* Pass currentVersion=null to always get the channel's latest (first-run /
|
|
16
|
+
* `--force`). Auth is optional: the probe frequently fires unauthenticated, so
|
|
17
|
+
* the bearer token is sent only when present.
|
|
18
|
+
*/
|
|
19
|
+
import { loadConfigFile } from '../config.js';
|
|
20
|
+
/**
|
|
21
|
+
* Resolve the backend base URL the gsk-mesh endpoint is served from.
|
|
22
|
+
*
|
|
23
|
+
* Priority: explicit CLI override > GSK_BASE_URL env > config file > PROD
|
|
24
|
+
* default. Falls back to PROD rather than gsk's localhost dev default because
|
|
25
|
+
* the gsk-mesh binaries + endpoint are production-served.
|
|
26
|
+
*/
|
|
27
|
+
export function resolveBaseUrl(override) {
|
|
28
|
+
const cfg = loadConfigFile();
|
|
29
|
+
return (override ||
|
|
30
|
+
process.env.GSK_BASE_URL ||
|
|
31
|
+
cfg.base_url ||
|
|
32
|
+
'https://www.genspark.ai').replace(/\/$/, '');
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Query the backend for the latest gsk-mesh release for `target` + `channel`.
|
|
36
|
+
* Returns the manifest (200), null (204 / no update), or throws on transport /
|
|
37
|
+
* HTTP errors.
|
|
38
|
+
*/
|
|
39
|
+
export async function fetchCheckUpdate(target, channel, currentVersion, baseUrlOverride) {
|
|
40
|
+
const base = resolveBaseUrl(baseUrlOverride);
|
|
41
|
+
const cfg = loadConfigFile();
|
|
42
|
+
const apiKey = cfg.api_key || process.env.GSK_API_KEY;
|
|
43
|
+
const params = new URLSearchParams({ channel });
|
|
44
|
+
if (currentVersion)
|
|
45
|
+
params.set('current_version', currentVersion);
|
|
46
|
+
const url = `${base}/api/gsk-mesh/checkupdate/${target}?${params.toString()}`;
|
|
47
|
+
const headers = {
|
|
48
|
+
// gsk-mesh/<ver> UA lets the backend gatekeeper treat this as client
|
|
49
|
+
// traffic for gradual rollout (gk_gsk_mesh_update).
|
|
50
|
+
'User-Agent': `gsk-mesh/${currentVersion ?? '0.0.0'}`,
|
|
51
|
+
};
|
|
52
|
+
if (currentVersion)
|
|
53
|
+
headers['gs-version'] = currentVersion;
|
|
54
|
+
if (apiKey)
|
|
55
|
+
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
56
|
+
const controller = new AbortController();
|
|
57
|
+
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
58
|
+
try {
|
|
59
|
+
const resp = await fetch(url, { headers, signal: controller.signal });
|
|
60
|
+
if (resp.status === 204)
|
|
61
|
+
return null;
|
|
62
|
+
if (!resp.ok) {
|
|
63
|
+
throw new Error(`checkupdate HTTP ${resp.status}`);
|
|
64
|
+
}
|
|
65
|
+
return (await resp.json());
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
clearTimeout(timeout);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=checkupdate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checkupdate.js","sourceRoot":"","sources":["../../src/mesh/checkupdate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAS7C;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,QAAiB;IAC9C,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;IAC5B,OAAO,CACL,QAAQ;QACR,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,GAAG,CAAC,QAAQ;QACZ,yBAAyB,CAC1B,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;AACtB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,MAAkB,EAClB,OAA0B,EAC1B,cAA6B,EAC7B,eAAwB;IAExB,MAAM,IAAI,GAAG,cAAc,CAAC,eAAe,CAAC,CAAA;IAC5C,MAAM,GAAG,GAAG,cAAc,EAAE,CAAA;IAC5B,MAAM,MAAM,GAAG,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,CAAA;IAErD,MAAM,MAAM,GAAG,IAAI,eAAe,CAAC,EAAE,OAAO,EAAE,CAAC,CAAA;IAC/C,IAAI,cAAc;QAAE,MAAM,CAAC,GAAG,CAAC,iBAAiB,EAAE,cAAc,CAAC,CAAA;IACjE,MAAM,GAAG,GAAG,GAAG,IAAI,6BAA6B,MAAM,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAA;IAE7E,MAAM,OAAO,GAA2B;QACtC,qEAAqE;QACrE,oDAAoD;QACpD,YAAY,EAAE,YAAY,cAAc,IAAI,OAAO,EAAE;KACtD,CAAA;IACD,IAAI,cAAc;QAAE,OAAO,CAAC,YAAY,CAAC,GAAG,cAAc,CAAA;IAC1D,IAAI,MAAM;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAA;IAEzD,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,IAAI,CAAC,CAAA;IAC1D,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,EAAE,CAAC,CAAA;QACrE,IAAI,IAAI,CAAC,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAA;QACpC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,IAAI,CAAC,MAAM,EAAE,CAAC,CAAA;QACpD,CAAC;QACD,OAAO,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,CAAwB,CAAA;IACnD,CAAC;YAAS,CAAC;QACT,YAAY,CAAC,OAAO,CAAC,CAAA;IACvB,CAAC;AACH,CAAC"}
|
package/dist/mesh/download.d.ts
CHANGED
|
@@ -24,8 +24,11 @@ export declare function getInstalledMeshVersion(): string | null;
|
|
|
24
24
|
/**
|
|
25
25
|
* Ensure the native gsk-mesh binary is present, current, and intact.
|
|
26
26
|
* Returns the absolute path to the verified binary.
|
|
27
|
+
*
|
|
28
|
+
* `baseUrlOverride` (the CLI `--base-url`) is threaded through to the first-run
|
|
29
|
+
* latest-version probe so it targets the same backend as the rest of the CLI.
|
|
27
30
|
*/
|
|
28
|
-
export declare function ensureMeshBinary(): Promise<string>;
|
|
31
|
+
export declare function ensureMeshBinary(baseUrlOverride?: string): Promise<string>;
|
|
29
32
|
/**
|
|
30
33
|
* Download a specific version+target from `url`, verify its sha256, install it
|
|
31
34
|
* atomically, and update the version/sha stamps. Shared by first-run
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/mesh/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;
|
|
1
|
+
{"version":3,"file":"download.d.ts","sourceRoot":"","sources":["../../src/mesh/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAgCH,0EAA0E;AAC1E,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,MAAM,GAAG,IAAI,CAEvD;AA8BD;;;;;;GAMG;AACH,wBAAsB,gBAAgB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAoChF;AA8CD;;;;GAIG;AACH,wBAAsB,kBAAkB,CACtC,GAAG,EAAE,MAAM,EACX,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CAQf"}
|
package/dist/mesh/download.js
CHANGED
|
@@ -23,7 +23,8 @@ import * as os from 'os';
|
|
|
23
23
|
import * as crypto from 'crypto';
|
|
24
24
|
import * as https from 'https';
|
|
25
25
|
import { spawn } from 'child_process';
|
|
26
|
-
import { PINNED_VERSION, CHECKSUMS, cdnUrl, binExt, currentTarget, } from './manifest.js';
|
|
26
|
+
import { PINNED_VERSION, CHECKSUMS, CDN_BASE, cdnUrl, binExt, currentTarget, } from './manifest.js';
|
|
27
|
+
import { fetchCheckUpdate } from './checkupdate.js';
|
|
27
28
|
import { info, debug } from '../logger.js';
|
|
28
29
|
const BIN_DIR = path.join(os.homedir(), '.genspark-tool-cli', 'bin');
|
|
29
30
|
// Monotonic counter so concurrent downloadAndInstall calls within one process
|
|
@@ -78,10 +79,12 @@ function expectedShaForCached(target, installedVersion) {
|
|
|
78
79
|
/**
|
|
79
80
|
* Ensure the native gsk-mesh binary is present, current, and intact.
|
|
80
81
|
* Returns the absolute path to the verified binary.
|
|
82
|
+
*
|
|
83
|
+
* `baseUrlOverride` (the CLI `--base-url`) is threaded through to the first-run
|
|
84
|
+
* latest-version probe so it targets the same backend as the rest of the CLI.
|
|
81
85
|
*/
|
|
82
|
-
export async function ensureMeshBinary() {
|
|
86
|
+
export async function ensureMeshBinary(baseUrlOverride) {
|
|
83
87
|
const target = currentTarget();
|
|
84
|
-
const expectedPinned = CHECKSUMS[target];
|
|
85
88
|
const localPath = binPath(target);
|
|
86
89
|
if (fs.existsSync(localPath)) {
|
|
87
90
|
const installedVersion = readStamp(VERSION_STAMP);
|
|
@@ -94,30 +97,65 @@ export async function ensureMeshBinary() {
|
|
|
94
97
|
return localPath;
|
|
95
98
|
}
|
|
96
99
|
info(`gsk-mesh: cached binary failed integrity check (expected ${expected ?? '?'}, ` +
|
|
97
|
-
`got ${actual ?? '?'}) β re-downloading
|
|
100
|
+
`got ${actual ?? '?'}) β re-downloading`);
|
|
98
101
|
}
|
|
99
102
|
else if (installedVersion) {
|
|
100
103
|
// Upgraded past the pin via `gsk mesh upgrade`. Verify against the stamp;
|
|
101
|
-
// if the stamp is missing/mismatched we can't vouch for it β
|
|
102
|
-
// to the known-good pinned version.
|
|
104
|
+
// if the stamp is missing/mismatched we can't vouch for it β re-download.
|
|
103
105
|
const expected = readStamp(SHA_STAMP);
|
|
104
106
|
const actual = fileSha256(localPath);
|
|
105
107
|
if (expected && actual === expected) {
|
|
106
108
|
debug(`gsk-mesh cached + verified at ${localPath} (v${installedVersion})`);
|
|
107
109
|
return localPath;
|
|
108
110
|
}
|
|
109
|
-
info(`gsk-mesh: cached v${installedVersion} failed integrity check β `
|
|
110
|
-
`re-downloading pinned v${PINNED_VERSION}`);
|
|
111
|
+
info(`gsk-mesh: cached v${installedVersion} failed integrity check β re-downloading`);
|
|
111
112
|
}
|
|
112
113
|
else {
|
|
113
|
-
info(
|
|
114
|
+
info('gsk-mesh: cached binary has no version stamp β re-downloading');
|
|
114
115
|
}
|
|
115
116
|
}
|
|
116
|
-
|
|
117
|
-
await downloadAndInstall(cdnUrl(PINNED_VERSION, target), expectedPinned, PINNED_VERSION, target);
|
|
117
|
+
await downloadLatestOrPinned(target, baseUrlOverride);
|
|
118
118
|
info(`gsk-mesh installed at ${localPath}`);
|
|
119
119
|
return localPath;
|
|
120
120
|
}
|
|
121
|
+
/**
|
|
122
|
+
* Install the binary to use when nothing usable is cached.
|
|
123
|
+
*
|
|
124
|
+
* Prefers the backend-promoted latest stable release for this target, so a
|
|
125
|
+
* first-time `gsk mesh` lands directly on the current version instead of the
|
|
126
|
+
* compiled-in floor and only jumping forward on a later run (gen-spark#32378
|
|
127
|
+
* follow-up). Falls back to the pinned floor (PINNED_VERSION + CHECKSUMS)
|
|
128
|
+
* whenever the backend is unreachable, returns no manifest, or serves a URL
|
|
129
|
+
* outside the trusted CDN base.
|
|
130
|
+
*
|
|
131
|
+
* Either way the downloaded bytes are sha256-verified by downloadAndInstall β
|
|
132
|
+
* against the backend manifest's sha on the dynamic path, or the compiled-in
|
|
133
|
+
* CHECKSUMS value on the floor path β so no unverified binary is ever exec'd.
|
|
134
|
+
*/
|
|
135
|
+
async function downloadLatestOrPinned(target, baseUrlOverride) {
|
|
136
|
+
try {
|
|
137
|
+
// current_version=null β the backend returns the channel's latest
|
|
138
|
+
// regardless of what (if anything) we have cached.
|
|
139
|
+
const manifest = await fetchCheckUpdate(target, 'stable', null, baseUrlOverride);
|
|
140
|
+
if (manifest && manifest.version && manifest.sha256) {
|
|
141
|
+
// Defense in depth: only fetch binaries from the trusted CDN base,
|
|
142
|
+
// mirroring the same guard in `gsk mesh upgrade`.
|
|
143
|
+
if (manifest.url.startsWith(`${CDN_BASE}/`)) {
|
|
144
|
+
info(`Downloading gsk-mesh v${manifest.version} for ${target} β¦`);
|
|
145
|
+
await downloadAndInstall(manifest.url, manifest.sha256, manifest.version, target);
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
debug(`gsk-mesh: ignoring untrusted manifest URL ${manifest.url}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
catch (err) {
|
|
152
|
+
debug(`gsk-mesh: latest-version check failed (${err.message}); ` +
|
|
153
|
+
`falling back to pinned v${PINNED_VERSION}`);
|
|
154
|
+
}
|
|
155
|
+
// Fallback: the compiled-in floor, verified against CHECKSUMS.
|
|
156
|
+
info(`Downloading gsk-mesh v${PINNED_VERSION} for ${target} β¦`);
|
|
157
|
+
await downloadAndInstall(cdnUrl(PINNED_VERSION, target), CHECKSUMS[target], PINNED_VERSION, target);
|
|
158
|
+
}
|
|
121
159
|
/**
|
|
122
160
|
* Download a specific version+target from `url`, verify its sha256, install it
|
|
123
161
|
* atomically, and update the version/sha stamps. Shared by first-run
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/mesh/download.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,MAAM,MAAM,QAAQ,CAAA;AAChC,OAAO,KAAK,KAAK,MAAM,OAAO,CAAA;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAA;AACrC,OAAO,EACL,cAAc,EACd,SAAS,EACT,MAAM,EACN,MAAM,EACN,aAAa,GAEd,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,EAAE,KAAK,CAAC,CAAA;AAEpE,8EAA8E;AAC9E,2EAA2E;AAC3E,IAAI,WAAW,GAAG,CAAC,CAAA;AAEnB,SAAS,OAAO,CAAC,MAAc;IAC7B,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;AACxD,CAAC;AACD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,mBAAmB,CAAC,CAAA;AAC7D,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAA;AAExD,0EAA0E;AAC1E,MAAM,UAAU,eAAe;IAC7B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAA;IAChD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,sEAAsE;AACtE,MAAM,UAAU,uBAAuB;IACrC,OAAO,SAAS,CAAC,aAAa,CAAC,CAAA;AACjC,CAAC;AAED,sEAAsE;AACtE,SAAS,UAAU,CAAC,IAAY;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAA;QACjC,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC9D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,SAAS,CAAC,IAAY;IAC7B,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,CAAA;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,MAAkB,EAAE,gBAAwB;IACxE,IAAI,gBAAgB,KAAK,cAAc;QAAE,OAAO,SAAS,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,SAAS,CAAC,SAAS,CAAC,CAAA;AAC7B,CAAC;AAED
|
|
1
|
+
{"version":3,"file":"download.js","sourceRoot":"","sources":["../../src/mesh/download.ts"],"names":[],"mappings":"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"}
|
package/dist/mesh/manifest.d.ts
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* `gsk mesh upgrade` (and the autorun check) against the backend endpoint, so
|
|
22
22
|
* we do NOT re-publish @genspark/cli for every gsk-mesh release.
|
|
23
23
|
*/
|
|
24
|
-
export declare const PINNED_VERSION = "0.1.
|
|
24
|
+
export declare const PINNED_VERSION = "0.1.3";
|
|
25
25
|
export declare const CDN_BASE = "https://cdn1.genspark.ai/user-upload-image/client/gsk-mesh";
|
|
26
26
|
export type MeshTarget = 'darwin-arm64' | 'darwin-x64' | 'linux-x64' | 'linux-arm64' | 'win-x64';
|
|
27
27
|
/**
|
package/dist/mesh/manifest.js
CHANGED
|
@@ -21,7 +21,7 @@
|
|
|
21
21
|
* `gsk mesh upgrade` (and the autorun check) against the backend endpoint, so
|
|
22
22
|
* we do NOT re-publish @genspark/cli for every gsk-mesh release.
|
|
23
23
|
*/
|
|
24
|
-
export const PINNED_VERSION = '0.1.
|
|
24
|
+
export const PINNED_VERSION = '0.1.3';
|
|
25
25
|
export const CDN_BASE = 'https://cdn1.genspark.ai/user-upload-image/client/gsk-mesh';
|
|
26
26
|
/**
|
|
27
27
|
* Map process.platform / process.arch to a gsk-mesh target string.
|
|
@@ -67,10 +67,10 @@ export function cdnUrl(version, target) {
|
|
|
67
67
|
* The KEYS here are the contract surface with the backend (see top-of-file).
|
|
68
68
|
*/
|
|
69
69
|
export const CHECKSUMS = {
|
|
70
|
-
'darwin-arm64': '
|
|
71
|
-
'darwin-x64': '
|
|
72
|
-
'linux-x64': '
|
|
73
|
-
'linux-arm64': '
|
|
74
|
-
'win-x64': '
|
|
70
|
+
'darwin-arm64': '1d4480204ef20ab49b5c064ac294e398448113fd6803f99a512b20707b5987b3',
|
|
71
|
+
'darwin-x64': 'a03904876b68162da4caf6ba3cb884ad1d4cf0e94e7090400050f3712b51b9fd',
|
|
72
|
+
'linux-x64': 'e64024ba13de25cb0bdbf29dfe06793e6920a5cc276e9a2aa68c5c5581428bf0',
|
|
73
|
+
'linux-arm64': 'f0a86a975d8267773c5a2367ba3f1166adcddcf63d14bdb95190908a7de1975c',
|
|
74
|
+
'win-x64': 'c79b6fb54771f8d25e0d54e64ab211427d741d14e45ca33f4c7ffb01ebac9c6b',
|
|
75
75
|
};
|
|
76
76
|
//# sourceMappingURL=manifest.js.map
|
package/dist/mesh/upgrade.d.ts
CHANGED
|
@@ -18,7 +18,7 @@ export interface UpgradeOptions {
|
|
|
18
18
|
prerelease?: boolean;
|
|
19
19
|
/**
|
|
20
20
|
* Explicit `--base-url` from the command line (already resolved by the
|
|
21
|
-
* caller). Highest priority β see resolveBaseUrl.
|
|
21
|
+
* caller). Highest priority β see resolveBaseUrl in checkupdate.ts.
|
|
22
22
|
*/
|
|
23
23
|
baseUrlOverride?: string;
|
|
24
24
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;
|
|
1
|
+
{"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAiBH,MAAM,WAAW,cAAc;IAC7B,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,YAAY,GAAG,OAAO,CAAA;AAO9D;;;GAGG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CAiD7E;AAED;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,eAAe,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAsClF"}
|
package/dist/mesh/upgrade.js
CHANGED
|
@@ -13,66 +13,16 @@
|
|
|
13
13
|
* - Auth is optional: the autorun check frequently fires unauthenticated, so
|
|
14
14
|
* we send the bearer token when present but never require it.
|
|
15
15
|
*/
|
|
16
|
-
import { CDN_BASE, currentTarget
|
|
16
|
+
import { CDN_BASE, currentTarget } from './manifest.js';
|
|
17
17
|
import { downloadAndInstall, getInstalledMeshVersion, isMeshInstalled, } from './download.js';
|
|
18
|
+
import { fetchCheckUpdate } from './checkupdate.js';
|
|
18
19
|
import { loadUpdateMeta, saveUpdateMeta, CHECK_INTERVAL_MS, } from '../updater.js';
|
|
19
20
|
import { info, debug, error as logError } from '../logger.js';
|
|
20
21
|
import { loadConfigFile } from '../config.js';
|
|
21
|
-
/**
|
|
22
|
-
* Resolve the backend base URL the gsk-mesh endpoint is served from.
|
|
23
|
-
*
|
|
24
|
-
* Priority matches the main CLI's getGlobalOptions (CLI flag > env > config),
|
|
25
|
-
* then falls back to PROD rather than gsk's localhost dev default β gsk-mesh
|
|
26
|
-
* binaries + endpoint are production-served.
|
|
27
|
-
*/
|
|
28
|
-
function resolveBaseUrl(override) {
|
|
29
|
-
const cfg = loadConfigFile();
|
|
30
|
-
return (override ||
|
|
31
|
-
process.env.GSK_BASE_URL ||
|
|
32
|
-
cfg.base_url ||
|
|
33
|
-
'https://www.genspark.ai').replace(/\/$/, '');
|
|
34
|
-
}
|
|
35
22
|
/** channel string for the request: --prerelease β beta, else stable. */
|
|
36
23
|
function channelFor(opts) {
|
|
37
24
|
return opts.prerelease ? 'beta' : 'stable';
|
|
38
25
|
}
|
|
39
|
-
/**
|
|
40
|
-
* Query the backend for the latest gsk-mesh release for this target+channel.
|
|
41
|
-
* Returns the manifest (200), null (204 / no update), or throws on transport
|
|
42
|
-
* / HTTP errors.
|
|
43
|
-
*/
|
|
44
|
-
async function fetchCheckUpdate(target, channel, currentVersion, baseUrlOverride) {
|
|
45
|
-
const base = resolveBaseUrl(baseUrlOverride);
|
|
46
|
-
const cfg = loadConfigFile();
|
|
47
|
-
const apiKey = cfg.api_key || process.env.GSK_API_KEY;
|
|
48
|
-
const params = new URLSearchParams({ channel });
|
|
49
|
-
if (currentVersion)
|
|
50
|
-
params.set('current_version', currentVersion);
|
|
51
|
-
const url = `${base}/api/gsk-mesh/checkupdate/${target}?${params.toString()}`;
|
|
52
|
-
const headers = {
|
|
53
|
-
// gsk-mesh/<ver> UA lets the backend gatekeeper treat this as client
|
|
54
|
-
// traffic for gradual rollout (gk_gsk_mesh_update).
|
|
55
|
-
'User-Agent': `gsk-mesh/${currentVersion ?? '0.0.0'}`,
|
|
56
|
-
};
|
|
57
|
-
if (currentVersion)
|
|
58
|
-
headers['gs-version'] = currentVersion;
|
|
59
|
-
if (apiKey)
|
|
60
|
-
headers['Authorization'] = `Bearer ${apiKey}`;
|
|
61
|
-
const controller = new AbortController();
|
|
62
|
-
const timeout = setTimeout(() => controller.abort(), 8000);
|
|
63
|
-
try {
|
|
64
|
-
const resp = await fetch(url, { headers, signal: controller.signal });
|
|
65
|
-
if (resp.status === 204)
|
|
66
|
-
return null;
|
|
67
|
-
if (!resp.ok) {
|
|
68
|
-
throw new Error(`checkupdate HTTP ${resp.status}`);
|
|
69
|
-
}
|
|
70
|
-
return (await resp.json());
|
|
71
|
-
}
|
|
72
|
-
finally {
|
|
73
|
-
clearTimeout(timeout);
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
26
|
/**
|
|
77
27
|
* Body of the explicit `gsk mesh upgrade` command.
|
|
78
28
|
* `--force` ignores the installed version (always pulls the channel's latest).
|
package/dist/mesh/upgrade.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: gsk-google-drive
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description: 'Google Drive file operations. Actions: search, read, upload.'
|
|
4
|
+
description: 'Google Drive file operations. Actions: list, search, read, upload.'
|
|
5
5
|
metadata:
|
|
6
6
|
category: general
|
|
7
7
|
requires:
|
|
@@ -14,7 +14,7 @@ metadata:
|
|
|
14
14
|
|
|
15
15
|
**PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
|
|
16
16
|
|
|
17
|
-
Google Drive file operations. Actions: search, read, upload.
|
|
17
|
+
Google Drive file operations. Actions: list, search, read, upload.
|
|
18
18
|
|
|
19
19
|
## Usage
|
|
20
20
|
|
|
@@ -28,12 +28,13 @@ gsk gdrive [options]
|
|
|
28
28
|
|
|
29
29
|
| Flag | Required | Description |
|
|
30
30
|
|------|----------|-------------|
|
|
31
|
-
| `<action>` (positional) | Yes | Action to perform. 'search': Search files by name, type, or owner; 'read': Read and extract content from a file; 'upload': Upload a file to Google Drive (string, one of: search, read, upload) |
|
|
32
|
-
| `--query` | No | [search] Use keywords simply, terms will be combined into advanced search query
|
|
33
|
-
| `--mime_type` | No | [search] Filter by MIME type for 'search' (e.g., 'application/pdf'). \| [upload] The MIME type of the file (optional, will be auto-detected from file_name extension). Examples: 'text/plain', 'text/csv', 'application/json', 'image/png'. (string) |
|
|
31
|
+
| `<action>` (positional) | Yes | Action to perform. 'list': List files directly inside a Google Drive folder; 'search': Search files by name, type, or owner; 'read': Read and extract content from a file; 'upload': Upload a file to Google Drive (string, one of: list, search, read, upload) |
|
|
32
|
+
| `--query` | No | [search] Use keywords simply, terms will be combined into advanced search query later. Use `*` to list all authorized files, especially when `folder_id` or `folder_url` is supplied. (string) |
|
|
33
|
+
| `--mime_type` | No | [list] Optional MIME type filter. \| [search] Filter by MIME type for 'search' (e.g., 'application/pdf'). \| [upload] The MIME type of the file (optional, will be auto-detected from file_name extension). Examples: 'text/plain', 'text/csv', 'application/json', 'image/png'. (string) |
|
|
34
34
|
| `--owner` | No | [search] Filter by file owner (email address) for 'search' action (string) |
|
|
35
|
-
| `--folder_id` | No | [search] Search within a specific folder for 'search' action \| [upload] Google Drive folder ID to upload to. Optional, uploads to root if not specified. (string) |
|
|
36
|
-
| `--
|
|
35
|
+
| `--folder_id` | No | [list] Google Drive folder ID or folder URL. \| [search] Search within a specific folder for 'search' action. Accepts a folder ID or Google Drive folder URL. \| [upload] Google Drive folder ID to upload to. Optional, uploads to root if not specified. (string) |
|
|
36
|
+
| `--folder_url` | No | [list] Google Drive folder URL. \| [search] Google Drive folder URL to list/search within. (string) |
|
|
37
|
+
| `--trashed` | No | [list] Include trashed files. \| [search] Include trashed files in search results for 'search' action (boolean) |
|
|
37
38
|
| `--file_id` | No | [read] The ID of the file to read from Google Drive. (string) |
|
|
38
39
|
| `--question` | No | [read] The question to answer about the file content. (string) |
|
|
39
40
|
| `--content` | No | [upload] Text content to create as a file. Use this for creating text-based files (e.g., .txt, .md, .csv, .json, .html). Either 'content' or 'file_path' is required. (string) |
|