hazo_logs 1.1.0 → 2.0.1

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 (80) hide show
  1. package/README.md +198 -4
  2. package/config/hazo_logs_config.ini.sample +2 -0
  3. package/dist/index.d.ts +6 -1
  4. package/dist/index.d.ts.map +1 -1
  5. package/dist/index.js +6 -0
  6. package/dist/index.js.map +1 -1
  7. package/dist/lib/alert-triggers.d.ts +54 -0
  8. package/dist/lib/alert-triggers.d.ts.map +1 -0
  9. package/dist/lib/alert-triggers.js +96 -0
  10. package/dist/lib/alert-triggers.js.map +1 -0
  11. package/dist/lib/config_loader.d.ts.map +1 -1
  12. package/dist/lib/config_loader.js +1 -7
  13. package/dist/lib/config_loader.js.map +1 -1
  14. package/dist/lib/console-logger.d.ts +17 -1
  15. package/dist/lib/console-logger.d.ts.map +1 -1
  16. package/dist/lib/console-logger.js +47 -4
  17. package/dist/lib/console-logger.js.map +1 -1
  18. package/dist/lib/context/log-context.d.ts.map +1 -1
  19. package/dist/lib/context/log-context.js +4 -0
  20. package/dist/lib/context/log-context.js.map +1 -1
  21. package/dist/lib/eslint_plugin/index.d.ts +109 -0
  22. package/dist/lib/eslint_plugin/index.d.ts.map +1 -0
  23. package/dist/lib/eslint_plugin/index.js +168 -0
  24. package/dist/lib/eslint_plugin/index.js.map +1 -0
  25. package/dist/lib/global-error-handlers.d.ts +23 -0
  26. package/dist/lib/global-error-handlers.d.ts.map +1 -0
  27. package/dist/lib/global-error-handlers.js +46 -0
  28. package/dist/lib/global-error-handlers.js.map +1 -0
  29. package/dist/lib/hazo_logger.d.ts +9 -0
  30. package/dist/lib/hazo_logger.d.ts.map +1 -1
  31. package/dist/lib/hazo_logger.js +32 -0
  32. package/dist/lib/hazo_logger.js.map +1 -1
  33. package/dist/lib/level_resolver.d.ts +26 -0
  34. package/dist/lib/level_resolver.d.ts.map +1 -0
  35. package/dist/lib/level_resolver.js +65 -0
  36. package/dist/lib/level_resolver.js.map +1 -0
  37. package/dist/lib/log-reader.d.ts.map +1 -1
  38. package/dist/lib/log-reader.js +6 -4
  39. package/dist/lib/log-reader.js.map +1 -1
  40. package/dist/lib/package_logger.d.ts +47 -3
  41. package/dist/lib/package_logger.d.ts.map +1 -1
  42. package/dist/lib/package_logger.js +196 -10
  43. package/dist/lib/package_logger.js.map +1 -1
  44. package/dist/lib/ring_buffer.d.ts +51 -0
  45. package/dist/lib/ring_buffer.d.ts.map +1 -0
  46. package/dist/lib/ring_buffer.js +107 -0
  47. package/dist/lib/ring_buffer.js.map +1 -0
  48. package/dist/lib/types.d.ts +57 -24
  49. package/dist/lib/types.d.ts.map +1 -1
  50. package/dist/lib/universal-logger.d.ts.map +1 -1
  51. package/dist/lib/universal-logger.js +18 -0
  52. package/dist/lib/universal-logger.js.map +1 -1
  53. package/dist/lib/utils/caller_info.d.ts +25 -1
  54. package/dist/lib/utils/caller_info.d.ts.map +1 -1
  55. package/dist/lib/utils/caller_info.js +62 -1
  56. package/dist/lib/utils/caller_info.js.map +1 -1
  57. package/dist/lib/with-error-handler.d.ts +19 -0
  58. package/dist/lib/with-error-handler.d.ts.map +1 -0
  59. package/dist/lib/with-error-handler.js +77 -0
  60. package/dist/lib/with-error-handler.js.map +1 -0
  61. package/dist/server.d.ts +9 -0
  62. package/dist/server.d.ts.map +1 -1
  63. package/dist/server.js +7 -0
  64. package/dist/server.js.map +1 -1
  65. package/dist/ui/components/ErrorBoundary.d.ts +44 -0
  66. package/dist/ui/components/ErrorBoundary.d.ts.map +1 -0
  67. package/dist/ui/components/ErrorBoundary.js +57 -0
  68. package/dist/ui/components/ErrorBoundary.js.map +1 -0
  69. package/dist/ui/components/LogLevelBadge.d.ts.map +1 -1
  70. package/dist/ui/components/LogLevelBadge.js +1 -0
  71. package/dist/ui/components/LogLevelBadge.js.map +1 -1
  72. package/dist/ui/hooks/useErrorReporter.d.ts +16 -0
  73. package/dist/ui/hooks/useErrorReporter.d.ts.map +1 -0
  74. package/dist/ui/hooks/useErrorReporter.js +56 -0
  75. package/dist/ui/hooks/useErrorReporter.js.map +1 -0
  76. package/dist/ui/index.d.ts +4 -0
  77. package/dist/ui/index.d.ts.map +1 -1
  78. package/dist/ui/index.js +3 -0
  79. package/dist/ui/index.js.map +1 -1
  80. package/package.json +19 -7
@@ -7,10 +7,12 @@ import path from 'path';
7
7
  import readline from 'readline';
8
8
  import { loadConfig } from './config_loader.js';
9
9
  const LEVEL_ORDER = {
10
- error: 0,
11
- warn: 1,
12
- info: 2,
13
- debug: 3,
10
+ fatal: 0,
11
+ error: 1,
12
+ warn: 2,
13
+ info: 3,
14
+ debug: 4,
15
+ trace: 5,
14
16
  };
15
17
  /**
16
18
  * Read logs from file with filtering, sorting, and pagination
@@ -1 +1 @@
1
- {"version":3,"file":"log-reader.js","sourceRoot":"","sources":["../../src/lib/log-reader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"log-reader.js","sourceRoot":"","sources":["../../src/lib/log-reader.ts"],"names":[],"mappings":"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"}
@@ -3,10 +3,10 @@
3
3
  * Creates loggers that tag all entries with a package name
4
4
  */
5
5
  import { HazoLogger } from './hazo_logger.js';
6
- import type { Logger, LogData, PackageLoggerOptions } from './types.js';
6
+ import type { Logger, LogData, PackageLoggerOptions, RingBufferEntry } from './types.js';
7
7
  /**
8
- * Logger implementation for a specific package
9
- * Tags all log entries with the package name and captures caller info
8
+ * Logger implementation for a specific package.
9
+ * Tags all log entries with the package name and captures caller info.
10
10
  */
11
11
  export declare class PackageLogger implements Logger {
12
12
  private coreLogger;
@@ -17,11 +17,55 @@ export declare class PackageLogger implements Logger {
17
17
  * Get the core logger, waiting if necessary
18
18
  */
19
19
  private getCoreLogger;
20
+ /**
21
+ * Resolve a correlation ID. Prefers hazo_core's ALS-based correlationId
22
+ * (from globalThis.__hazo_core_context_store__) when available, falls back
23
+ * to hazo_logs' own context (reference ?? sessionId).
24
+ */
25
+ private getCorrelationId;
20
26
  private log;
27
+ fatal(message: string, data?: LogData): void;
21
28
  error(message: string, data?: LogData): void;
22
29
  warn(message: string, data?: LogData): void;
23
30
  info(message: string, data?: LogData): void;
24
31
  debug(message: string, data?: LogData): void;
32
+ trace(message: string, data?: LogData): void;
33
+ /**
34
+ * Emit only on state change. Tracks last state per `name` across the process lifetime.
35
+ *
36
+ * - First call: INFO "name: started (status=ok)"
37
+ * - Same status: silent
38
+ * - Status change: INFO (or WARN if new status matches failure pattern)
39
+ * "name: prev → curr (after N prev)"
40
+ */
41
+ heartbeat(name: string, fields: {
42
+ status: string;
43
+ [key: string]: unknown;
44
+ }, opts?: {
45
+ trigger?: (prev: Record<string, unknown>, curr: Record<string, unknown>) => boolean;
46
+ }): void;
47
+ /**
48
+ * Emit with probability `opts.sample` (default: 0.1 = 10%).
49
+ * Appends "(sampled ~1/N)" to the message when emitted.
50
+ */
51
+ sampled(level: 'trace' | 'debug' | 'info' | 'warn', msg: string, fields?: Record<string, unknown>, opts?: {
52
+ sample: number;
53
+ }): void;
54
+ /**
55
+ * Within a time window, collapse identical-keyed messages.
56
+ * First occurrence: emitted immediately as "msg (1× so far)"
57
+ * Subsequent in same window: counter incremented, silent
58
+ * At window end: if count > 1, emit "msg (×N over Xs)"; if count === 1, emit normally.
59
+ */
60
+ dedupe(level: 'trace' | 'debug' | 'info' | 'warn', msg: string, fields?: Record<string, unknown>, opts?: {
61
+ window: string;
62
+ key?: string;
63
+ }): void;
64
+ /**
65
+ * Access the ring buffer for a given correlation ID.
66
+ * Returns the last n entries (default: all buffered entries).
67
+ */
68
+ getRingBuffer(correlationId: string, n?: number): RingBufferEntry[];
25
69
  }
26
70
  /**
27
71
  * Factory function to create a package-specific logger
@@ -1 +1 @@
1
- {"version":3,"file":"package_logger.d.ts","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAIlF;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,UAAU;IAalE;;OAEG;YACW,aAAa;IAQ3B,OAAO,CAAC,GAAG;IAkCX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;CAG7C;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD"}
1
+ {"version":3,"file":"package_logger.d.ts","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,KAAK,EAAE,MAAM,EAAE,OAAO,EAAY,oBAAoB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAmDnG;;;GAGG;AACH,qBAAa,aAAc,YAAW,MAAM;IAC1C,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,iBAAiB,CAAoC;IAC7D,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,EAAE,oBAAoB,EAAE,UAAU,CAAC,EAAE,UAAU;IAalE;;OAEG;YACW,aAAa;IAQ3B;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAiBxB,OAAO,CAAC,GAAG;IAsEX,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,IAAI,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI3C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAI5C,KAAK,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,IAAI;IAM5C;;;;;;;OAOG;IACH,SAAS,CACP,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,EAClD,IAAI,CAAC,EAAE;QACL,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAC;KACrF,GACA,IAAI;IAkCP;;;OAGG;IACH,OAAO,CACL,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAA;KAAE,GACxB,IAAI;IAaP;;;;;OAKG;IACH,MAAM,CACJ,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,EAC1C,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,IAAI,CAAC,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAE,GACtC,IAAI;IAgDP;;;OAGG;IACH,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;CAGpE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD"}
@@ -5,9 +5,33 @@
5
5
  import { HazoLogger } from './hazo_logger.js';
6
6
  import { getCallerInfo } from './utils/caller_info.js';
7
7
  import { getLogContext } from './context/log-context.js';
8
+ import { ringBufferRegistry, getRingBuffer } from './ring_buffer.js';
9
+ const heartbeatStates = new Map();
10
+ const sampledCounters = new Map();
11
+ const dedupeStates = new Map();
12
+ // ─── Duration parser ─────────────────────────────────────────────────────────
8
13
  /**
9
- * Logger implementation for a specific package
10
- * Tags all log entries with the package name and captures caller info
14
+ * Parse a duration string (e.g. '1m', '30s', '5m') to milliseconds.
15
+ */
16
+ function parseDuration(window) {
17
+ const match = window.match(/^(\d+(?:\.\d+)?)(ms|s|m|h)$/);
18
+ if (!match)
19
+ return 60_000; // default 1 minute
20
+ const value = parseFloat(match[1]);
21
+ switch (match[2]) {
22
+ case 'ms': return value;
23
+ case 's': return value * 1_000;
24
+ case 'm': return value * 60_000;
25
+ case 'h': return value * 3_600_000;
26
+ default: return 60_000;
27
+ }
28
+ }
29
+ // ─── Failure status pattern ───────────────────────────────────────────────────
30
+ const FAILURE_STATUS_RE = /(fail|error|down|degraded)/i;
31
+ // ─── PackageLogger ────────────────────────────────────────────────────────────
32
+ /**
33
+ * Logger implementation for a specific package.
34
+ * Tags all log entries with the package name and captures caller info.
11
35
  */
12
36
  export class PackageLogger {
13
37
  coreLogger = null;
@@ -37,9 +61,41 @@ export class PackageLogger {
37
61
  }
38
62
  throw new Error('[hazo_logs] Core logger not initialized');
39
63
  }
64
+ /**
65
+ * Resolve a correlation ID. Prefers hazo_core's ALS-based correlationId
66
+ * (from globalThis.__hazo_core_context_store__) when available, falls back
67
+ * to hazo_logs' own context (reference ?? sessionId).
68
+ */
69
+ getCorrelationId() {
70
+ // Prefer hazo_core's ALS correlationId when the context store is wired in
71
+ try {
72
+ const hazoCtx = globalThis['__hazo_core_context_store__'];
73
+ const coreId = hazoCtx?.getStore?.()?.correlationId;
74
+ if (coreId)
75
+ return coreId;
76
+ }
77
+ catch {
78
+ // Context store not available — fall through
79
+ }
80
+ const ctx = getLogContext();
81
+ if (!ctx)
82
+ return null;
83
+ return ctx.reference ?? ctx.sessionId ?? null;
84
+ }
40
85
  log(level, message, data) {
41
86
  const { filename, line } = getCallerInfo();
42
87
  const context = getLogContext();
88
+ const correlationId = this.getCorrelationId();
89
+ // Push TRACE and DEBUG entries into the ring buffer if we have a correlationId
90
+ if ((level === 'trace' || level === 'debug') && correlationId) {
91
+ const entry = {
92
+ level,
93
+ msg: message,
94
+ fields: data,
95
+ ts: new Date().toISOString(),
96
+ };
97
+ ringBufferRegistry.getOrCreate(correlationId).push(entry);
98
+ }
43
99
  const logEntry = {
44
100
  timestamp: new Date().toISOString(),
45
101
  level,
@@ -47,28 +103,52 @@ export class PackageLogger {
47
103
  message,
48
104
  filename,
49
105
  line,
50
- executionId: '', // Will be set when core logger is available
106
+ executionId: '',
107
+ ...(correlationId ? { correlationId } : {}),
51
108
  ...(context?.sessionId ? { sessionId: context.sessionId } : {}),
52
109
  ...(context?.reference ? { reference: context.reference } : {}),
53
110
  ...(context?.depth ? { depth: context.depth } : {}),
111
+ ...(context?.userId ? { userId: context.userId } : {}),
112
+ ...(context?.scope ? { scope: context.scope } : {}),
54
113
  ...(data ? { data } : {}),
55
114
  };
115
+ const emitEntry = (coreLogger) => {
116
+ logEntry.executionId = coreLogger.getExecutionId();
117
+ coreLogger.log(logEntry);
118
+ // On ERROR: dump the ring buffer for this correlation ID
119
+ if (level === 'error' && correlationId) {
120
+ const buffered = getRingBuffer(correlationId);
121
+ for (const entry of buffered) {
122
+ coreLogger.log({
123
+ timestamp: entry.ts,
124
+ level: entry.level,
125
+ package: this.packageName,
126
+ message: ` ↓ context: ${entry.msg}`,
127
+ filename,
128
+ line,
129
+ executionId: coreLogger.getExecutionId(),
130
+ ...(context?.sessionId ? { sessionId: context.sessionId } : {}),
131
+ ...(context?.reference ? { reference: context.reference } : {}),
132
+ ...(entry.fields ? { data: entry.fields } : {}),
133
+ });
134
+ }
135
+ }
136
+ };
56
137
  if (this.coreLogger) {
57
- // Core logger is ready, log immediately
58
- logEntry.executionId = this.coreLogger.getExecutionId();
59
- this.coreLogger.log(logEntry);
138
+ emitEntry(this.coreLogger);
60
139
  }
61
140
  else {
62
- // Core logger is still initializing, queue the log
63
141
  this.getCoreLogger().then((logger) => {
64
- logEntry.executionId = logger.getExecutionId();
65
- logger.log(logEntry);
142
+ emitEntry(logger);
66
143
  }).catch(() => {
67
- // Fallback to console if core logger fails to initialize
68
144
  console.error(`[${this.packageName}] ${message}`, data);
69
145
  });
70
146
  }
71
147
  }
148
+ // ─── Level methods ──────────────────────────────────────────────────────────
149
+ fatal(message, data) {
150
+ this.log('fatal', message, data);
151
+ }
72
152
  error(message, data) {
73
153
  this.log('error', message, data);
74
154
  }
@@ -81,6 +161,112 @@ export class PackageLogger {
81
161
  debug(message, data) {
82
162
  this.log('debug', message, data);
83
163
  }
164
+ trace(message, data) {
165
+ this.log('trace', message, data);
166
+ }
167
+ // ─── Smart helpers ──────────────────────────────────────────────────────────
168
+ /**
169
+ * Emit only on state change. Tracks last state per `name` across the process lifetime.
170
+ *
171
+ * - First call: INFO "name: started (status=ok)"
172
+ * - Same status: silent
173
+ * - Status change: INFO (or WARN if new status matches failure pattern)
174
+ * "name: prev → curr (after N prev)"
175
+ */
176
+ heartbeat(name, fields, opts) {
177
+ const prev = heartbeatStates.get(name);
178
+ if (!prev) {
179
+ // First call ever
180
+ heartbeatStates.set(name, { fields: { ...fields }, count: 1 });
181
+ this.log('info', `${name}: started (status=${fields.status})`, fields);
182
+ return;
183
+ }
184
+ // Determine if a state change occurred
185
+ const changed = opts?.trigger
186
+ ? opts.trigger(prev.fields, fields)
187
+ : prev.fields['status'] !== fields['status'];
188
+ if (!changed) {
189
+ // Same state — silent, just increment counter
190
+ heartbeatStates.set(name, { fields: prev.fields, count: prev.count + 1 });
191
+ return;
192
+ }
193
+ // State change
194
+ const prevStatus = prev.fields['status'];
195
+ const currStatus = fields['status'];
196
+ const count = prev.count;
197
+ heartbeatStates.set(name, { fields: { ...fields }, count: 1 });
198
+ const level = FAILURE_STATUS_RE.test(currStatus) ? 'warn' : 'info';
199
+ const msg = `${name}: ${prevStatus} → ${currStatus} (after ${count} ${prevStatus})`;
200
+ this.log(level, msg, { prev: prev.fields, curr: fields });
201
+ }
202
+ /**
203
+ * Emit with probability `opts.sample` (default: 0.1 = 10%).
204
+ * Appends "(sampled ~1/N)" to the message when emitted.
205
+ */
206
+ sampled(level, msg, fields, opts) {
207
+ const sample = opts?.sample ?? 0.1;
208
+ // Track call count for informational purposes
209
+ const count = (sampledCounters.get(msg) ?? 0) + 1;
210
+ sampledCounters.set(msg, count);
211
+ if (Math.random() < sample) {
212
+ const sampleLabel = `(sampled ~1/${Math.round(1 / sample)})`;
213
+ this.log(level, `${msg} ${sampleLabel}`, fields);
214
+ }
215
+ }
216
+ /**
217
+ * Within a time window, collapse identical-keyed messages.
218
+ * First occurrence: emitted immediately as "msg (1× so far)"
219
+ * Subsequent in same window: counter incremented, silent
220
+ * At window end: if count > 1, emit "msg (×N over Xs)"; if count === 1, emit normally.
221
+ */
222
+ dedupe(level, msg, fields, opts) {
223
+ const windowStr = opts?.window ?? '1m';
224
+ const key = opts?.key ?? msg;
225
+ const windowMs = parseDuration(windowStr);
226
+ const existing = dedupeStates.get(key);
227
+ const now = Date.now();
228
+ if (!existing || now >= existing.windowEnd) {
229
+ // New window — clear any old timer, emit immediately as "(1× so far)"
230
+ if (existing?.timer) {
231
+ clearTimeout(existing.timer);
232
+ }
233
+ const windowEnd = now + windowMs;
234
+ const state = {
235
+ count: 1,
236
+ firstTs: now,
237
+ windowEnd,
238
+ timer: null,
239
+ prevFields: fields,
240
+ };
241
+ // Schedule flush at window end
242
+ state.timer = setTimeout(() => {
243
+ const s = dedupeStates.get(key);
244
+ if (!s)
245
+ return;
246
+ if (s.count > 1) {
247
+ const durationSec = Math.round((Date.now() - s.firstTs) / 1000);
248
+ this.log(level, `${msg} (×${s.count} over ${durationSec}s)`, s.prevFields);
249
+ }
250
+ // If count === 1, already emitted on first occurrence — no flush needed
251
+ dedupeStates.delete(key);
252
+ }, windowMs);
253
+ dedupeStates.set(key, state);
254
+ this.log(level, `${msg} (1× so far)`, fields);
255
+ }
256
+ else {
257
+ // Same window — silent, increment counter and update prevFields
258
+ existing.count++;
259
+ existing.prevFields = fields;
260
+ }
261
+ }
262
+ // ─── Ring buffer access ─────────────────────────────────────────────────────
263
+ /**
264
+ * Access the ring buffer for a given correlation ID.
265
+ * Returns the last n entries (default: all buffered entries).
266
+ */
267
+ getRingBuffer(correlationId, n) {
268
+ return getRingBuffer(correlationId, n);
269
+ }
84
270
  }
85
271
  /**
86
272
  * Factory function to create a package-specific logger
@@ -1 +1 @@
1
- {"version":3,"file":"package_logger.js","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"package_logger.js","sourceRoot":"","sources":["../../src/lib/package_logger.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,51 @@
1
+ /**
2
+ * RingBuffer — per-correlation-ID in-memory circular buffer for TRACE/DEBUG entries.
3
+ *
4
+ * Design constraints (from design spec §2.4):
5
+ * - 200 entries per buffer
6
+ * - Max 100 active correlation IDs (LRU eviction)
7
+ * - Memory ceiling: ~100 × 200 × 500B = 10 MB
8
+ *
9
+ * When an ERROR is emitted, the buffer for the current correlation ID is dumped
10
+ * alongside the error so the full request lead-up is visible in a single log group.
11
+ */
12
+ import type { LogLevel } from './types.js';
13
+ export interface RingBufferEntry {
14
+ level: LogLevel;
15
+ msg: string;
16
+ fields?: Record<string, unknown>;
17
+ ts: string;
18
+ }
19
+ export declare class RingBuffer {
20
+ private readonly capacity;
21
+ private readonly buf;
22
+ private head;
23
+ private count;
24
+ constructor(capacity?: number);
25
+ push(entry: RingBufferEntry): void;
26
+ /**
27
+ * Returns the last `n` entries (default: all).
28
+ * Returned in chronological order (oldest first).
29
+ */
30
+ dump(n?: number): RingBufferEntry[];
31
+ clear(): void;
32
+ get size(): number;
33
+ }
34
+ /**
35
+ * Global per-correlationId ring buffer registry.
36
+ * LRU: max 100 active correlation IDs.
37
+ */
38
+ export declare class RingBufferRegistry {
39
+ private readonly buffers;
40
+ private readonly MAX_BUFFERS;
41
+ getOrCreate(correlationId: string): RingBuffer;
42
+ get(correlationId: string): RingBuffer | undefined;
43
+ evictLRU(): void;
44
+ }
45
+ export declare const ringBufferRegistry: RingBufferRegistry;
46
+ /**
47
+ * Public API used by hazo_ui/test-harness and hazo_core.
48
+ * Returns the last `n` entries for the given correlationId (empty array if none).
49
+ */
50
+ export declare function getRingBuffer(correlationId: string, n?: number): RingBufferEntry[];
51
+ //# sourceMappingURL=ring_buffer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring_buffer.d.ts","sourceRoot":"","sources":["../../src/lib/ring_buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,QAAQ,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,EAAE,EAAE,MAAM,CAAC;CACZ;AAID,qBAAa,UAAU;IAKT,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJrC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAqC;IACzD,OAAO,CAAC,IAAI,CAAK;IACjB,OAAO,CAAC,KAAK,CAAK;gBAEW,QAAQ,SAAM;IAI3C,IAAI,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI;IAMlC;;;OAGG;IACH,IAAI,CAAC,CAAC,CAAC,EAAE,MAAM,GAAG,eAAe,EAAE;IAenC,KAAK,IAAI,IAAI;IAMb,IAAI,IAAI,IAAI,MAAM,CAEjB;CACF;AAID;;;GAGG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiC;IACzD,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAO;IAEnC,WAAW,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU;IAkB9C,GAAG,CAAC,aAAa,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS;IAUlD,QAAQ,IAAI,IAAI;CAOjB;AAID,eAAO,MAAM,kBAAkB,oBAA2B,CAAC;AAE3D;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,aAAa,EAAE,MAAM,EACrB,CAAC,CAAC,EAAE,MAAM,GACT,eAAe,EAAE,CAInB"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * RingBuffer — per-correlation-ID in-memory circular buffer for TRACE/DEBUG entries.
3
+ *
4
+ * Design constraints (from design spec §2.4):
5
+ * - 200 entries per buffer
6
+ * - Max 100 active correlation IDs (LRU eviction)
7
+ * - Memory ceiling: ~100 × 200 × 500B = 10 MB
8
+ *
9
+ * When an ERROR is emitted, the buffer for the current correlation ID is dumped
10
+ * alongside the error so the full request lead-up is visible in a single log group.
11
+ */
12
+ // ─── RingBuffer ──────────────────────────────────────────────────────────────
13
+ export class RingBuffer {
14
+ capacity;
15
+ buf;
16
+ head = 0; // next write index
17
+ count = 0; // total written (capped at capacity)
18
+ constructor(capacity = 200) {
19
+ this.capacity = capacity;
20
+ this.buf = new Array(capacity);
21
+ }
22
+ push(entry) {
23
+ this.buf[this.head] = entry;
24
+ this.head = (this.head + 1) % this.capacity;
25
+ if (this.count < this.capacity)
26
+ this.count++;
27
+ }
28
+ /**
29
+ * Returns the last `n` entries (default: all).
30
+ * Returned in chronological order (oldest first).
31
+ */
32
+ dump(n) {
33
+ const take = Math.min(n ?? this.count, this.count);
34
+ const result = [];
35
+ // Walk backwards from head to collect `take` entries, then reverse.
36
+ let idx = (this.head - 1 + this.capacity) % this.capacity;
37
+ for (let i = 0; i < take; i++) {
38
+ const entry = this.buf[idx];
39
+ if (entry !== undefined)
40
+ result.push(entry);
41
+ idx = (idx - 1 + this.capacity) % this.capacity;
42
+ }
43
+ return result.reverse();
44
+ }
45
+ clear() {
46
+ this.buf.fill(undefined);
47
+ this.head = 0;
48
+ this.count = 0;
49
+ }
50
+ get size() {
51
+ return this.count;
52
+ }
53
+ }
54
+ // ─── RingBufferRegistry ──────────────────────────────────────────────────────
55
+ /**
56
+ * Global per-correlationId ring buffer registry.
57
+ * LRU: max 100 active correlation IDs.
58
+ */
59
+ export class RingBufferRegistry {
60
+ // Map preserves insertion order; we move-to-end on access (LRU).
61
+ buffers = new Map();
62
+ MAX_BUFFERS = 100;
63
+ getOrCreate(correlationId) {
64
+ const existing = this.buffers.get(correlationId);
65
+ if (existing) {
66
+ // Move to end (most-recently-used)
67
+ this.buffers.delete(correlationId);
68
+ this.buffers.set(correlationId, existing);
69
+ return existing;
70
+ }
71
+ if (this.buffers.size >= this.MAX_BUFFERS) {
72
+ this.evictLRU();
73
+ }
74
+ const buf = new RingBuffer();
75
+ this.buffers.set(correlationId, buf);
76
+ return buf;
77
+ }
78
+ get(correlationId) {
79
+ const buf = this.buffers.get(correlationId);
80
+ if (buf) {
81
+ // Move to end on read access
82
+ this.buffers.delete(correlationId);
83
+ this.buffers.set(correlationId, buf);
84
+ }
85
+ return buf;
86
+ }
87
+ evictLRU() {
88
+ // The first key in the Map is the least-recently-used
89
+ const firstKey = this.buffers.keys().next().value;
90
+ if (firstKey !== undefined) {
91
+ this.buffers.delete(firstKey);
92
+ }
93
+ }
94
+ }
95
+ // ─── Singleton ───────────────────────────────────────────────────────────────
96
+ export const ringBufferRegistry = new RingBufferRegistry();
97
+ /**
98
+ * Public API used by hazo_ui/test-harness and hazo_core.
99
+ * Returns the last `n` entries for the given correlationId (empty array if none).
100
+ */
101
+ export function getRingBuffer(correlationId, n) {
102
+ const buf = ringBufferRegistry.get(correlationId);
103
+ if (!buf)
104
+ return [];
105
+ return buf.dump(n);
106
+ }
107
+ //# sourceMappingURL=ring_buffer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ring_buffer.js","sourceRoot":"","sources":["../../src/lib/ring_buffer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAWH,gFAAgF;AAEhF,MAAM,OAAO,UAAU;IAKQ;IAJZ,GAAG,CAAqC;IACjD,IAAI,GAAG,CAAC,CAAC,CAAC,mBAAmB;IAC7B,KAAK,GAAG,CAAC,CAAC,CAAC,qCAAqC;IAExD,YAA6B,WAAW,GAAG;QAAd,aAAQ,GAAR,QAAQ,CAAM;QACzC,IAAI,CAAC,GAAG,GAAG,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;IACjC,CAAC;IAED,IAAI,CAAC,KAAsB;QACzB,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC5B,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC5C,IAAI,IAAI,CAAC,KAAK,GAAG,IAAI,CAAC,QAAQ;YAAE,IAAI,CAAC,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED;;;OAGG;IACH,IAAI,CAAC,CAAU;QACb,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QACnD,MAAM,MAAM,GAAsB,EAAE,CAAC;QAErC,oEAAoE;QACpE,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC1D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YAC5B,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClD,CAAC;QAED,OAAO,MAAM,CAAC,OAAO,EAAE,CAAC;IAC1B,CAAC;IAED,KAAK;QACH,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC;QACd,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI;QACN,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;CACF;AAED,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,OAAO,kBAAkB;IAC7B,iEAAiE;IAChD,OAAO,GAAG,IAAI,GAAG,EAAsB,CAAC;IACxC,WAAW,GAAG,GAAG,CAAC;IAEnC,WAAW,CAAC,aAAqB;QAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,mCAAmC;YACnC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;YAC1C,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YAC1C,IAAI,CAAC,QAAQ,EAAE,CAAC;QAClB,CAAC;QAED,MAAM,GAAG,GAAG,IAAI,UAAU,EAAE,CAAC;QAC7B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACrC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,aAAqB;QACvB,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;QAC5C,IAAI,GAAG,EAAE,CAAC;YACR,6BAA6B;YAC7B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;YACnC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,QAAQ;QACN,sDAAsD;QACtD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;QAClD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;IACH,CAAC;CACF;AAED,gFAAgF;AAEhF,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,kBAAkB,EAAE,CAAC;AAE3D;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,aAAqB,EACrB,CAAU;IAEV,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;IAClD,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC"}