@kenkaiiii/gg-core 5.84.2 → 5.85.0
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/{chunk-EAIPT76S.js → chunk-2X5L6U4Z.js} +3 -2
- package/dist/chunk-2X5L6U4Z.js.map +1 -0
- package/dist/{chunk-QONQW3IA.js → chunk-WXIUTKXE.js} +70 -18
- package/dist/chunk-WXIUTKXE.js.map +1 -0
- package/dist/index.cjs +70 -17
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +2 -2
- package/dist/model-registry.cjs.map +1 -1
- package/dist/model-registry.js +2 -2
- package/dist/paths.cjs +2 -1
- package/dist/paths.cjs.map +1 -1
- package/dist/paths.d.cts +2 -0
- package/dist/paths.d.ts +2 -0
- package/dist/paths.js +1 -1
- package/package.json +2 -2
- package/dist/chunk-EAIPT76S.js.map +0 -1
- package/dist/chunk-QONQW3IA.js.map +0 -1
|
@@ -20,11 +20,12 @@ function getAppPaths() {
|
|
|
20
20
|
extensionsDir: path.join(agentDir, "extensions"),
|
|
21
21
|
agentsDir: path.join(agentDir, "agents"),
|
|
22
22
|
progressFile: path.join(agentDir, "progress.json"),
|
|
23
|
-
progressBackupFile: path.join(agentDir, "progress.backup.json")
|
|
23
|
+
progressBackupFile: path.join(agentDir, "progress.backup.json"),
|
|
24
|
+
trophiesFile: path.join(agentDir, "trophies.json")
|
|
24
25
|
};
|
|
25
26
|
}
|
|
26
27
|
|
|
27
28
|
export {
|
|
28
29
|
getAppPaths
|
|
29
30
|
};
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
31
|
+
//# sourceMappingURL=chunk-2X5L6U4Z.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/paths.ts"],"sourcesContent":["import path from \"node:path\";\nimport os from \"node:os\";\n\nexport interface AppPaths {\n agentDir: string;\n sessionsDir: string;\n subagentSessionsDir: string;\n subagentsDir: string;\n settingsFile: string;\n authFile: string;\n telegramFile: string;\n agentHomeFile: string;\n mcpFile: string;\n mcpAuthFile: string;\n /** Cached MCP tool catalog, so a cold start can answer tool_search honestly. */\n mcpCatalogFile: string;\n logFile: string;\n skillsDir: string;\n extensionsDir: string;\n agentsDir: string;\n progressFile: string;\n progressBackupFile: string;\n /** Earned trophies and the counters that unlock them. */\n trophiesFile: string;\n}\n\nexport function getAppPaths(): AppPaths {\n const agentDir = path.join(os.homedir(), \".gg\");\n return {\n agentDir,\n sessionsDir: path.join(agentDir, \"sessions\"),\n subagentSessionsDir: path.join(agentDir, \"subagent-sessions\"),\n subagentsDir: path.join(agentDir, \"subagents\"),\n settingsFile: path.join(agentDir, \"settings.json\"),\n authFile: path.join(agentDir, \"auth.json\"),\n telegramFile: path.join(agentDir, \"telegram.json\"),\n agentHomeFile: path.join(agentDir, \"agent-home.json\"),\n mcpFile: path.join(agentDir, \"mcp.json\"),\n mcpAuthFile: path.join(agentDir, \"mcp-auth.json\"),\n mcpCatalogFile: path.join(agentDir, \"mcp-catalog.json\"),\n logFile: path.join(agentDir, \"debug.log\"),\n skillsDir: path.join(agentDir, \"skills\"),\n extensionsDir: path.join(agentDir, \"extensions\"),\n agentsDir: path.join(agentDir, \"agents\"),\n progressFile: path.join(agentDir, \"progress.json\"),\n progressBackupFile: path.join(agentDir, \"progress.backup.json\"),\n trophiesFile: path.join(agentDir, \"trophies.json\"),\n };\n}\n"],"mappings":";AAAA,OAAO,UAAU;AACjB,OAAO,QAAQ;AAyBR,SAAS,cAAwB;AACtC,QAAM,WAAW,KAAK,KAAK,GAAG,QAAQ,GAAG,KAAK;AAC9C,SAAO;AAAA,IACL;AAAA,IACA,aAAa,KAAK,KAAK,UAAU,UAAU;AAAA,IAC3C,qBAAqB,KAAK,KAAK,UAAU,mBAAmB;AAAA,IAC5D,cAAc,KAAK,KAAK,UAAU,WAAW;AAAA,IAC7C,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,IACjD,UAAU,KAAK,KAAK,UAAU,WAAW;AAAA,IACzC,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,IACjD,eAAe,KAAK,KAAK,UAAU,iBAAiB;AAAA,IACpD,SAAS,KAAK,KAAK,UAAU,UAAU;AAAA,IACvC,aAAa,KAAK,KAAK,UAAU,eAAe;AAAA,IAChD,gBAAgB,KAAK,KAAK,UAAU,kBAAkB;AAAA,IACtD,SAAS,KAAK,KAAK,UAAU,WAAW;AAAA,IACxC,WAAW,KAAK,KAAK,UAAU,QAAQ;AAAA,IACvC,eAAe,KAAK,KAAK,UAAU,YAAY;AAAA,IAC/C,WAAW,KAAK,KAAK,UAAU,QAAQ;AAAA,IACvC,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,IACjD,oBAAoB,KAAK,KAAK,UAAU,sBAAsB;AAAA,IAC9D,cAAc,KAAK,KAAK,UAAU,eAAe;AAAA,EACnD;AACF;","names":[]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
getAppPaths
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-2X5L6U4Z.js";
|
|
4
4
|
|
|
5
5
|
// src/oauth/kimi.ts
|
|
6
6
|
import { execFileSync } from "child_process";
|
|
@@ -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
|
|
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
|
-
|
|
331
|
+
fileBytes = 0;
|
|
303
332
|
return false;
|
|
304
333
|
}
|
|
305
334
|
try {
|
|
306
|
-
|
|
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
|
-
|
|
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 (
|
|
319
|
-
|
|
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 (
|
|
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 (
|
|
352
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
1887
|
-
|
|
1888
|
-
|
|
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-
|
|
2916
|
+
//# sourceMappingURL=chunk-WXIUTKXE.js.map
|