@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.
- package/README.md +41 -0
- package/dist/commands/mesh.d.ts +40 -0
- package/dist/commands/mesh.d.ts.map +1 -0
- package/dist/commands/mesh.js +164 -0
- package/dist/commands/mesh.js.map +1 -0
- package/dist/commands/sb-git-clone.d.ts +2 -0
- package/dist/commands/sb-git-clone.d.ts.map +1 -1
- package/dist/commands/sb-git-clone.js +5 -1
- package/dist/commands/sb-git-clone.js.map +1 -1
- package/dist/index.js +39 -55
- package/dist/index.js.map +1 -1
- package/dist/mesh/download.d.ts +35 -0
- package/dist/mesh/download.d.ts.map +1 -0
- package/dist/mesh/download.js +218 -0
- package/dist/mesh/download.js.map +1 -0
- package/dist/mesh/manifest.d.ts +45 -0
- package/dist/mesh/manifest.d.ts.map +1 -0
- package/dist/mesh/manifest.js +76 -0
- package/dist/mesh/manifest.js.map +1 -0
- package/dist/mesh/upgrade.d.ts +41 -0
- package/dist/mesh/upgrade.d.ts.map +1 -0
- package/dist/mesh/upgrade.js +179 -0
- package/dist/mesh/upgrade.js.map +1 -0
- package/dist/updater.d.ts +21 -0
- package/dist/updater.d.ts.map +1 -1
- package/dist/updater.js +18 -4
- package/dist/updater.js.map +1 -1
- package/package.json +1 -1
- package/skills/gsk-inbox-contacts/SKILL.md +40 -0
|
@@ -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
|
+
* ¤t_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
|
+
* ¤t_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.
|
package/dist/updater.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
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
|
-
|
|
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
|
-
|
|
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
|
package/dist/updater.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,MAAM,YAAY,GAAG,eAAe,CAAC;AACrC,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,oBAAoB,CAAC,CAAC;AACjE,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,kBAAkB,CAAC,CAAC;AACnE,MAAM,iBAAiB,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,UAAU;
|
|
1
|
+
{"version":3,"file":"updater.js","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|