@kenkaiiii/gg-core 5.84.1 → 5.84.3

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.
@@ -267,16 +267,19 @@ import { environmentSecrets, redactText, redactValue } from "@kenkaiiii/gg-ai";
267
267
  var MAX_BYTES = 10 * 1024 * 1024;
268
268
  var MIN_HEADROOM_BYTES = 64 * 1024;
269
269
  var fd = null;
270
- var bytesWritten = 0;
270
+ var logPath = null;
271
+ var fileBytes = 0;
272
+ var processBytes = 0;
273
+ var rotationFailed = false;
271
274
  var capped = false;
272
275
  var sessionId = "";
273
276
  var appName = "app";
274
277
  var cleanups = [];
275
278
  var exactSecrets = [];
276
- function rotateIfNeeded(filePath) {
279
+ function rotateIfNeeded(filePath, force = false) {
277
280
  try {
278
281
  const st = fs.statSync(filePath);
279
- if (st.size <= MAX_BYTES - MIN_HEADROOM_BYTES) return;
282
+ if (!force && st.size <= MAX_BYTES - MIN_HEADROOM_BYTES) return;
280
283
  const rotated = `${filePath}.1`;
281
284
  try {
282
285
  fs.unlinkSync(rotated);
@@ -286,6 +289,32 @@ function rotateIfNeeded(filePath) {
286
289
  } catch {
287
290
  }
288
291
  }
292
+ function rotateOpenLog() {
293
+ if (fd === null || logPath === null) return false;
294
+ const sizeBefore = fileBytes;
295
+ try {
296
+ fs.closeSync(fd);
297
+ } catch {
298
+ }
299
+ fd = null;
300
+ rotateIfNeeded(logPath, true);
301
+ try {
302
+ fd = fs.openSync(logPath, "a");
303
+ fileBytes = fs.fstatSync(fd).size;
304
+ } catch {
305
+ if (fd !== null) {
306
+ try {
307
+ fs.closeSync(fd);
308
+ } catch {
309
+ }
310
+ }
311
+ fd = null;
312
+ capped = true;
313
+ return false;
314
+ }
315
+ if (fileBytes >= sizeBefore) rotationFailed = true;
316
+ return true;
317
+ }
289
318
  function openLog(filePath, name) {
290
319
  if (fd !== null || capped) return false;
291
320
  appName = name;
@@ -299,24 +328,29 @@ function openLog(filePath, name) {
299
328
  fd = fs.openSync(filePath, "a");
300
329
  } catch {
301
330
  fd = null;
302
- bytesWritten = 0;
331
+ fileBytes = 0;
303
332
  return false;
304
333
  }
305
334
  try {
306
- bytesWritten = fs.fstatSync(fd).size;
335
+ fileBytes = fs.fstatSync(fd).size;
307
336
  } catch {
308
337
  try {
309
338
  fs.closeSync(fd);
310
339
  } catch {
311
340
  }
312
341
  fd = null;
313
- bytesWritten = 0;
342
+ fileBytes = 0;
314
343
  return false;
315
344
  }
345
+ logPath = filePath;
346
+ processBytes = 0;
347
+ rotationFailed = false;
316
348
  sessionId = randomBytes(4).toString("hex");
317
349
  try {
318
- if (bytesWritten < MAX_BYTES) {
319
- bytesWritten += fs.writeSync(fd, "\n");
350
+ if (fileBytes < MAX_BYTES) {
351
+ const written = fs.writeSync(fd, "\n");
352
+ fileBytes += written;
353
+ processBytes += written;
320
354
  }
321
355
  } catch {
322
356
  }
@@ -344,12 +378,12 @@ function log(level, category, message, data) {
344
378
  }
345
379
  line += "\n";
346
380
  const lineBytes = Buffer.byteLength(line);
347
- if (bytesWritten + lineBytes > MAX_BYTES) {
381
+ if (processBytes + lineBytes > MAX_BYTES) {
348
382
  const capLine = `[${ts}] [sid=${sessionId}] [WARN] [logger] Log cap reached; file logging disabled until restart
349
383
  `;
350
384
  try {
351
- if (bytesWritten + Buffer.byteLength(capLine) <= MAX_BYTES) {
352
- bytesWritten += fs.writeSync(fd, capLine);
385
+ if (fileBytes + Buffer.byteLength(capLine) <= MAX_BYTES) {
386
+ fileBytes += fs.writeSync(fd, capLine);
353
387
  }
354
388
  fs.closeSync(fd);
355
389
  } catch {
@@ -358,8 +392,12 @@ function log(level, category, message, data) {
358
392
  capped = true;
359
393
  return;
360
394
  }
395
+ if (fileBytes + lineBytes > MAX_BYTES && !rotationFailed && !rotateOpenLog()) return;
396
+ if (fd === null) return;
361
397
  try {
362
- bytesWritten += fs.writeSync(fd, line);
398
+ const written = fs.writeSync(fd, line);
399
+ fileBytes += written;
400
+ processBytes += written;
363
401
  } catch {
364
402
  }
365
403
  }
@@ -375,7 +413,10 @@ function closeLogger(opts) {
375
413
  }
376
414
  }
377
415
  fd = null;
378
- bytesWritten = 0;
416
+ logPath = null;
417
+ fileBytes = 0;
418
+ processBytes = 0;
419
+ rotationFailed = false;
379
420
  capped = false;
380
421
  exactSecrets = [];
381
422
  for (const unsub of cleanups) unsub();
@@ -1883,9 +1924,20 @@ var AuthStorage = class {
1883
1924
  const msg = err instanceof Error ? err.message : String(err);
1884
1925
  const isAuthFailure = /\((401|400)\)/.test(msg) || /invalid_grant|invalid_token|invalid.*refresh/i.test(msg) || /unauthorized/i.test(msg);
1885
1926
  if (isAuthFailure) {
1886
- delete latest[provider];
1887
- this.data = latest;
1888
- await atomicWriteFile(this.filePath, JSON.stringify(latest, null, 2));
1927
+ const current = await readAuthData(this.filePath);
1928
+ const currentCreds = current[provider];
1929
+ if (currentCreds && currentCreds.refreshToken !== latestCreds.refreshToken) {
1930
+ log(
1931
+ "WARN",
1932
+ "auth",
1933
+ `${provider} token refresh was rejected, but another gg process already saved a newer credential \u2014 adopting it instead of signing out`
1934
+ );
1935
+ this.data = current;
1936
+ return currentCreds;
1937
+ }
1938
+ delete current[provider];
1939
+ this.data = current;
1940
+ await atomicWriteFile(this.filePath, JSON.stringify(current, null, 2));
1889
1941
  throw new NotLoggedInError(provider);
1890
1942
  }
1891
1943
  throw err;
@@ -2861,4 +2913,4 @@ export {
2861
2913
  getDefaultThinkingLevel,
2862
2914
  getSummaryModel
2863
2915
  };
2864
- //# sourceMappingURL=chunk-QONQW3IA.js.map
2916
+ //# sourceMappingURL=chunk-5EE2X4CY.js.map