gm-plugkit 2.0.1177 → 2.0.1179

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/bootstrap.js CHANGED
@@ -178,27 +178,18 @@ async function extractNpmPackageWasm(destPath, version) {
178
178
  log(`extracting npm package ${NPM_PACKAGE}@${version} to ${tempDir}`);
179
179
  obsEvent('bootstrap', 'npm.extract.start', { package: NPM_PACKAGE, version });
180
180
 
181
- let cmd, args;
182
- if (process.platform === 'win32') {
183
- const npxCli = resolveNpxJsCli();
184
- if (npxCli) {
185
- cmd = process.execPath;
186
- args = [npxCli, NPM_PACKAGE + '@' + version, '--prefix', tempDir];
187
- } else {
188
- cmd = 'npx.cmd';
189
- args = [NPM_PACKAGE + '@' + version, '--prefix', tempDir];
190
- }
191
- } else {
192
- cmd = 'npx';
193
- args = [NPM_PACKAGE + '@' + version, '--prefix', tempDir];
194
- }
181
+ fs.writeFileSync(path.join(tempDir, 'package.json'), JSON.stringify({ name: 'plugkit-extract', version: '0.0.0', private: true }));
182
+
183
+ const cmd = process.platform === 'win32' ? 'npm.cmd' : 'npm';
184
+ const args = ['install', '--no-audit', '--no-fund', '--no-save', NPM_PACKAGE + '@' + version];
195
185
 
196
186
  const result = spawnSync(cmd, args, {
187
+ cwd: tempDir,
197
188
  stdio: ['ignore', 'pipe', 'pipe'],
198
189
  timeout: ATTEMPT_TIMEOUT_MS,
199
190
  encoding: 'utf8',
200
191
  windowsHide: true,
201
- shell: process.platform === 'win32' && cmd === 'npx.cmd',
192
+ shell: process.platform === 'win32',
202
193
  });
203
194
 
204
195
  if (result.error) throw result.error;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "gm-plugkit",
3
- "version": "2.0.1177",
3
+ "version": "2.0.1179",
4
4
  "description": "Bootstrap and daemon-spawn tool for gm plugkit binary. Downloads the correct platform binary, verifies SHA256, and starts the spool watcher daemon. Includes plugkit-wasm-wrapper for WASM-based spool watching.",
5
5
  "main": "index.js",
6
6
  "bin": {
@@ -1008,6 +1008,15 @@ async function runSpoolWatcher(instance, spoolDir) {
1008
1008
  if (_ownWrapperSha12 && holderSha && holderSha !== _ownWrapperSha12) {
1009
1009
  try { logEvent('plugkit', 'peer.stale-wrapper-takeover', { holder_pid: pidStr, holder_sha: holderSha, own_sha: _ownWrapperSha12, lock_age_ms: age }); } catch (_) {}
1010
1010
  console.error(`[plugkit-wasm] peer wrapper-sha mismatch (holder=${holderSha} own=${_ownWrapperSha12}); killing pid=${pidStr} and taking over`);
1011
+ try {
1012
+ fs.writeFileSync(path.join(spoolDir, '.shutdown-reason.json'), JSON.stringify({
1013
+ reason: 'peer-stale-takeover',
1014
+ ts: Date.now(),
1015
+ taker_pid: process.pid,
1016
+ taker_sha: _ownWrapperSha12,
1017
+ holder_sha: holderSha,
1018
+ }));
1019
+ } catch (_) {}
1011
1020
  try { process.kill(parseInt(pidStr, 10), 'SIGTERM'); } catch (_) {}
1012
1021
  } else {
1013
1022
  const msg = JSON.stringify({ ok: false, reason: 'another-watcher-active', pid: pidStr, age_ms: age });
@@ -1073,6 +1082,15 @@ async function runSpoolWatcher(instance, spoolDir) {
1073
1082
  } catch (_) { continue; }
1074
1083
  logEvent('plugkit', 'peer.stale-wrapper-killed', { peer_cwd: peerCwd, peer_pid: peerPid, peer_sha: peerSha, own_sha: _ownWrapperSha12, lock_age_ms: age });
1075
1084
  console.error(`[plugkit-wasm] peer-sweep killing stale-wrapper watcher pid=${peerPid} cwd=${peerCwd} sha=${peerSha} (own=${_ownWrapperSha12})`);
1085
+ try {
1086
+ fs.writeFileSync(path.join(peerCwd, '.gm', 'exec-spool', '.shutdown-reason.json'), JSON.stringify({
1087
+ reason: 'peer-stale-takeover',
1088
+ ts: Date.now(),
1089
+ killer_pid: process.pid,
1090
+ killer_sha: _ownWrapperSha12,
1091
+ peer_sha: peerSha,
1092
+ }));
1093
+ } catch (_) {}
1076
1094
  try { process.kill(peerPid, 'SIGTERM'); } catch (_) {}
1077
1095
  }
1078
1096
  }