@kenkaiiii/ggcoder 5.59.4 → 5.60.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.
@@ -0,0 +1,450 @@
1
+ /**
2
+ * Internal-only session diagnostics — NOT a public feature.
3
+ *
4
+ * Enabled only when the internal flag is set (env `GG_INTERNAL=1` or
5
+ * `~/.gg/internal.json` containing `{"diagnostics": true}`). When disabled,
6
+ * nothing is recorded, no tool is registered, and `/diagnose` does not exist,
7
+ * so the public tool list and prompt stay byte-identical.
8
+ *
9
+ * What it captures per session (counters and timings only — never prompt
10
+ * text, file contents, or credentials):
11
+ * - per-turn usage + timing (reuses TurnMetricPayload, already persisted)
12
+ * - per-tool call/error/duration stats and clustered error digests
13
+ * - identical-call repeats (same tool + same args ≥ 3×)
14
+ * - truncation/continuation events, model switches, compactions
15
+ *
16
+ * Consumers: the `session_stats` tool (live, agent-facing) and the
17
+ * `/diagnose` slash command (cross-session aggregate, agent-facing).
18
+ */
19
+ import fs from "node:fs";
20
+ import path from "node:path";
21
+ import { createHash, randomUUID } from "node:crypto";
22
+ import { getAppPaths } from "../config.js";
23
+ let enabledCache;
24
+ /** Internal mode gate. Env wins; otherwise `~/.gg/internal.json` must set
25
+ * `diagnostics: true`. Result is cached for the process lifetime. */
26
+ export function isInternalDiagnosticsEnabled() {
27
+ if (enabledCache !== undefined)
28
+ return enabledCache;
29
+ const env = process.env.GG_INTERNAL;
30
+ if (env && ["1", "true", "yes"].includes(env.toLowerCase())) {
31
+ enabledCache = true;
32
+ return true;
33
+ }
34
+ try {
35
+ const file = path.join(getAppPaths().agentDir, "internal.json");
36
+ const parsed = JSON.parse(fs.readFileSync(file, "utf8"));
37
+ enabledCache = parsed?.diagnostics === true;
38
+ }
39
+ catch {
40
+ enabledCache = false;
41
+ }
42
+ return enabledCache;
43
+ }
44
+ /** Test seam: reset the cached flag after mutating env/file state. */
45
+ export function resetInternalDiagnosticsCacheForTests() {
46
+ enabledCache = undefined;
47
+ }
48
+ export function diagnosticsSessionsDir() {
49
+ return (process.env.GG_DIAGNOSTICS_DIR ?? path.join(getAppPaths().agentDir, "diagnostics", "sessions"));
50
+ }
51
+ // ── Recorder ───────────────────────────────────────────────
52
+ const REPEAT_THRESHOLD = 3;
53
+ const MAX_ERROR_CLUSTERS = 8;
54
+ const MAX_REPEATED_KEYS = 16;
55
+ const MAX_TURNS_KEPT = 500;
56
+ function argsDigest(args) {
57
+ if (!args)
58
+ return "";
59
+ const json = JSON.stringify(args);
60
+ return json.length > 80 ? `${createHash("sha1").update(json).digest("hex").slice(0, 12)}…` : json;
61
+ }
62
+ /** True when a tool "succeeded" but its result text says it failed: bash
63
+ * prefixes non-zero exits with "Exit code: N", and most tools prefix
64
+ * rejections/refusals with "Error:". Empty-grep "no matches" is a legitimate
65
+ * answer, not a failure, so it stays clean. */
66
+ function isSoftFailure(result) {
67
+ return /^Exit code: [1-9]/m.test(result) || /^Error:/m.test(result);
68
+ }
69
+ /** Collapse an error result into a stable digest: first line, digits and
70
+ * quoted paths normalized, so 50 identical failures cluster into one row. */
71
+ function errorDigest(result) {
72
+ const firstLine = result.split("\n").find((l) => l.trim().length > 0) ?? "";
73
+ return firstLine
74
+ .replace(/\d+/g, "N")
75
+ .replace(/"[^"]+"/g, '"…"')
76
+ .replace(/'[^']+'/g, "'…'")
77
+ .slice(0, 120);
78
+ }
79
+ export class SessionDiagnosticsRecorder {
80
+ record;
81
+ pendingCalls = new Map();
82
+ repeatCounts = new Map();
83
+ clusterCounts = new Map();
84
+ unsubscribers = [];
85
+ fallbackSessionId;
86
+ getSessionId;
87
+ constructor(opts) {
88
+ this.getSessionId = () => typeof opts.sessionId === "function" ? opts.sessionId() : opts.sessionId;
89
+ this.record = {
90
+ version: 1,
91
+ sessionId: this.getSessionId(),
92
+ cwd: opts.cwd,
93
+ provider: opts.provider,
94
+ model: opts.model,
95
+ startedAt: Date.now(),
96
+ modelSwitches: [],
97
+ turns: [],
98
+ toolStats: {},
99
+ errorClusters: [],
100
+ repeats: [],
101
+ truncations: [],
102
+ compactions: [],
103
+ totals: {
104
+ turns: 0,
105
+ toolCalls: 0,
106
+ toolErrors: 0,
107
+ inputTokens: 0,
108
+ outputTokens: 0,
109
+ cacheRead: 0,
110
+ cacheWrite: 0,
111
+ },
112
+ };
113
+ this.dir = opts.dir;
114
+ }
115
+ dir;
116
+ /** Subscribe to the session bus. Safe to call once per session. */
117
+ attach(bus) {
118
+ this.unsubscribers.push(bus.on("tool_call_start", ({ toolCallId, name, args }) => {
119
+ this.pendingCalls.set(toolCallId, { name, argsKey: argsDigest(args) });
120
+ }));
121
+ this.unsubscribers.push(bus.on("tool_call_end", ({ toolCallId, result, isError, durationMs, invalidArgAttempt }) => {
122
+ const pending = this.pendingCalls.get(toolCallId);
123
+ this.pendingCalls.delete(toolCallId);
124
+ const name = pending?.name ?? "unknown";
125
+ const stat = (this.record.toolStats[name] ??= {
126
+ calls: 0,
127
+ errors: 0,
128
+ softErrors: 0,
129
+ totalMs: 0,
130
+ maxMs: 0,
131
+ invalidArgAttempts: 0,
132
+ truncatedResults: 0,
133
+ });
134
+ stat.calls += 1;
135
+ stat.totalMs += durationMs;
136
+ stat.maxMs = Math.max(stat.maxMs, durationMs);
137
+ if (invalidArgAttempt)
138
+ stat.invalidArgAttempts += 1;
139
+ if (/Full output saved to|\[truncated/i.test(result))
140
+ stat.truncatedResults += 1;
141
+ this.record.totals.toolCalls += 1;
142
+ const failed = isError || isSoftFailure(result);
143
+ if (isError)
144
+ stat.errors += 1;
145
+ else if (failed)
146
+ stat.softErrors += 1;
147
+ if (failed) {
148
+ this.record.totals.toolErrors += 1;
149
+ const digest = errorDigest(result);
150
+ const cluster = this.clusterCounts.get(digest) ?? {
151
+ count: 0,
152
+ sample: result.slice(0, 200),
153
+ };
154
+ cluster.count += 1;
155
+ this.clusterCounts.set(digest, cluster);
156
+ }
157
+ if (pending) {
158
+ const key = `${name}::${pending.argsKey}`;
159
+ const entry = this.repeatCounts.get(key) ?? {
160
+ tool: name,
161
+ argsDigest: pending.argsKey,
162
+ count: 0,
163
+ };
164
+ entry.count += 1;
165
+ this.repeatCounts.set(key, entry);
166
+ }
167
+ }));
168
+ this.unsubscribers.push(bus.on("model_change", ({ provider, model }) => {
169
+ if (model !== this.record.model || provider !== this.record.provider) {
170
+ this.record.modelSwitches.push({ at: Date.now(), provider, model });
171
+ this.record.provider = provider;
172
+ this.record.model = model;
173
+ }
174
+ }));
175
+ this.unsubscribers.push(bus.on("truncated", ({ reason, continued }) => {
176
+ this.record.truncations.push({ reason, continued });
177
+ }));
178
+ this.unsubscribers.push(bus.on("compaction_end", ({ compacted, originalCount, newCount }) => {
179
+ if (compacted)
180
+ this.record.compactions.push({ originalCount, newCount });
181
+ }));
182
+ }
183
+ /** Called from AgentSession.persistTurnMetric — the authoritative per-turn
184
+ * usage/timing source. Also the incremental flush point. */
185
+ recordTurnMetric(metric) {
186
+ this.record.totals.turns += 1;
187
+ this.record.totals.inputTokens += metric.usage.inputTokens;
188
+ this.record.totals.outputTokens += metric.usage.outputTokens;
189
+ this.record.totals.cacheRead += metric.usage.cacheRead ?? 0;
190
+ this.record.totals.cacheWrite += metric.usage.cacheWrite ?? 0;
191
+ this.record.turns.push({
192
+ turn: metric.turn,
193
+ stopReason: metric.stopReason,
194
+ inputTokens: metric.usage.inputTokens,
195
+ outputTokens: metric.usage.outputTokens,
196
+ cacheRead: metric.usage.cacheRead,
197
+ cacheWrite: metric.usage.cacheWrite,
198
+ ttftMs: metric.timing.ttftMs,
199
+ providerDurationMs: metric.timing.providerDurationMs,
200
+ });
201
+ if (this.record.turns.length > MAX_TURNS_KEPT)
202
+ this.record.turns.splice(0, this.record.turns.length - MAX_TURNS_KEPT);
203
+ void this.flush();
204
+ }
205
+ materializeDerived() {
206
+ this.record.errorClusters = [...this.clusterCounts.entries()]
207
+ .map(([digest, { count, sample }]) => ({ digest, count, sample }))
208
+ .sort((a, b) => b.count - a.count)
209
+ .slice(0, MAX_ERROR_CLUSTERS);
210
+ this.record.repeats = [...this.repeatCounts.values()]
211
+ .filter((e) => e.count >= REPEAT_THRESHOLD)
212
+ .sort((a, b) => b.count - a.count)
213
+ .slice(0, MAX_REPEATED_KEYS);
214
+ }
215
+ filePath() {
216
+ return path.join(this.dir ?? diagnosticsSessionsDir(), `${this.record.sessionId}.json`);
217
+ }
218
+ /** Best-effort incremental write — a diagnostics write failure must never
219
+ * affect the session. Synchronous ON PURPOSE: the record is a few KB written
220
+ * once per turn (negligible next to the network call it follows), and a sync
221
+ * write cannot be lost when a headless host exits immediately after the
222
+ * final turn_end — an async fire-and-forget flush racing process exit was
223
+ * silently dropping the whole session's record. */
224
+ flush() {
225
+ try {
226
+ this.materializeDerived();
227
+ this.record.sessionId = this.getSessionId();
228
+ // Transient hosts (json sub-agent mode) never assign a session id —
229
+ // fall back to a stable generated one so the record still lands under a
230
+ // real filename instead of `.json`.
231
+ if (!this.record.sessionId) {
232
+ this.fallbackSessionId ??= randomUUID();
233
+ this.record.sessionId = this.fallbackSessionId;
234
+ }
235
+ const file = this.filePath();
236
+ fs.mkdirSync(path.dirname(file), { recursive: true });
237
+ fs.writeFileSync(file, JSON.stringify(this.record), "utf8");
238
+ }
239
+ catch {
240
+ // Swallow: internal diagnostics are strictly best-effort.
241
+ }
242
+ return Promise.resolve();
243
+ }
244
+ async finalize() {
245
+ this.record.endedAt = Date.now();
246
+ for (const off of this.unsubscribers)
247
+ off();
248
+ this.unsubscribers = [];
249
+ await this.flush();
250
+ }
251
+ getRecord() {
252
+ return this.record;
253
+ }
254
+ // Test accessors — fresh derived state, independent of flush timing.
255
+ snapshotForTests() {
256
+ this.materializeDerived();
257
+ return JSON.parse(JSON.stringify(this.record));
258
+ }
259
+ repeatsForTests() {
260
+ this.materializeDerived();
261
+ return [...this.record.repeats];
262
+ }
263
+ errorClustersForTests() {
264
+ this.materializeDerived();
265
+ return [...this.record.errorClusters];
266
+ }
267
+ /** Compact agent-readable summary of THIS session (for session_stats). */
268
+ summary() {
269
+ return summarizeRecord(this.record);
270
+ }
271
+ }
272
+ // ── Summaries + aggregation ─────────────────────────────────
273
+ function pct(part, whole) {
274
+ return whole > 0 ? `${((100 * part) / whole).toFixed(0)}%` : "—";
275
+ }
276
+ function fmtMs(ms) {
277
+ return ms >= 1000 ? `${(ms / 1000).toFixed(1)}s` : `${Math.round(ms)}ms`;
278
+ }
279
+ export function summarizeRecord(r) {
280
+ const lines = [];
281
+ const t = r.totals;
282
+ const promptTotal = t.inputTokens + t.cacheRead;
283
+ lines.push(`Session ${r.sessionId} (${r.provider}/${r.model}) — ${t.turns} turns, ${t.toolCalls} tool calls (${t.toolErrors} errors).`);
284
+ lines.push(`Tokens: ${t.inputTokens + t.cacheRead} prompt (${t.cacheRead} cached, ${pct(t.cacheRead, promptTotal)} reuse), ${t.outputTokens} output.`);
285
+ if (r.modelSwitches.length) {
286
+ lines.push(`Model switches: ${r.modelSwitches.length} (each likely rebuilds the cached prefix).`);
287
+ }
288
+ const ttfts = r.turns.map((x) => x.ttftMs).filter((x) => typeof x === "number");
289
+ if (ttfts.length) {
290
+ const sorted = [...ttfts].sort((a, b) => a - b);
291
+ lines.push(`TTFT median ${fmtMs(sorted[Math.floor(sorted.length / 2)])}, worst ${fmtMs(sorted[sorted.length - 1])}.`);
292
+ }
293
+ const toolLines = Object.entries(r.toolStats)
294
+ .sort((a, b) => b[1].totalMs - a[1].totalMs)
295
+ .slice(0, 6)
296
+ .map(([name, s]) => {
297
+ const failed = s.errors + (s.softErrors ?? 0);
298
+ const err = failed > 0 ? `, ${failed} failed (${pct(failed, s.calls)})` : "";
299
+ const bad = failed > 0 && failed / s.calls >= 0.25 ? " ⚠" : "";
300
+ return `- ${name}: ${s.calls} calls, ${fmtMs(s.totalMs)} total, ${fmtMs(s.maxMs)} max${err}${bad}`;
301
+ });
302
+ if (toolLines.length)
303
+ lines.push("Tools (by total time):", ...toolLines);
304
+ if (r.repeats.length) {
305
+ lines.push(`Repeated identical calls: ${r.repeats.map((x) => `${x.tool}×${x.count}`).join(", ")} — usually a stuck pattern.`);
306
+ }
307
+ for (const c of r.errorClusters.slice(0, 3)) {
308
+ lines.push(`Top error (${c.count}×): ${c.digest}`);
309
+ }
310
+ if (r.truncations.length) {
311
+ const continued = r.truncations.filter((x) => x.continued).length;
312
+ lines.push(`Output cut off ${r.truncations.length}× (${continued} auto-continued).`);
313
+ }
314
+ if (r.compactions.length) {
315
+ lines.push(`Compactions: ${r.compactions.length}× (${r.compactions
316
+ .map((c) => `${c.originalCount}→${c.newCount} msgs`)
317
+ .join(", ")}).`);
318
+ }
319
+ return lines.join("\n");
320
+ }
321
+ /** Read the newest N session records and produce a ranked, agent-readable
322
+ * findings report. Findings are ordered by cost × frequency, most urgent
323
+ * first; "what works" is included so regressions are visible. */
324
+ export function aggregateRecentDiagnostics(limit = 20, dir) {
325
+ const root = dir ?? diagnosticsSessionsDir();
326
+ let files;
327
+ try {
328
+ files = fs
329
+ .readdirSync(root)
330
+ .filter((f) => f.endsWith(".json"))
331
+ .map((f) => path.join(root, f))
332
+ .sort((a, b) => fs.statSync(b).mtimeMs - fs.statSync(a).mtimeMs)
333
+ .slice(0, limit);
334
+ }
335
+ catch {
336
+ return { sessionCount: 0, report: "No session diagnostics found (is internal mode enabled?)." };
337
+ }
338
+ const records = [];
339
+ for (const f of files) {
340
+ try {
341
+ const parsed = JSON.parse(fs.readFileSync(f, "utf8"));
342
+ if (parsed?.version === 1)
343
+ records.push(parsed);
344
+ }
345
+ catch {
346
+ // Skip corrupt files — diagnostics must never hard-fail.
347
+ }
348
+ }
349
+ if (!records.length) {
350
+ return { sessionCount: 0, report: "No valid session diagnostics records found." };
351
+ }
352
+ const findings = [];
353
+ const toolAgg = new Map();
354
+ const clusterAgg = new Map();
355
+ const repeatAgg = new Map();
356
+ let input = 0;
357
+ let cacheRead = 0;
358
+ let toolCalls = 0;
359
+ let toolErrors = 0;
360
+ let truncations = 0;
361
+ let compactions = 0;
362
+ let modelSwitches = 0;
363
+ const ttfts = [];
364
+ for (const r of records) {
365
+ input += r.totals.inputTokens;
366
+ cacheRead += r.totals.cacheRead;
367
+ toolCalls += r.totals.toolCalls;
368
+ toolErrors += r.totals.toolErrors;
369
+ truncations += r.truncations.length;
370
+ compactions += r.compactions.length;
371
+ modelSwitches += r.modelSwitches.length;
372
+ for (const x of r.turns)
373
+ if (typeof x.ttftMs === "number")
374
+ ttfts.push(x.ttftMs);
375
+ for (const [name, s] of Object.entries(r.toolStats)) {
376
+ const agg = toolAgg.get(name) ?? { calls: 0, errors: 0, maxMs: 0, totalMs: 0 };
377
+ agg.calls += s.calls;
378
+ agg.errors += s.errors + (s.softErrors ?? 0);
379
+ agg.maxMs = Math.max(agg.maxMs, s.maxMs);
380
+ agg.totalMs += s.totalMs;
381
+ toolAgg.set(name, agg);
382
+ }
383
+ for (const c of r.errorClusters)
384
+ clusterAgg.set(c.digest, (clusterAgg.get(c.digest) ?? 0) + c.count);
385
+ for (const rep of r.repeats) {
386
+ const key = `${rep.tool}::${rep.argsDigest}`;
387
+ repeatAgg.set(key, (repeatAgg.get(key) ?? 0) + rep.count);
388
+ }
389
+ }
390
+ const promptTotal = input + cacheRead;
391
+ findings.push(`${records.length} sessions — ${toolCalls} tool calls, ${toolErrors} errors (${pct(toolErrors, toolCalls)}), cache reuse ${pct(cacheRead, promptTotal)} across ${(promptTotal / 1000).toFixed(0)}k prompt tokens.`);
392
+ // 1. Error clusters — reliability, ranked by count.
393
+ const clusters = [...clusterAgg.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
394
+ if (clusters.length) {
395
+ findings.push("CHECK OUT — recurring errors:", ...clusters.map(([digest, n]) => `- ${n}× ${digest}`));
396
+ }
397
+ // 2. High-failure-rate tools.
398
+ const flaky = [...toolAgg.entries()]
399
+ .filter(([, s]) => s.calls >= 5 && s.errors / s.calls >= 0.25)
400
+ .sort((a, b) => b[1].errors / b[1].calls - a[1].errors / a[1].calls);
401
+ if (flaky.length) {
402
+ findings.push("CHECK OUT — tools failing ≥25% of calls:", ...flaky.map(([name, s]) => `- ${name}: ${s.errors}/${s.calls} (${pct(s.errors, s.calls)})`));
403
+ }
404
+ // 3. Slow tools — worst-case duration.
405
+ const slow = [...toolAgg.entries()]
406
+ .filter(([, s]) => s.maxMs >= 30_000)
407
+ .sort((a, b) => b[1].maxMs - a[1].maxMs);
408
+ if (slow.length) {
409
+ findings.push("SPEED — tools with ≥30s worst-case calls:", ...slow.map(([name, s]) => `- ${name}: max ${fmtMs(s.maxMs)}, total ${fmtMs(s.totalMs)}`));
410
+ }
411
+ // 4. Repeats — wasted turns.
412
+ const repeats = [...repeatAgg.entries()].sort((a, b) => b[1] - a[1]).slice(0, 5);
413
+ if (repeats.length) {
414
+ findings.push("WASTE — identical calls repeated ≥3× (stuck patterns):", ...repeats.map(([key]) => `- ${key.replace("::", " ")}`));
415
+ }
416
+ // 5. Cache + compaction pressure.
417
+ if (modelSwitches > 0) {
418
+ findings.push(`COST — ${modelSwitches} mid-session model switch(es): each one can rebuild the cached prefix and re-bill the whole context.`);
419
+ }
420
+ if (compactions > 0)
421
+ findings.push(`COST — ${compactions} compaction(s) across these sessions.`);
422
+ if (truncations > 0)
423
+ findings.push(`RELIABILITY — output cut off ${truncations}× (output-token limits).`);
424
+ if (ttfts.length) {
425
+ const sorted = [...ttfts].sort((a, b) => a - b);
426
+ findings.push(`SPEED — TTFT median ${fmtMs(sorted[Math.floor(sorted.length / 2)])}, p95 ${fmtMs(sorted[Math.floor(sorted.length * 0.95)])} over ${ttfts.length} turns.`);
427
+ }
428
+ // What's working — the counterfactual baseline.
429
+ const healthy = [...toolAgg.entries()].filter(([, s]) => s.calls >= 5 && s.errors === 0);
430
+ if (healthy.length) {
431
+ findings.push(`WORKING — zero-error tools (≥5 calls): ${healthy.map(([n]) => n).join(", ")}.`);
432
+ }
433
+ return { sessionCount: records.length, report: findings.join("\n") };
434
+ }
435
+ // ── /diagnose slash command ────────────────────────────────
436
+ /** Internal-only command; registered exclusively when the internal flag is on. */
437
+ export function createDiagnoseCommand() {
438
+ return {
439
+ name: "diagnose",
440
+ aliases: ["diag"],
441
+ description: "Internal: aggregate recent session diagnostics into ranked findings",
442
+ usage: "/diagnose [sessions]",
443
+ execute(args) {
444
+ const parsed = Number.parseInt(args.trim(), 10);
445
+ const limit = Number.isFinite(parsed) && parsed > 0 ? Math.min(parsed, 100) : 20;
446
+ return aggregateRecentDiagnostics(limit).report;
447
+ },
448
+ };
449
+ }
450
+ //# sourceMappingURL=internal-diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-diagnostics.js","sourceRoot":"","sources":["../../src/core/internal-diagnostics.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  export interface SlashCommandContext {
2
2
  switchModel: (provider: string, model: string) => Promise<void>;
3
- compact: () => Promise<void>;
3
+ /** Compact now. `focus` is the user's `/compact <focus>` text: a short
4
+ * description of what must survive the summary verbatim. */
5
+ compact: (focus?: string) => Promise<void>;
4
6
  newSession: () => Promise<void>;
5
7
  listSessions: () => Promise<string>;
6
8
  getSettings: () => Record<string, unknown>;
@@ -77,10 +77,12 @@ export function createBuiltinCommands() {
77
77
  name: "compact",
78
78
  aliases: ["c"],
79
79
  description: "Compact conversation to reduce context usage",
80
- usage: "/compact",
81
- async execute(_args, ctx) {
82
- await ctx.compact();
83
- return "Conversation compacted.";
80
+ usage: "/compact [focus]",
81
+ async execute(args, ctx) {
82
+ await ctx.compact(args.trim() || undefined);
83
+ return args.trim()
84
+ ? `Conversation compacted (focus: ${args.trim()}).`
85
+ : "Conversation compacted.";
84
86
  },
85
87
  },
86
88
  {
@@ -1 +1 @@
1
- {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"slash-commands.js","sourceRoot":"","sources":["../../src/core/slash-commands.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Internal-only `session_stats` tool — NOT part of the public tool set.
3
+ *
4
+ * Registered by AgentSession exclusively when internal diagnostics are
5
+ * enabled (env `GG_INTERNAL=1` or `~/.gg/internal.json` with
6
+ * `diagnostics: true`). Gives the agent live visibility into its own
7
+ * session — token spend, cache reuse, per-tool cost and errors, repeated
8
+ * calls — plus an optional cross-session aggregate, so it can notice waste
9
+ * and self-correct instead of spinning.
10
+ */
11
+ import { z } from "zod";
12
+ import type { AgentTool } from "@kenkaiiii/gg-agent";
13
+ import { type SessionDiagnosticsRecorder } from "../core/internal-diagnostics.js";
14
+ declare const SessionStatsParams: z.ZodObject<{
15
+ recent_sessions: z.ZodOptional<z.ZodNumber>;
16
+ }, z.core.$strip>;
17
+ export interface SessionStatsSource {
18
+ summary(): string;
19
+ }
20
+ /**
21
+ * @param getCurrent Recorder for the live session, if internal mode is on and
22
+ * the session has one. The lazy getter keeps tool creation decoupled from
23
+ * recorder lifecycle (the recorder is created during session init).
24
+ */
25
+ export declare function createSessionStatsTool(getCurrent: () => (SessionDiagnosticsRecorder & SessionStatsSource) | undefined): AgentTool<typeof SessionStatsParams>;
26
+ export {};
@@ -0,0 +1,51 @@
1
+ /**
2
+ * Internal-only `session_stats` tool — NOT part of the public tool set.
3
+ *
4
+ * Registered by AgentSession exclusively when internal diagnostics are
5
+ * enabled (env `GG_INTERNAL=1` or `~/.gg/internal.json` with
6
+ * `diagnostics: true`). Gives the agent live visibility into its own
7
+ * session — token spend, cache reuse, per-tool cost and errors, repeated
8
+ * calls — plus an optional cross-session aggregate, so it can notice waste
9
+ * and self-correct instead of spinning.
10
+ */
11
+ import { z } from "zod";
12
+ import { aggregateRecentDiagnostics, } from "../core/internal-diagnostics.js";
13
+ const SessionStatsParams = z.object({
14
+ recent_sessions: z
15
+ .number()
16
+ .int()
17
+ .min(1)
18
+ .max(50)
19
+ .optional()
20
+ .describe("Also append an aggregate over the N most recent sessions (default: current session only)"),
21
+ });
22
+ /**
23
+ * @param getCurrent Recorder for the live session, if internal mode is on and
24
+ * the session has one. The lazy getter keeps tool creation decoupled from
25
+ * recorder lifecycle (the recorder is created during session init).
26
+ */
27
+ export function createSessionStatsTool(getCurrent) {
28
+ return {
29
+ name: "session_stats",
30
+ description: "Read this session's live efficiency stats: token spend, cache reuse, per-tool time/errors, " +
31
+ "repeated identical calls, compactions. Use it when you suspect you are looping, re-reading, " +
32
+ "or burning tokens, and change approach based on what it shows.",
33
+ parameters: SessionStatsParams,
34
+ async execute({ recent_sessions }) {
35
+ const current = getCurrent();
36
+ const parts = [];
37
+ if (current) {
38
+ parts.push("=== Current session ===", current.summary());
39
+ }
40
+ else {
41
+ parts.push("No live recorder for this session (internal diagnostics disabled mid-session?).");
42
+ }
43
+ if (recent_sessions) {
44
+ const agg = aggregateRecentDiagnostics(recent_sessions);
45
+ parts.push("", `=== Last ${agg.sessionCount} session(s) ===`, agg.report);
46
+ }
47
+ return parts.join("\n");
48
+ },
49
+ };
50
+ }
51
+ //# sourceMappingURL=session-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-stats.js","sourceRoot":"","sources":["../../src/tools/session-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EACL,0BAA0B,GAE3B,MAAM,iCAAiC,CAAC;AAEzC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,eAAe,EAAE,CAAC;SACf,MAAM,EAAE;SACR,GAAG,EAAE;SACL,GAAG,CAAC,CAAC,CAAC;SACN,GAAG,CAAC,EAAE,CAAC;SACP,QAAQ,EAAE;SACV,QAAQ,CACP,0FAA0F,CAC3F;CACJ,CAAC,CAAC;AAMH;;;;GAIG;AACH,MAAM,UAAU,sBAAsB,CACpC,UAA+E;IAE/E,OAAO;QACL,IAAI,EAAE,eAAe;QACrB,WAAW,EACT,6FAA6F;YAC7F,8FAA8F;YAC9F,gEAAgE;QAClE,UAAU,EAAE,kBAAkB;QAC9B,KAAK,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE;YAC/B,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAa,EAAE,CAAC;YAC3B,IAAI,OAAO,EAAE,CAAC;gBACZ,KAAK,CAAC,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;YAC3D,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CACR,iFAAiF,CAClF,CAAC;YACJ,CAAC;YACD,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,GAAG,GAAG,0BAA0B,CAAC,eAAe,CAAC,CAAC;gBACxD,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,YAAY,GAAG,CAAC,YAAY,iBAAiB,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAC5E,CAAC;YACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC1B,CAAC;KACF,CAAC;AACJ,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@kenkaiiii/ggcoder",
3
- "version": "5.59.4",
3
+ "version": "5.60.0",
4
4
  "type": "module",
5
5
  "description": "CLI coding agent with OAuth authentication for Anthropic, OpenAI, and Gemini",
6
6
  "license": "MIT",
@@ -114,9 +114,9 @@
114
114
  "typescript-language-server": "^5.3.0",
115
115
  "wrap-ansi": "^10.0.0",
116
116
  "zod": "^4.4.3",
117
- "@kenkaiiii/gg-agent": "5.59.4",
118
- "@kenkaiiii/gg-core": "5.59.4",
119
- "@kenkaiiii/gg-ai": "5.59.4"
117
+ "@kenkaiiii/gg-agent": "5.60.0",
118
+ "@kenkaiiii/gg-ai": "5.60.0",
119
+ "@kenkaiiii/gg-core": "5.60.0"
120
120
  },
121
121
  "optionalDependencies": {
122
122
  "@huggingface/transformers": "^3.6.0",