ispyx 1.0.2 → 1.0.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ispyx",
3
- "version": "1.0.2",
3
+ "version": "1.0.4",
4
4
  "description": "Local desktop-control MCP server: lets an AI use your keyboard, mouse and screen (windows, screenshots, clicks, typing, clipboard). stdio only, Windows and macOS.",
5
5
  "type": "module",
6
6
  "main": "src/server.js",
@@ -120,7 +120,10 @@ export async function runQuit() {
120
120
  // macOS: the app would start its resident again; quitting the app ends it and the forwarders
121
121
  useMacAppResident();
122
122
  if (process.platform === 'darwin' && (macApp() || process.env.ISPYX_PIPE === macAppPipe())) {
123
- spawnSync('osascript', ['-e', `quit app id "${MAC_BUNDLE_ID}"`], { stdio: 'ignore', timeout: 10000 });
123
+ // inside the app: its own id (a dev build is com.ispyx.app.dev)
124
+ let id = MAC_BUNDLE_ID;
125
+ try { id = /<key>CFBundleIdentifier<\/key>\s*<string>([^<]+)</.exec(fs.readFileSync(path.join(macApp(), 'Contents', 'Info.plist'), 'utf8'))?.[1] ?? id; } catch { /* npm copy: the installed app */ }
126
+ spawnSync('osascript', ['-e', `quit app id "${id}"`], { stdio: 'ignore', timeout: 10000 });
124
127
  process.exit(0);
125
128
  }
126
129
  try { await callOwner(pipeName(), '__quit', {}); } catch { /* not running, or gone before answering */ }
@@ -429,9 +429,12 @@ $("showAll").addEventListener("click",function(){expanded=!expanded;if(last&&las
429
429
  $("clearAct").addEventListener("click",function(){act("clearRecent").then(poll)});
430
430
  // the update quits and restarts ispyx: this window then reports it has quit (macOS opens it again)
431
431
  var updating=false;
432
+ function updateFailed(msg){updating=false;$("updBtn").disabled=false;setText("updTxt",msg)}
432
433
  $("updBtn").addEventListener("click",function(){
433
434
  updating=true;$("updBtn").disabled=true;setText("updTxt","Updating, ispyx restarts in a moment…");
434
- act("update").catch(function(err){updating=false;$("updBtn").disabled=false;setText("updTxt",err.message)});
435
+ act("update").catch(function(err){updateFailed(err.message)});
436
+ // a successful update quits this ispyx; still here after two minutes means it did not go through
437
+ setTimeout(function(){if(updating)updateFailed("The update did not finish. Details: update.log in the ispyx data folder.")},120000);
435
438
  });
436
439
  $("end").addEventListener("click",function(){
437
440
  if(last&&last.platform==="darwin"){act("close");return}