@neatlogs/claude-code 0.1.1 → 0.1.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.
package/dist/cli.js CHANGED
@@ -7,6 +7,7 @@ import {
7
7
  import { appendFileSync as appendFileSync2 } from "fs";
8
8
 
9
9
  // src/trace-shipper.ts
10
+ import { createHash } from "crypto";
10
11
  import protobuf from "protobufjs";
11
12
 
12
13
  // src/package-info.ts
@@ -113,6 +114,10 @@ function generateTraceId() {
113
114
  function generateSpanId() {
114
115
  return randomBytes(8);
115
116
  }
117
+ function deterministicId(input, length) {
118
+ const hash = createHash("sha256").update(input).digest();
119
+ return new Uint8Array(hash.buffer, hash.byteOffset, length);
120
+ }
116
121
  function bytesToHex(bytes) {
117
122
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
118
123
  }
@@ -500,8 +505,8 @@ function ensureSessionTrace(payload, config, shipper) {
500
505
  const model = readState(`model_${payload.session_id}`) || void 0;
501
506
  const workflowName = deriveWorkflowName(payload);
502
507
  writeState(`workflow_${payload.session_id}`, workflowName);
503
- const traceId = generateTraceId();
504
- const spanId = generateSpanId();
508
+ const traceId = deterministicId(payload.session_id, 16);
509
+ const spanId = deterministicId(payload.session_id + ":root", 8);
505
510
  const now = nowNanoString();
506
511
  const rootSpan = {
507
512
  traceId,
@@ -554,6 +559,7 @@ function createSpan(name, parent, startNano, endNano, attributes, status) {
554
559
  function mapHookEvent(payload, config, shipper) {
555
560
  switch (payload.hook_event_name) {
556
561
  case "SessionStart":
562
+ case "SessionStart:resume":
557
563
  handleSessionStart(payload, config, shipper);
558
564
  break;
559
565
  case "UserPromptSubmit":
package/dist/index.cjs CHANGED
@@ -88,6 +88,7 @@ function updateConfig(patch) {
88
88
  }
89
89
 
90
90
  // src/trace-shipper.ts
91
+ var import_crypto = require("crypto");
91
92
  var import_protobufjs = __toESM(require("protobufjs"), 1);
92
93
 
93
94
  // src/package-info.ts
@@ -194,6 +195,10 @@ function generateTraceId() {
194
195
  function generateSpanId() {
195
196
  return randomBytes(8);
196
197
  }
198
+ function deterministicId(input, length) {
199
+ const hash = (0, import_crypto.createHash)("sha256").update(input).digest();
200
+ return new Uint8Array(hash.buffer, hash.byteOffset, length);
201
+ }
197
202
  function bytesToHex(bytes) {
198
203
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
199
204
  }
@@ -581,8 +586,8 @@ function ensureSessionTrace(payload, config, shipper) {
581
586
  const model = readState(`model_${payload.session_id}`) || void 0;
582
587
  const workflowName = deriveWorkflowName(payload);
583
588
  writeState(`workflow_${payload.session_id}`, workflowName);
584
- const traceId = generateTraceId();
585
- const spanId = generateSpanId();
589
+ const traceId = deterministicId(payload.session_id, 16);
590
+ const spanId = deterministicId(payload.session_id + ":root", 8);
586
591
  const now = nowNanoString();
587
592
  const rootSpan = {
588
593
  traceId,
@@ -635,6 +640,7 @@ function createSpan(name, parent, startNano, endNano, attributes, status) {
635
640
  function mapHookEvent(payload, config, shipper) {
636
641
  switch (payload.hook_event_name) {
637
642
  case "SessionStart":
643
+ case "SessionStart:resume":
638
644
  handleSessionStart(payload, config, shipper);
639
645
  break;
640
646
  case "UserPromptSubmit":
package/dist/index.js CHANGED
@@ -48,6 +48,7 @@ function updateConfig(patch) {
48
48
  }
49
49
 
50
50
  // src/trace-shipper.ts
51
+ import { createHash } from "crypto";
51
52
  import protobuf from "protobufjs";
52
53
 
53
54
  // src/package-info.ts
@@ -154,6 +155,10 @@ function generateTraceId() {
154
155
  function generateSpanId() {
155
156
  return randomBytes(8);
156
157
  }
158
+ function deterministicId(input, length) {
159
+ const hash = createHash("sha256").update(input).digest();
160
+ return new Uint8Array(hash.buffer, hash.byteOffset, length);
161
+ }
157
162
  function bytesToHex(bytes) {
158
163
  return Array.from(bytes).map((b) => b.toString(16).padStart(2, "0")).join("");
159
164
  }
@@ -541,8 +546,8 @@ function ensureSessionTrace(payload, config, shipper) {
541
546
  const model = readState(`model_${payload.session_id}`) || void 0;
542
547
  const workflowName = deriveWorkflowName(payload);
543
548
  writeState(`workflow_${payload.session_id}`, workflowName);
544
- const traceId = generateTraceId();
545
- const spanId = generateSpanId();
549
+ const traceId = deterministicId(payload.session_id, 16);
550
+ const spanId = deterministicId(payload.session_id + ":root", 8);
546
551
  const now = nowNanoString();
547
552
  const rootSpan = {
548
553
  traceId,
@@ -595,6 +600,7 @@ function createSpan(name, parent, startNano, endNano, attributes, status) {
595
600
  function mapHookEvent(payload, config, shipper) {
596
601
  switch (payload.hook_event_name) {
597
602
  case "SessionStart":
603
+ case "SessionStart:resume":
598
604
  handleSessionStart(payload, config, shipper);
599
605
  break;
600
606
  case "UserPromptSubmit":
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@neatlogs/claude-code",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "description": "Neatlogs observability for Claude Code sessions — automatic tracing of prompts, tool calls, thinking, and LLM responses via hooks",
5
5
  "license": "MIT",
6
6
  "type": "module",