@tekdi/coding-analytics 1.0.2 → 1.0.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 (62) hide show
  1. package/dist/analysis/analysis-prompt.d.ts +97 -0
  2. package/dist/analysis/analysis-prompt.d.ts.map +1 -0
  3. package/dist/analysis/analysis-prompt.js +312 -0
  4. package/dist/analysis/analysis-prompt.js.map +1 -0
  5. package/dist/analysis/feedback-aggregator.d.ts +15 -0
  6. package/dist/analysis/feedback-aggregator.d.ts.map +1 -0
  7. package/dist/analysis/feedback-aggregator.js +142 -0
  8. package/dist/analysis/feedback-aggregator.js.map +1 -0
  9. package/dist/analysis/llm-provider.d.ts +9 -0
  10. package/dist/analysis/llm-provider.d.ts.map +1 -0
  11. package/dist/analysis/llm-provider.js +23 -0
  12. package/dist/analysis/llm-provider.js.map +1 -0
  13. package/dist/analysis/providers/claude-provider.d.ts +11 -0
  14. package/dist/analysis/providers/claude-provider.d.ts.map +1 -0
  15. package/dist/analysis/providers/claude-provider.js +74 -0
  16. package/dist/analysis/providers/claude-provider.js.map +1 -0
  17. package/dist/analysis/providers/gemini-provider.d.ts +11 -0
  18. package/dist/analysis/providers/gemini-provider.d.ts.map +1 -0
  19. package/dist/analysis/providers/gemini-provider.js +58 -0
  20. package/dist/analysis/providers/gemini-provider.js.map +1 -0
  21. package/dist/analysis/providers/openai-provider.d.ts +11 -0
  22. package/dist/analysis/providers/openai-provider.d.ts.map +1 -0
  23. package/dist/analysis/providers/openai-provider.js +66 -0
  24. package/dist/analysis/providers/openai-provider.js.map +1 -0
  25. package/dist/analysis/providers/parse-helper.d.ts +7 -0
  26. package/dist/analysis/providers/parse-helper.d.ts.map +1 -0
  27. package/dist/analysis/providers/parse-helper.js +27 -0
  28. package/dist/analysis/providers/parse-helper.js.map +1 -0
  29. package/dist/analysis/session-analyzer.d.ts +8 -0
  30. package/dist/analysis/session-analyzer.d.ts.map +1 -0
  31. package/dist/analysis/session-analyzer.js +115 -0
  32. package/dist/analysis/session-analyzer.js.map +1 -0
  33. package/dist/analysis/session-builder.d.ts +19 -0
  34. package/dist/analysis/session-builder.d.ts.map +1 -0
  35. package/dist/analysis/session-builder.js +174 -0
  36. package/dist/analysis/session-builder.js.map +1 -0
  37. package/dist/analysis/types.d.ts +94 -0
  38. package/dist/analysis/types.d.ts.map +1 -0
  39. package/dist/analysis/types.js +3 -0
  40. package/dist/analysis/types.js.map +1 -0
  41. package/dist/artifact-extractor.d.ts +55 -0
  42. package/dist/artifact-extractor.d.ts.map +1 -0
  43. package/dist/artifact-extractor.js +146 -0
  44. package/dist/artifact-extractor.js.map +1 -0
  45. package/dist/claude-hooks-receiver.d.ts +20 -0
  46. package/dist/claude-hooks-receiver.d.ts.map +1 -1
  47. package/dist/claude-hooks-receiver.js +402 -12
  48. package/dist/claude-hooks-receiver.js.map +1 -1
  49. package/dist/cli.js +242 -0
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config.d.ts +14 -0
  52. package/dist/config.d.ts.map +1 -1
  53. package/dist/config.js +18 -0
  54. package/dist/config.js.map +1 -1
  55. package/dist/heartbeat.d.ts +12 -0
  56. package/dist/heartbeat.d.ts.map +1 -0
  57. package/dist/heartbeat.js +33 -0
  58. package/dist/heartbeat.js.map +1 -0
  59. package/dist/logger.d.ts.map +1 -1
  60. package/dist/logger.js +16 -8
  61. package/dist/logger.js.map +1 -1
  62. package/package.json +8 -2
@@ -1,16 +1,56 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.ClaudeHooksReceiver = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
4
39
  const enricher_1 = require("./enricher");
5
40
  const batcher_1 = require("./batcher");
6
41
  const config_1 = require("./config");
7
42
  const logger_1 = require("./logger");
8
43
  const queue_1 = require("./queue");
44
+ const artifact_extractor_1 = require("./artifact-extractor");
9
45
  class ClaudeHooksReceiver {
10
46
  constructor() {
11
47
  // Lazy — only created if handleEvent (direct send) is used
12
48
  this.enricher = null;
13
49
  this.batcher = null;
50
+ // Extra events (claude_agent_responded / claude_agent_thought) produced by
51
+ // ingestTranscript() during mapEvent(); flushed by queueEvent/handleEvent
52
+ // alongside the primary event. Reset at the start of each call.
53
+ this.pendingTranscriptEvents = [];
14
54
  this.config = config_1.Config.load();
15
55
  }
16
56
  getEnricher() {
@@ -25,25 +65,38 @@ class ClaudeHooksReceiver {
25
65
  }
26
66
  /** Fast path: map → filter → queue. Exits in <5ms. No network, no git. */
27
67
  async queueEvent(hookType, eventData) {
68
+ this.pendingTranscriptEvents = [];
28
69
  const event = this.mapEvent(hookType, eventData);
29
70
  if (!event) {
30
71
  logger_1.logger.warn('Unknown Claude hook type', { hookType });
31
72
  return;
32
73
  }
33
- new queue_1.Queue().append(this.applyPrivacyFilters(event));
34
- logger_1.logger.debug('Claude event queued', { hookType });
74
+ const queue = new queue_1.Queue();
75
+ for (const e of this.pendingTranscriptEvents) {
76
+ queue.append(this.applyPrivacyFilters(e));
77
+ }
78
+ queue.append(this.applyPrivacyFilters(event));
79
+ logger_1.logger.debug('Claude event queued', { hookType, extraEvents: this.pendingTranscriptEvents.length });
35
80
  }
36
81
  async handleEvent(hookType, eventData) {
37
82
  try {
38
83
  logger_1.logger.debug('Received Claude hook event', { hookType, eventData });
84
+ this.pendingTranscriptEvents = [];
39
85
  const event = this.mapEvent(hookType, eventData);
40
86
  if (!event) {
41
87
  logger_1.logger.warn('Unknown Claude hook type', { hookType });
42
88
  return;
43
89
  }
90
+ const enricher = this.getEnricher();
91
+ const batcher = this.getBatcher();
92
+ for (const e of this.pendingTranscriptEvents) {
93
+ const filtered = this.applyPrivacyFilters(e);
94
+ const enriched = await enricher.enrich(filtered);
95
+ await batcher.add(enriched);
96
+ }
44
97
  const filteredEvent = this.applyPrivacyFilters(event);
45
- const enrichedEvent = await this.getEnricher().enrich(filteredEvent);
46
- await this.getBatcher().add(enrichedEvent);
98
+ const enrichedEvent = await enricher.enrich(filteredEvent);
99
+ await batcher.add(enrichedEvent);
47
100
  logger_1.logger.debug('Claude event processed', { event: enrichedEvent.event });
48
101
  }
49
102
  catch (error) {
@@ -77,6 +130,13 @@ class ClaudeHooksReceiver {
77
130
  : lastUserMsg.content?.[0]?.text ?? '')
78
131
  : (data.prompt ?? '');
79
132
  const promptsInSession = transcript.filter((m) => m.role === 'user').length;
133
+ // A typed slash command (e.g. "/explain-project …") is a skill invocation.
134
+ const slashCommand = this.config.capture.skills
135
+ ? (0, artifact_extractor_1.extractSlashCommand)(promptText)
136
+ : null;
137
+ if (slashCommand)
138
+ this.recordArtifact(data.session_id, slashCommand);
139
+ const slashPlugin = slashCommand ? (0, artifact_extractor_1.pluginOf)(slashCommand) : null;
80
140
  return {
81
141
  type: 'claude_prompt_submitted',
82
142
  data: {
@@ -86,12 +146,24 @@ class ClaudeHooksReceiver {
86
146
  prompt: this.config.capture.prompts ? promptText : '[redacted]',
87
147
  prompt_length: promptText.length,
88
148
  prompts_in_session: promptsInSession,
149
+ ...(slashCommand
150
+ ? {
151
+ skill_name: slashCommand,
152
+ artifact_type: 'command',
153
+ ...(slashPlugin ? { plugin_name: slashPlugin } : {}),
154
+ }
155
+ : {}),
89
156
  },
90
157
  timestamp,
91
158
  provider: 'claude',
92
159
  };
93
160
  }
94
- case 'PreToolUse':
161
+ case 'PreToolUse': {
162
+ // Extract from RAW tool_input so the skill/subagent name survives even
163
+ // when capture.prompts is off (a name is not a secret).
164
+ const artifact = this.config.capture.skills
165
+ ? (0, artifact_extractor_1.extractArtifact)(data.tool_name, data.tool_input)
166
+ : null;
95
167
  return {
96
168
  type: 'claude_tool_pre_use',
97
169
  data: {
@@ -99,11 +171,25 @@ class ClaudeHooksReceiver {
99
171
  cwd: data.cwd,
100
172
  tool_name: data.tool_name,
101
173
  tool_input: this.config.capture.prompts ? data.tool_input : undefined,
174
+ ...(artifact
175
+ ? {
176
+ skill_name: artifact.name,
177
+ artifact_type: artifact.type,
178
+ ...(artifact.plugin ? { plugin_name: artifact.plugin } : {}),
179
+ }
180
+ : {}),
102
181
  },
103
182
  timestamp,
104
183
  provider: 'claude',
105
184
  };
106
- case 'PostToolUse':
185
+ }
186
+ case 'PostToolUse': {
187
+ const artifact = this.config.capture.skills
188
+ ? (0, artifact_extractor_1.extractArtifact)(data.tool_name, data.tool_input)
189
+ : null;
190
+ // Record on completion (PostToolUse) for the per-session rollup.
191
+ if (artifact)
192
+ this.recordArtifact(data.session_id, artifact.name);
107
193
  return {
108
194
  type: 'claude_tool_used',
109
195
  data: {
@@ -113,10 +199,18 @@ class ClaudeHooksReceiver {
113
199
  tool_input: this.config.capture.prompts ? data.tool_input : undefined,
114
200
  // non-zero exit code signals an error
115
201
  exit_code: data.tool_response?.exit_code ?? null,
202
+ ...(artifact
203
+ ? {
204
+ skill_name: artifact.name,
205
+ artifact_type: artifact.type,
206
+ ...(artifact.plugin ? { plugin_name: artifact.plugin } : {}),
207
+ }
208
+ : {}),
116
209
  },
117
210
  timestamp,
118
211
  provider: 'claude',
119
212
  };
213
+ }
120
214
  case 'SubagentStart':
121
215
  return {
122
216
  type: 'claude_subagent_started',
@@ -126,7 +220,11 @@ class ClaudeHooksReceiver {
126
220
  timestamp,
127
221
  provider: 'claude',
128
222
  };
129
- case 'SubagentStop':
223
+ case 'SubagentStop': {
224
+ if (this.config.capture.transcript && data.transcript_path) {
225
+ const { events } = this.ingestTranscript(data.session_id, data.cwd, data.transcript_path);
226
+ this.pendingTranscriptEvents.push(...events);
227
+ }
130
228
  return {
131
229
  type: 'claude_subagent_stopped',
132
230
  data: {
@@ -135,18 +233,44 @@ class ClaudeHooksReceiver {
135
233
  timestamp,
136
234
  provider: 'claude',
137
235
  };
236
+ }
138
237
  case 'Stop': {
139
- const stopTranscript = data.transcript ?? [];
140
- const totalPrompts = stopTranscript.filter((m) => m.role === 'user').length;
141
- const totalResponses = stopTranscript.filter((m) => m.role === 'assistant').length;
238
+ // Distinct skills/subagents/commands used during this session, plus the
239
+ // distinct plugin namespaces they came from.
240
+ const skillsUsed = this.readAndClearArtifacts(data.session_id);
241
+ const pluginsUsed = [
242
+ ...new Set(skillsUsed.map((n) => (0, artifact_extractor_1.pluginOf)(n)).filter((p) => !!p)),
243
+ ];
244
+ // Prompt/response counts and token totals come from the transcript file
245
+ // (`data.transcript`, an inline array, is never sent by Claude Code —
246
+ // only `transcript_path` is; the old inline-array read always saw `[]`).
247
+ let totals = this.zeroTotals();
248
+ let meta = {};
249
+ if (this.config.capture.transcript && data.transcript_path) {
250
+ const result = this.ingestTranscript(data.session_id, data.cwd, data.transcript_path);
251
+ this.pendingTranscriptEvents.push(...result.events);
252
+ totals = result.totals;
253
+ meta = result.meta;
254
+ }
255
+ this.reapStaleSessions();
142
256
  return {
143
257
  type: 'claude_session_stopped',
144
258
  data: {
145
259
  session_id: data.session_id,
146
260
  cwd: data.cwd,
147
261
  stop_hook_active: data.stop_hook_active ?? false,
148
- total_prompts: totalPrompts,
149
- total_responses: totalResponses,
262
+ total_prompts: totals.user_messages,
263
+ total_responses: totals.assistant_messages,
264
+ total_input_tokens: totals.input_tokens,
265
+ total_output_tokens: totals.output_tokens,
266
+ total_cache_read_tokens: totals.cache_read_tokens,
267
+ total_cache_creation_tokens: totals.cache_creation_tokens,
268
+ // Session type: 'cli' (Claude Code CLI) vs 'sdk-ts'/'sdk-py' (Agent SDK).
269
+ entrypoint: meta.entrypoint,
270
+ cc_version: meta.version,
271
+ user_type: meta.user_type,
272
+ skills_used: skillsUsed,
273
+ plugins_used: pluginsUsed,
150
274
  },
151
275
  timestamp,
152
276
  provider: 'claude',
@@ -156,12 +280,278 @@ class ClaudeHooksReceiver {
156
280
  return null;
157
281
  }
158
282
  }
283
+ // ── Per-session artifact accumulator ───────────────────────────────────────
284
+ // Skill/subagent/command names are appended to a tiny per-session JSONL file
285
+ // as they fire, then read + deduped + deleted on the Stop hook to produce the
286
+ // `skills_used` rollup. All IO is best-effort and never throws on the hot path.
287
+ sessionsDir() {
288
+ return path.join(config_1.Config.getDataDir(), 'sessions');
289
+ }
290
+ /** Path for a session's accumulator file, or null if session_id is unusable. */
291
+ sessionFile(sessionId) {
292
+ // Sanitize to a safe charset so a malformed/hostile id cannot escape the dir.
293
+ const safe = String(sessionId ?? '').replace(/[^A-Za-z0-9_-]/g, '');
294
+ if (!safe)
295
+ return null;
296
+ return path.join(this.sessionsDir(), `${safe}.jsonl`);
297
+ }
298
+ /** Append one artifact name for a session. Best-effort; never throws. */
299
+ recordArtifact(sessionId, name) {
300
+ try {
301
+ const file = this.sessionFile(sessionId);
302
+ if (!file)
303
+ return;
304
+ const dir = this.sessionsDir();
305
+ if (!fs.existsSync(dir))
306
+ fs.mkdirSync(dir, { recursive: true });
307
+ // Append-only single line — atomic for small payloads, like the queue.
308
+ fs.appendFileSync(file, JSON.stringify({ name, ts: new Date().toISOString() }) + '\n', 'utf-8');
309
+ }
310
+ catch (err) {
311
+ logger_1.logger.debug('recordArtifact failed (ignored)', { err });
312
+ }
313
+ }
314
+ /** Read, dedupe, and delete a session accumulator. Never throws; returns []. */
315
+ readAndClearArtifacts(sessionId) {
316
+ try {
317
+ const file = this.sessionFile(sessionId);
318
+ if (!file || !fs.existsSync(file))
319
+ return [];
320
+ const content = fs.readFileSync(file, 'utf-8');
321
+ try {
322
+ fs.unlinkSync(file);
323
+ }
324
+ catch { /* ignore */ }
325
+ const seen = new Set();
326
+ for (const line of content.split('\n')) {
327
+ const t = line.trim();
328
+ if (!t)
329
+ continue;
330
+ try {
331
+ const obj = JSON.parse(t);
332
+ if (typeof obj?.name === 'string' && obj.name)
333
+ seen.add(obj.name);
334
+ }
335
+ catch { /* skip malformed line */ }
336
+ }
337
+ return [...seen]; // unique, insertion order preserved
338
+ }
339
+ catch (err) {
340
+ logger_1.logger.debug('readAndClearArtifacts failed (ignored)', { err });
341
+ return [];
342
+ }
343
+ }
344
+ /** Delete accumulator files from sessions that never reached Stop (>24h old). */
345
+ reapStaleSessions() {
346
+ // Sampled (~10%) so the synchronous Stop hook rarely pays for a dir scan.
347
+ if (Math.random() >= 0.1)
348
+ return;
349
+ try {
350
+ const dir = this.sessionsDir();
351
+ if (!fs.existsSync(dir))
352
+ return;
353
+ const cutoff = Date.now() - 24 * 60 * 60 * 1000;
354
+ for (const entry of fs.readdirSync(dir)) {
355
+ if (!entry.endsWith('.jsonl') && !entry.endsWith('.cursor.json'))
356
+ continue;
357
+ const full = path.join(dir, entry);
358
+ try {
359
+ if (fs.statSync(full).mtimeMs < cutoff)
360
+ fs.unlinkSync(full);
361
+ }
362
+ catch { /* ignore individual file errors */ }
363
+ }
364
+ }
365
+ catch (err) {
366
+ logger_1.logger.debug('reapStaleSessions failed (ignored)', { err });
367
+ }
368
+ }
369
+ // ── Transcript ingest ────────────────────────────────────────────────────
370
+ // Incrementally parses the Claude Code transcript_path JSONL file to recover
371
+ // what raw hook payloads never carry: assistant text, thinking, per-message
372
+ // token usage, and accurate message counts. Runs on Stop/SubagentStop, reads
373
+ // only the bytes appended since the last run (byte-offset cursor persisted
374
+ // in sessions/<id>.cursor.json), so cost stays O(delta) not O(session). See
375
+ // docs/06-transcript-ingest.md for the design.
376
+ zeroTotals() {
377
+ return {
378
+ user_messages: 0,
379
+ assistant_messages: 0,
380
+ input_tokens: 0,
381
+ output_tokens: 0,
382
+ cache_read_tokens: 0,
383
+ cache_creation_tokens: 0,
384
+ };
385
+ }
386
+ cursorFile(sessionId) {
387
+ const safe = String(sessionId ?? '').replace(/[^A-Za-z0-9_-]/g, '');
388
+ if (!safe)
389
+ return null;
390
+ return path.join(this.sessionsDir(), `${safe}.cursor.json`);
391
+ }
392
+ readCursor(sessionId) {
393
+ try {
394
+ const file = this.cursorFile(sessionId);
395
+ if (!file || !fs.existsSync(file))
396
+ return { offset: 0, totals: this.zeroTotals(), meta: {} };
397
+ const parsed = JSON.parse(fs.readFileSync(file, 'utf-8'));
398
+ return {
399
+ offset: typeof parsed.offset === 'number' ? parsed.offset : 0,
400
+ totals: { ...this.zeroTotals(), ...parsed.totals },
401
+ meta: { ...(parsed.meta ?? {}) },
402
+ };
403
+ }
404
+ catch (err) {
405
+ logger_1.logger.debug('readCursor failed (ignored)', { err });
406
+ return { offset: 0, totals: this.zeroTotals(), meta: {} };
407
+ }
408
+ }
409
+ writeCursor(sessionId, cursor) {
410
+ try {
411
+ const file = this.cursorFile(sessionId);
412
+ if (!file)
413
+ return;
414
+ const dir = this.sessionsDir();
415
+ if (!fs.existsSync(dir))
416
+ fs.mkdirSync(dir, { recursive: true });
417
+ fs.writeFileSync(file, JSON.stringify(cursor), 'utf-8');
418
+ }
419
+ catch (err) {
420
+ logger_1.logger.debug('writeCursor failed (ignored)', { err });
421
+ }
422
+ }
423
+ /**
424
+ * Reads new transcript lines since the last cursor offset, emits
425
+ * claude_agent_responded/claude_agent_thought events, and folds token/message
426
+ * counts into the running totals. Best-effort; never throws on the hot path.
427
+ */
428
+ ingestTranscript(sessionId, cwd, transcriptPath) {
429
+ const cursor = this.readCursor(sessionId);
430
+ try {
431
+ if (!fs.existsSync(transcriptPath))
432
+ return { events: [], totals: cursor.totals, meta: cursor.meta };
433
+ const buf = fs.readFileSync(transcriptPath);
434
+ let offset = cursor.offset;
435
+ if (buf.length < offset)
436
+ offset = 0; // rotation/truncation guard — reparse from scratch
437
+ if (offset >= buf.length)
438
+ return { events: [], totals: cursor.totals, meta: cursor.meta };
439
+ const slice = buf.subarray(offset);
440
+ const lastNewline = slice.lastIndexOf(10); // '\n' — only consume complete lines
441
+ if (lastNewline === -1)
442
+ return { events: [], totals: cursor.totals, meta: cursor.meta };
443
+ const text = slice.subarray(0, lastNewline).toString('utf-8');
444
+ const newOffset = offset + lastNewline + 1;
445
+ const totals = { ...cursor.totals };
446
+ const meta = { ...cursor.meta };
447
+ const events = [];
448
+ const timestamp = new Date().toISOString();
449
+ const sessionIdStr = String(sessionId ?? '');
450
+ for (const line of text.split('\n')) {
451
+ const t = line.trim();
452
+ if (!t)
453
+ continue;
454
+ let entry;
455
+ try {
456
+ entry = JSON.parse(t);
457
+ }
458
+ catch {
459
+ continue;
460
+ }
461
+ // Session-type signals live on every transcript entry; capture once.
462
+ // `entrypoint` = 'cli' for the CLI, 'sdk-ts'/'sdk-py' for the Agent SDK.
463
+ if (!meta.entrypoint && entry.entrypoint)
464
+ meta.entrypoint = String(entry.entrypoint);
465
+ if (!meta.version && entry.version)
466
+ meta.version = String(entry.version);
467
+ if (!meta.user_type && entry.userType)
468
+ meta.user_type = String(entry.userType);
469
+ if (entry.type === 'user') {
470
+ // A real prompt has string content; tool_result replies are arrays — skip those.
471
+ if (!entry.isMeta && typeof entry.message?.content === 'string')
472
+ totals.user_messages++;
473
+ continue;
474
+ }
475
+ if (entry.type !== 'assistant')
476
+ continue;
477
+ totals.assistant_messages++;
478
+ const message = entry.message ?? {};
479
+ const usage = message.usage ?? {};
480
+ const inputTokens = usage.input_tokens ?? 0;
481
+ const outputTokens = usage.output_tokens ?? 0;
482
+ const cacheReadTokens = usage.cache_read_input_tokens ?? 0;
483
+ const cacheCreationTokens = usage.cache_creation_input_tokens ?? 0;
484
+ totals.input_tokens += inputTokens;
485
+ totals.output_tokens += outputTokens;
486
+ totals.cache_read_tokens += cacheReadTokens;
487
+ totals.cache_creation_tokens += cacheCreationTokens;
488
+ const blocks = Array.isArray(message.content) ? message.content : [];
489
+ const textJoined = blocks.filter((b) => b?.type === 'text').map((b) => b.text ?? '').join('\n');
490
+ const thinkingJoined = blocks.filter((b) => b?.type === 'thinking').map((b) => b.thinking ?? '').join('\n');
491
+ const numToolCalls = blocks.filter((b) => b?.type === 'tool_use').length;
492
+ const base = {
493
+ session_id: sessionIdStr,
494
+ cwd,
495
+ message_uuid: entry.uuid,
496
+ model: message.model,
497
+ stop_reason: message.stop_reason,
498
+ is_sidechain: !!entry.isSidechain,
499
+ entrypoint: meta.entrypoint,
500
+ cc_version: meta.version,
501
+ user_type: meta.user_type,
502
+ };
503
+ if (textJoined) {
504
+ const capped = textJoined.slice(0, 10000);
505
+ events.push({
506
+ type: 'claude_agent_responded',
507
+ data: {
508
+ ...base,
509
+ response: this.config.capture.responses ? capped : undefined,
510
+ response_length: capped.length,
511
+ num_tool_calls: numToolCalls,
512
+ input_tokens: inputTokens,
513
+ output_tokens: outputTokens,
514
+ cache_read_tokens: cacheReadTokens,
515
+ cache_creation_tokens: cacheCreationTokens,
516
+ },
517
+ timestamp,
518
+ provider: 'claude',
519
+ });
520
+ }
521
+ if (thinkingJoined) {
522
+ const capped = thinkingJoined.slice(0, 10000);
523
+ events.push({
524
+ type: 'claude_agent_thought',
525
+ data: {
526
+ ...base,
527
+ thought: this.config.capture.agentThinking ? capped : undefined,
528
+ thought_length: capped.length,
529
+ },
530
+ timestamp,
531
+ provider: 'claude',
532
+ });
533
+ }
534
+ }
535
+ this.writeCursor(sessionId, { offset: newOffset, totals, meta });
536
+ return { events, totals, meta };
537
+ }
538
+ catch (err) {
539
+ logger_1.logger.debug('ingestTranscript failed (ignored)', { err });
540
+ return { events: [], totals: cursor.totals, meta: cursor.meta };
541
+ }
542
+ }
159
543
  applyPrivacyFilters(event) {
160
544
  if (!this.config.privacy.redactSecrets)
161
545
  return event;
162
546
  if (event.data.prompt) {
163
547
  event.data.prompt = this.redactSecrets(event.data.prompt);
164
548
  }
549
+ if (event.data.response) {
550
+ event.data.response = this.redactSecrets(event.data.response);
551
+ }
552
+ if (event.data.thought) {
553
+ event.data.thought = this.redactSecrets(event.data.thought);
554
+ }
165
555
  return event;
166
556
  }
167
557
  redactSecrets(text) {
@@ -1 +1 @@
1
- {"version":3,"file":"claude-hooks-receiver.js","sourceRoot":"","sources":["../claude-hooks-receiver.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-hooks-receiver.js","sourceRoot":"","sources":["../claude-hooks-receiver.ts"],"names":[],"mappings":"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"}