@schuttdev/kon 0.3.2 → 0.3.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.
Files changed (2) hide show
  1. package/dist/index.js +57 -22
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -341,7 +341,7 @@ function createHttpClient(serverUrl, sessionToken) {
341
341
  }
342
342
 
343
343
  // ../cli/src/version.ts
344
- var VERSION = "0.3.2";
344
+ var VERSION = "0.3.4";
345
345
 
346
346
  // ../cli/src/connect.ts
347
347
  async function connect(serverName) {
@@ -363,21 +363,24 @@ async function connect(serverName) {
363
363
  const { name, entry } = active;
364
364
  if (entry.sessionToken && entry.sessionExpiresAt) {
365
365
  if (Date.now() < entry.sessionExpiresAt - 5 * 60 * 1e3) {
366
- await checkAndUpdateServer(entry.server, entry.sessionToken);
367
- return { serverUrl: entry.server, sessionToken: entry.sessionToken };
366
+ const token = await checkAndUpdateServer(entry.server, entry.sessionToken, name, entry.token);
367
+ return { serverUrl: entry.server, sessionToken: token };
368
368
  }
369
369
  }
370
+ return refreshSession(name, entry.server, entry.token);
371
+ }
372
+ async function refreshSession(serverName, serverUrl, encryptedToken) {
370
373
  const orgUuid = getOrgUUID();
371
- const http = createHttpClient(entry.server);
374
+ const http = createHttpClient(serverUrl);
372
375
  const res = await http.post("/auth/connect", {
373
- encryptedToken: entry.token,
376
+ encryptedToken,
374
377
  orgUuid
375
378
  });
376
- await updateServerSession(name, res.sessionToken, res.expiresAt);
377
- await checkAndUpdateServer(entry.server, res.sessionToken);
378
- return { serverUrl: entry.server, sessionToken: res.sessionToken };
379
+ await updateServerSession(serverName, res.sessionToken, res.expiresAt);
380
+ const token = await checkAndUpdateServer(serverUrl, res.sessionToken, serverName, encryptedToken);
381
+ return { serverUrl, sessionToken: token };
379
382
  }
380
- async function checkAndUpdateServer(serverUrl, sessionToken) {
383
+ async function checkAndUpdateServer(serverUrl, sessionToken, serverName, encryptedToken) {
381
384
  try {
382
385
  const http = createHttpClient(serverUrl);
383
386
  const health = await http.get("/health");
@@ -400,12 +403,23 @@ async function checkAndUpdateServer(serverUrl, sessionToken) {
400
403
  console.log("Server updated and restarting.");
401
404
  await waitForServer(serverUrl, 15e3);
402
405
  console.log("Server is back online.");
406
+ if (serverName && encryptedToken) {
407
+ const orgUuid = getOrgUUID();
408
+ const unauthHttp = createHttpClient(serverUrl);
409
+ const connectRes = await unauthHttp.post("/auth/connect", {
410
+ encryptedToken,
411
+ orgUuid
412
+ });
413
+ await updateServerSession(serverName, connectRes.sessionToken, connectRes.expiresAt);
414
+ return connectRes.sessionToken;
415
+ }
403
416
  } else {
404
417
  console.log(`Server update failed: ${res.error ?? "unknown error"}`);
405
418
  }
406
419
  }
407
420
  } catch {
408
421
  }
422
+ return sessionToken;
409
423
  }
410
424
  async function waitForServer(serverUrl, timeoutMs) {
411
425
  const start = Date.now();
@@ -1015,22 +1029,43 @@ if (firstArg && !firstArg.startsWith("-") && !KNOWN_COMMANDS.has(firstArg)) {
1015
1029
  const toolName = firstArg;
1016
1030
  const toolArgs = process.argv.slice(3);
1017
1031
  try {
1018
- const { serverUrl, sessionToken } = await connect();
1019
- const http = createHttpClient(serverUrl, sessionToken);
1020
- const { tool: detail } = await fetchToolDetail(http, toolName);
1021
- if (detail.type === "mcp") {
1022
- const mcpToolName = toolArgs[0];
1023
- if (!mcpToolName) {
1024
- const toolNames = (detail.mcpTools ?? []).map((t) => ` ${t.name} \u2014 ${t.description}`);
1025
- console.log(`MCP tools for ${toolName}:
1032
+ let { serverUrl, sessionToken } = await connect();
1033
+ let http = createHttpClient(serverUrl, sessionToken);
1034
+ const runTool = async () => {
1035
+ const { tool: detail } = await fetchToolDetail(http, toolName);
1036
+ if (detail.type === "mcp") {
1037
+ const mcpToolName = toolArgs[0];
1038
+ if (!mcpToolName) {
1039
+ const toolNames = (detail.mcpTools ?? []).map((t) => ` ${t.name} \u2014 ${t.description}`);
1040
+ console.log(`MCP tools for ${toolName}:
1026
1041
  ${toolNames.join("\n")}`);
1042
+ } else {
1043
+ const jsonArg = toolArgs.slice(1).join(" ");
1044
+ const args = jsonArg ? JSON.parse(jsonArg) : {};
1045
+ await execMcpTool(http, toolName, mcpToolName, args);
1046
+ }
1047
+ } else {
1048
+ await execTool(http, toolName, toolArgs);
1049
+ }
1050
+ };
1051
+ try {
1052
+ await runTool();
1053
+ } catch (e) {
1054
+ const msg = e.message;
1055
+ if (msg.includes("Invalid session") || msg.includes("Session expired") || msg.includes("Authorization")) {
1056
+ const config = await readConfig();
1057
+ const active = getActiveEntry(config);
1058
+ if (active) {
1059
+ const refreshed = await refreshSession(active.name, active.entry.server, active.entry.token);
1060
+ sessionToken = refreshed.sessionToken;
1061
+ http = createHttpClient(serverUrl, sessionToken);
1062
+ await runTool();
1063
+ } else {
1064
+ throw e;
1065
+ }
1027
1066
  } else {
1028
- const jsonArg = toolArgs.slice(1).join(" ");
1029
- const args = jsonArg ? JSON.parse(jsonArg) : {};
1030
- await execMcpTool(http, toolName, mcpToolName, args);
1067
+ throw e;
1031
1068
  }
1032
- } else {
1033
- await execTool(http, toolName, toolArgs);
1034
1069
  }
1035
1070
  } catch (e) {
1036
1071
  console.error(`Error: ${e.message}`);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@schuttdev/kon",
3
- "version": "0.3.2",
3
+ "version": "0.3.4",
4
4
  "type": "module",
5
5
  "license": "MIT",
6
6
  "description": "Lightweight gigai client for Claude code execution",