@genspark/cli 1.0.20 → 1.0.22

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"manifest.js","sourceRoot":"","sources":["../../src/mesh/manifest.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAA;AAErC,MAAM,CAAC,MAAM,QAAQ,GACnB,4DAA4D,CAAA;AAS9D;;;GAGG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,QAAQ,GACZ,OAAO,CAAC,QAAQ,KAAK,QAAQ;QAC3B,CAAC,CAAC,QAAQ;QACV,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;YAC5B,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,OAAO;gBAC5B,CAAC,CAAC,OAAO;gBACT,CAAC,CAAC,IAAI,CAAA;IACd,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IAEvF,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,wCAAwC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,IAAI;YAC1E,cAAc,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrD,CAAA;IACH,CAAC;IAED,wEAAwE;IACxE,2EAA2E;IAC3E,oBAAoB;IACpB,MAAM,MAAM,GAAG,QAAQ,KAAK,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAA;IACrE,IAAI,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACb,wCAAwC,MAAM,IAAI;YAChD,cAAc,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CACrD,CAAA;IACH,CAAC;IACD,OAAO,MAAoB,CAAA;AAC7B,CAAC;AAED,0CAA0C;AAC1C,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAA;AAChD,CAAC;AAED,0DAA0D;AAC1D,MAAM,UAAU,MAAM,CAAC,OAAe,EAAE,MAAc;IACpD,OAAO,GAAG,QAAQ,KAAK,OAAO,aAAa,OAAO,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,CAAA;AACjF,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,SAAS,GAA+B;IACnD,cAAc,EACZ,kEAAkE;IACpE,YAAY,EACV,kEAAkE;IACpE,WAAW,EACT,kEAAkE;IACpE,aAAa,EACX,kEAAkE;IACpE,SAAS,EACP,kEAAkE;CACrE,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * `gsk mesh upgrade` + the throttled autorun currency check.
3
+ *
4
+ * Talks to the backend endpoint added in gen-spark#32059:
5
+ * GET {base}/api/gsk-mesh/checkupdate/{target}?channel=stable|beta
6
+ * &current_version=<installed>
7
+ * → 200 {version, sha256, url, notes} (update available)
8
+ * → 204 (already latest / none promoted)
9
+ *
10
+ * Contract notes:
11
+ * - The CLI `--prerelease` flag maps to channel `beta` (the backend only
12
+ * knows stable/beta; `prerelease` would collapse to stable).
13
+ * - Auth is optional: the autorun check frequently fires unauthenticated, so
14
+ * we send the bearer token when present but never require it.
15
+ */
16
+ export interface UpgradeOptions {
17
+ force?: boolean;
18
+ prerelease?: boolean;
19
+ /**
20
+ * Explicit `--base-url` from the command line (already resolved by the
21
+ * caller). Highest priority — see resolveBaseUrl.
22
+ */
23
+ baseUrlOverride?: string;
24
+ }
25
+ export type UpgradeResult = 'updated' | 'up-to-date' | 'error';
26
+ /**
27
+ * Body of the explicit `gsk mesh upgrade` command.
28
+ * `--force` ignores the installed version (always pulls the channel's latest).
29
+ */
30
+ export declare function runUpgrade(opts: UpgradeOptions): Promise<UpgradeResult>;
31
+ /**
32
+ * Best-effort autorun currency check, invoked (non-awaited) from the `gsk mesh`
33
+ * passthrough path. Only fires when:
34
+ * - autorun isn't disabled (GSK_NO_AUTO_UPDATE / config auto_update:false),
35
+ * - a binary is already installed (never triggers a first download here),
36
+ * - the shared 4h throttle has elapsed.
37
+ * A newer release is downloaded in the background so it applies next run; the
38
+ * current invocation is never blocked or failed by this.
39
+ */
40
+ export declare function maybeAutoUpgradeMesh(baseUrlOverride?: string): Promise<void>;
41
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAoBH,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;AAwE9D;;;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"}
@@ -0,0 +1,179 @@
1
+ /**
2
+ * `gsk mesh upgrade` + the throttled autorun currency check.
3
+ *
4
+ * Talks to the backend endpoint added in gen-spark#32059:
5
+ * GET {base}/api/gsk-mesh/checkupdate/{target}?channel=stable|beta
6
+ * &current_version=<installed>
7
+ * → 200 {version, sha256, url, notes} (update available)
8
+ * → 204 (already latest / none promoted)
9
+ *
10
+ * Contract notes:
11
+ * - The CLI `--prerelease` flag maps to channel `beta` (the backend only
12
+ * knows stable/beta; `prerelease` would collapse to stable).
13
+ * - Auth is optional: the autorun check frequently fires unauthenticated, so
14
+ * we send the bearer token when present but never require it.
15
+ */
16
+ import { CDN_BASE, currentTarget, } from './manifest.js';
17
+ import { downloadAndInstall, getInstalledMeshVersion, isMeshInstalled, } from './download.js';
18
+ import { loadUpdateMeta, saveUpdateMeta, CHECK_INTERVAL_MS, } from '../updater.js';
19
+ import { info, debug, error as logError } from '../logger.js';
20
+ 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
+ /** channel string for the request: --prerelease → beta, else stable. */
36
+ function channelFor(opts) {
37
+ return opts.prerelease ? 'beta' : 'stable';
38
+ }
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
+ /**
77
+ * Body of the explicit `gsk mesh upgrade` command.
78
+ * `--force` ignores the installed version (always pulls the channel's latest).
79
+ */
80
+ export async function runUpgrade(opts) {
81
+ const target = currentTarget();
82
+ const channel = channelFor(opts);
83
+ const installed = getInstalledMeshVersion();
84
+ // With --force, omit current_version so the backend returns latest
85
+ // regardless of what we have cached.
86
+ const currentForQuery = opts.force ? null : installed;
87
+ let manifest;
88
+ try {
89
+ manifest = await fetchCheckUpdate(target, channel, currentForQuery, opts.baseUrlOverride);
90
+ }
91
+ catch (err) {
92
+ logError(`gsk mesh upgrade: ${err.message}`);
93
+ return 'error';
94
+ }
95
+ // Record the check timestamp regardless of outcome (shared throttle file).
96
+ saveUpdateMeta({
97
+ last_mesh_check: new Date().toISOString(),
98
+ latest_mesh_version: manifest?.version || undefined,
99
+ });
100
+ if (!manifest) {
101
+ info(`gsk-mesh is already at the latest ${channel} release${installed ? ` (v${installed})` : ''}.`);
102
+ return 'up-to-date';
103
+ }
104
+ // --force on the same version: re-pull anyway.
105
+ if (!opts.force && installed && installed === manifest.version) {
106
+ info(`gsk-mesh is already at v${manifest.version} (latest ${channel}).`);
107
+ return 'up-to-date';
108
+ }
109
+ // Defense in depth: the served URL must live under the trusted CDN base.
110
+ if (!manifest.url.startsWith(`${CDN_BASE}/`)) {
111
+ logError(`gsk mesh upgrade: refusing untrusted download URL ${manifest.url}`);
112
+ return 'error';
113
+ }
114
+ info(`gsk-mesh: ${installed ?? '(none)'} → v${manifest.version}`);
115
+ if (manifest.notes)
116
+ info(manifest.notes);
117
+ try {
118
+ await downloadAndInstall(manifest.url, manifest.sha256, manifest.version, target);
119
+ }
120
+ catch (err) {
121
+ logError(`gsk mesh upgrade: ${err.message}`);
122
+ return 'error';
123
+ }
124
+ info(`gsk-mesh upgraded to v${manifest.version}.`);
125
+ return 'updated';
126
+ }
127
+ /**
128
+ * Best-effort autorun currency check, invoked (non-awaited) from the `gsk mesh`
129
+ * passthrough path. Only fires when:
130
+ * - autorun isn't disabled (GSK_NO_AUTO_UPDATE / config auto_update:false),
131
+ * - a binary is already installed (never triggers a first download here),
132
+ * - the shared 4h throttle has elapsed.
133
+ * A newer release is downloaded in the background so it applies next run; the
134
+ * current invocation is never blocked or failed by this.
135
+ */
136
+ export async function maybeAutoUpgradeMesh(baseUrlOverride) {
137
+ try {
138
+ if (process.env.GSK_NO_AUTO_UPDATE === '1')
139
+ return;
140
+ // On Windows a running .exe is locked, so an in-the-background install that
141
+ // renames over the binary just spawned by this same invocation always
142
+ // fails (and wastes the download). Windows currency comes from an explicit
143
+ // `gsk mesh upgrade`, which runs standalone without the binary in use.
144
+ if (process.platform === 'win32')
145
+ return;
146
+ const cfg = loadConfigFile();
147
+ if (cfg.auto_update === false)
148
+ return;
149
+ if (!isMeshInstalled())
150
+ return;
151
+ const meta = loadUpdateMeta();
152
+ if (meta?.last_mesh_check) {
153
+ const elapsed = Date.now() - new Date(meta.last_mesh_check).getTime();
154
+ if (elapsed < CHECK_INTERVAL_MS) {
155
+ debug(`gsk-mesh: skipping autorun check (last ${Math.round(elapsed / 60000)}m ago)`);
156
+ return;
157
+ }
158
+ }
159
+ const target = currentTarget();
160
+ const installed = getInstalledMeshVersion();
161
+ const manifest = await fetchCheckUpdate(target, 'stable', installed, baseUrlOverride);
162
+ saveUpdateMeta({
163
+ last_mesh_check: new Date().toISOString(),
164
+ latest_mesh_version: manifest?.version || undefined,
165
+ });
166
+ if (!manifest || (installed && manifest.version === installed))
167
+ return;
168
+ if (!manifest.url.startsWith(`${CDN_BASE}/`))
169
+ return;
170
+ debug(`gsk-mesh: autorun upgrade ${installed ?? '(none)'} → v${manifest.version}`);
171
+ await downloadAndInstall(manifest.url, manifest.sha256, manifest.version, target);
172
+ info(`gsk-mesh updated to v${manifest.version} (applies next run).`);
173
+ }
174
+ catch (err) {
175
+ // Never surface autorun failures to the user.
176
+ debug(`gsk-mesh autorun check failed: ${err.message}`);
177
+ }
178
+ }
179
+ //# sourceMappingURL=upgrade.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/mesh/upgrade.ts"],"names":[],"mappings":"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"}
package/dist/updater.d.ts CHANGED
@@ -7,6 +7,27 @@
7
7
  * - "auto_update": false in config file
8
8
  * - Checks at most once every 4 hours (cached in ~/.genspark-tool-cli/update-meta.json)
9
9
  */
10
+ export declare const CHECK_INTERVAL_MS: number;
11
+ /**
12
+ * Shared update bookkeeping for both the npm self-update (last_check /
13
+ * latest_version) and the native gsk-mesh binary (last_mesh_check /
14
+ * latest_mesh_version, written by src/mesh/upgrade.ts). One file, independent
15
+ * throttles — so the mesh autorun check piggybacks on this 4h cadence instead
16
+ * of running its own separate timer.
17
+ */
18
+ export interface UpdateMeta {
19
+ last_check?: string;
20
+ latest_version?: string;
21
+ last_mesh_check?: string;
22
+ latest_mesh_version?: string;
23
+ }
24
+ export declare function loadUpdateMeta(): UpdateMeta | null;
25
+ /**
26
+ * Merge-preserving write: callers pass only the keys they own (npm side vs
27
+ * mesh side), and untouched keys on disk are preserved. A plain overwrite
28
+ * would let the npm check clobber the mesh fields and vice-versa.
29
+ */
30
+ export declare function saveUpdateMeta(patch: Partial<UpdateMeta>): void;
10
31
  /**
11
32
  * Check for updates and auto-install if a newer version is available.
12
33
  * Safe to call — failures never block CLI execution.
@@ -1 +1 @@
1
- {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA+FH;;;GAGG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAYH,eAAO,MAAM,iBAAiB,QAAqB,CAAC;AAEpD;;;;;;GAMG;AACH,MAAM,WAAW,UAAU;IACzB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAgBD,wBAAgB,cAAc,IAAI,UAAU,GAAG,IAAI,CAOlD;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,IAAI,CAkB/D;AA4CD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CA4Cf"}
package/dist/updater.js CHANGED
@@ -16,7 +16,7 @@ import { loadConfigFile } from "./config.js";
16
16
  const PACKAGE_NAME = "@genspark/cli";
17
17
  const CONFIG_DIR = path.join(os.homedir(), ".genspark-tool-cli");
18
18
  const UPDATE_META_FILE = path.join(CONFIG_DIR, "update-meta.json");
19
- const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
19
+ export const CHECK_INTERVAL_MS = 4 * 60 * 60 * 1000; // 4 hours
20
20
  /**
21
21
  * Compare two semver strings (a.b.c format).
22
22
  * Returns: positive if a > b, negative if a < b, 0 if equal.
@@ -31,7 +31,7 @@ function compareSemver(a, b) {
31
31
  }
32
32
  return 0;
33
33
  }
34
- function loadUpdateMeta() {
34
+ export function loadUpdateMeta() {
35
35
  try {
36
36
  if (!fs.existsSync(UPDATE_META_FILE))
37
37
  return null;
@@ -41,12 +41,26 @@ function loadUpdateMeta() {
41
41
  return null;
42
42
  }
43
43
  }
44
- function saveUpdateMeta(meta) {
44
+ /**
45
+ * Merge-preserving write: callers pass only the keys they own (npm side vs
46
+ * mesh side), and untouched keys on disk are preserved. A plain overwrite
47
+ * would let the npm check clobber the mesh fields and vice-versa.
48
+ */
49
+ export function saveUpdateMeta(patch) {
45
50
  try {
46
51
  if (!fs.existsSync(CONFIG_DIR)) {
47
52
  fs.mkdirSync(CONFIG_DIR, { recursive: true });
48
53
  }
49
- fs.writeFileSync(UPDATE_META_FILE, JSON.stringify(meta, null, 2), "utf-8");
54
+ const existing = loadUpdateMeta() ?? {};
55
+ const merged = { ...existing, ...patch };
56
+ // Atomic write: serialize to a per-process temp file, then rename over the
57
+ // target. Two concurrent gsk processes (e.g. an npm self-update check and a
58
+ // mesh autorun check) can still lose each other's field update, but the
59
+ // file itself is never left half-written / unparseable. (A lost throttle
60
+ // timestamp is benign — worst case is one extra check.)
61
+ const tmp = `${UPDATE_META_FILE}.tmp.${process.pid}`;
62
+ fs.writeFileSync(tmp, JSON.stringify(merged, null, 2), "utf-8");
63
+ fs.renameSync(tmp, UPDATE_META_FILE);
50
64
  }
51
65
  catch {
52
66
  // Silently ignore write errors
@@ -1 +1 @@
1
- {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@genspark/cli",
3
- "version": "1.0.20",
3
+ "version": "1.0.22",
4
4
  "description": "CLI tool for Genspark Tool API - search, crawl, analyze images, generate media",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -0,0 +1,40 @@
1
+ ---
2
+ name: gsk-inbox-contacts
3
+ version: 1.0.0
4
+ description: 'Unified contact lookup across all connected email accounts (Gmail +
5
+ Outlook). Searches synced address-book contacts AND people the user has emailed
6
+ before (email-history fallback). Actions: search.'
7
+ metadata:
8
+ category: general
9
+ requires:
10
+ bins:
11
+ - gsk
12
+ cliHelp: gsk find-contact --help
13
+ ---
14
+
15
+ # gsk-inbox-contacts
16
+
17
+ **PREREQUISITE:** Read `../gsk-shared/SKILL.md` for auth, global flags, and security rules.
18
+
19
+ Unified contact lookup across all connected email accounts (Gmail + Outlook). Searches synced address-book contacts AND people the user has emailed before (email-history fallback). Actions: search.
20
+
21
+ ## Usage
22
+
23
+ ```bash
24
+ gsk find-contact [options]
25
+ ```
26
+
27
+ **Aliases:** `find-contact`, `known-contacts`
28
+
29
+ ## Flags
30
+
31
+ | Flag | Required | Description |
32
+ |------|----------|-------------|
33
+ | `<action>` (positional) | Yes | Action to perform. 'search': Search known contacts across all connected accounts (synced + email history) (string, one of: search) |
34
+ | `--query` | No | [search] Search query — name, partial name, email, or company. Case-insensitive. (string) |
35
+ | `--limit` | No | [search] Maximum number of results to return (1-100). Default: 20. (integer) |
36
+ | `--account_ids` | No | [search] Optional. Restrict the search to specific accounts (e.g. ['gmail-alice@x.com', 'outlook-alice@x.com']). If omitted, searches all connected accounts. (array) |
37
+
38
+ ## See Also
39
+
40
+ - [gsk-shared](../gsk-shared/SKILL.md) — Authentication and global flags