@serendb/serendesktop 0.1.6 → 0.1.7

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/dist/server.js CHANGED
@@ -216,10 +216,34 @@ function isAuthError(message) {
216
216
  }
217
217
  function authErrorMessage(agentType) {
218
218
  if (agentType === "claude-code") {
219
- return "Claude Code is not logged in. Please open a terminal and run:\n\n claude login\n\nThen try starting the agent again.";
219
+ return "Claude Code login required. A terminal window has been opened \u2014 please complete the login there, then try starting the agent again.";
220
220
  }
221
221
  return "Agent authentication required. Please log in via the agent CLI first.";
222
222
  }
223
+ function launchClaudeLogin() {
224
+ const os2 = platform();
225
+ try {
226
+ if (os2 === "darwin") {
227
+ spawn("osascript", [
228
+ "-e",
229
+ 'tell application "Terminal" to do script "claude login"',
230
+ "-e",
231
+ 'tell application "Terminal" to activate'
232
+ ], { detached: true, stdio: "ignore" }).unref();
233
+ } else if (os2 === "win32") {
234
+ spawn("cmd", ["/c", "start", "cmd", "/c", "claude login"], {
235
+ detached: true,
236
+ stdio: "ignore"
237
+ }).unref();
238
+ } else {
239
+ spawn("x-terminal-emulator", ["-e", "claude", "login"], {
240
+ detached: true,
241
+ stdio: "ignore"
242
+ }).unref();
243
+ }
244
+ } catch {
245
+ }
246
+ }
223
247
  var sessions = /* @__PURE__ */ new Map();
224
248
  function createClient(sessionId) {
225
249
  return {
@@ -475,7 +499,9 @@ async function acpSpawn(params) {
475
499
  } catch (err) {
476
500
  session.status = "error";
477
501
  const rawMessage = err instanceof Error ? err.message : JSON.stringify(err);
478
- const errorMsg = isAuthError(rawMessage) ? authErrorMessage(agentType) : `Failed to initialize agent: ${rawMessage}`;
502
+ const authDetected = isAuthError(rawMessage);
503
+ if (authDetected) launchClaudeLogin();
504
+ const errorMsg = authDetected ? authErrorMessage(agentType) : `Failed to initialize agent: ${rawMessage}`;
479
505
  emit("acp://error", {
480
506
  sessionId,
481
507
  error: errorMsg
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@serendb/serendesktop",
3
- "version": "0.1.6",
3
+ "version": "0.1.7",
4
4
  "description": "Seren Local runtime — enables ACP agents, local MCP, and file access",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -1 +1 @@
1
- import{m as o,i as c,a,l as i,g as m}from"./index-CUq9sqde.js";import"./monaco-editor-CjinG6ix.js";async function f(){await i();const t=m();if(t.length===0)return[];const r=t.filter(c);return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function g(t){const r=o().servers.filter(e=>t.includes(e.name)&&e.enabled).filter(c);return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function d(){const r=o().servers.filter(e=>e.enabled).filter(c).filter(e=>{const n=a.getConnection(e.name);return!n||n.status!=="connected"});return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function S(){const r=Array.from(a.connections().values()).filter(s=>s.status==="connected");await Promise.allSettled(r.map(s=>a.disconnect(s.serverName)))}export{d as connectAllEnabledServers,S as disconnectAllServers,f as initMcpAutoConnect,g as retryFailedConnections};
1
+ import{m as o,i as c,a,l as i,g as m}from"./index-CfJAulsO.js";import"./monaco-editor-CjinG6ix.js";async function f(){await i();const t=m();if(t.length===0)return[];const r=t.filter(c);return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function g(t){const r=o().servers.filter(e=>t.includes(e.name)&&e.enabled).filter(c);return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function d(){const r=o().servers.filter(e=>e.enabled).filter(c).filter(e=>{const n=a.getConnection(e.name);return!n||n.status!=="connected"});return r.length===0?[]:(await Promise.allSettled(r.map(async e=>{try{return await a.connect(e.name,e.command,e.args,e.env),{serverName:e.name,success:!0}}catch(n){return{serverName:e.name,success:!1,error:n instanceof Error?n.message:String(n)}}}))).map((e,n)=>e.status==="fulfilled"?e.value:{serverName:r[n].name,success:!1,error:e.reason instanceof Error?e.reason.message:String(e.reason)})}async function S(){const r=Array.from(a.connections().values()).filter(s=>s.status==="connected");await Promise.allSettled(r.map(s=>a.disconnect(s.serverName)))}export{d as connectAllEnabledServers,S as disconnectAllServers,f as initMcpAutoConnect,g as retryFailedConnections};