@lssm/lib.observability 0.0.0-canary-20251120192244 → 0.0.0-canary-20251206160926

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 (52) hide show
  1. package/CHANGELOG.md +76 -1
  2. package/README.md +21 -0
  3. package/dist/anomaly/alert-manager.d.mts +20 -0
  4. package/dist/anomaly/alert-manager.mjs +1 -0
  5. package/dist/anomaly/anomaly-detector.d.mts +25 -0
  6. package/dist/anomaly/anomaly-detector.mjs +1 -0
  7. package/dist/anomaly/baseline-calculator.d.mts +25 -0
  8. package/dist/anomaly/baseline-calculator.mjs +1 -0
  9. package/dist/anomaly/root-cause-analyzer.d.mts +22 -0
  10. package/dist/anomaly/root-cause-analyzer.mjs +1 -0
  11. package/dist/index.d.mts +10 -2
  12. package/dist/index.mjs +1 -1
  13. package/dist/intent/aggregator.d.mts +59 -0
  14. package/dist/intent/aggregator.mjs +1 -0
  15. package/dist/intent/detector.d.mts +31 -0
  16. package/dist/intent/detector.mjs +1 -0
  17. package/dist/lifecycle/dist/index.mjs +1 -0
  18. package/dist/lifecycle/dist/types/axes.mjs +1 -0
  19. package/dist/lifecycle/dist/types/milestones.mjs +1 -0
  20. package/dist/lifecycle/dist/types/signals.mjs +1 -0
  21. package/dist/lifecycle/dist/types/stages.mjs +1 -0
  22. package/dist/lifecycle/dist/utils/formatters.mjs +1 -0
  23. package/dist/logging/index.d.mts +1 -2
  24. package/dist/logging/index.mjs +1 -2
  25. package/dist/metrics/index.d.mts +1 -2
  26. package/dist/metrics/index.mjs +1 -2
  27. package/dist/pipeline/evolution-pipeline.d.mts +39 -0
  28. package/dist/pipeline/evolution-pipeline.mjs +1 -0
  29. package/dist/pipeline/lifecycle-pipeline.d.mts +43 -0
  30. package/dist/pipeline/lifecycle-pipeline.mjs +1 -0
  31. package/dist/tracing/index.d.mts +1 -2
  32. package/dist/tracing/index.mjs +1 -2
  33. package/dist/tracing/middleware.d.mts +16 -3
  34. package/dist/tracing/middleware.mjs +1 -2
  35. package/package.json +19 -5
  36. package/.turbo/turbo-build.log +0 -29
  37. package/dist/logging/index.d.mts.map +0 -1
  38. package/dist/logging/index.mjs.map +0 -1
  39. package/dist/metrics/index.d.mts.map +0 -1
  40. package/dist/metrics/index.mjs.map +0 -1
  41. package/dist/tracing/index.d.mts.map +0 -1
  42. package/dist/tracing/index.mjs.map +0 -1
  43. package/dist/tracing/middleware.d.mts.map +0 -1
  44. package/dist/tracing/middleware.mjs.map +0 -1
  45. package/src/index.ts +0 -13
  46. package/src/logging/index.ts +0 -57
  47. package/src/metrics/index.ts +0 -54
  48. package/src/tracing/index.ts +0 -62
  49. package/src/tracing/middleware.ts +0 -36
  50. package/tsconfig.json +0 -10
  51. package/tsconfig.tsbuildinfo +0 -1
  52. package/tsdown.config.js +0 -6
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":["serviceName: string","entry: LogEntry"],"sources":["../../src/logging/index.ts"],"sourcesContent":["import { trace, context } from '@opentelemetry/api';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface LogEntry {\n level: LogLevel;\n message: string;\n [key: string]: unknown;\n}\n\nexport class Logger {\n constructor(private readonly serviceName: string) {}\n\n private log(\n level: LogLevel,\n message: string,\n meta: Record<string, unknown> = {}\n ) {\n const span = trace.getSpan(context.active());\n const traceId = span?.spanContext().traceId;\n const spanId = span?.spanContext().spanId;\n\n const entry: LogEntry = {\n timestamp: new Date().toISOString(),\n service: this.serviceName,\n level,\n message,\n traceId,\n spanId,\n ...meta,\n };\n\n // structured logging to stdout\n console.log(JSON.stringify(entry));\n }\n\n debug(message: string, meta?: Record<string, unknown>) {\n this.log('debug', message, meta);\n }\n\n info(message: string, meta?: Record<string, unknown>) {\n this.log('info', message, meta);\n }\n\n warn(message: string, meta?: Record<string, unknown>) {\n this.log('warn', message, meta);\n }\n\n error(message: string, meta?: Record<string, unknown>) {\n this.log('error', message, meta);\n }\n}\n\nexport const logger = new Logger(\n process.env.OTEL_SERVICE_NAME || 'unknown-service'\n);\n\n"],"mappings":"wDAUA,IAAa,EAAb,KAAoB,CAClB,YAAY,EAAsC,CAArB,KAAA,YAAA,EAE7B,IACE,EACA,EACA,EAAgC,EAAE,CAClC,CACA,IAAM,EAAO,EAAM,QAAQ,EAAQ,QAAQ,CAAC,CACtC,EAAU,GAAM,aAAa,CAAC,QAC9B,EAAS,GAAM,aAAa,CAAC,OAE7BC,EAAkB,CACtB,UAAW,IAAI,MAAM,CAAC,aAAa,CACnC,QAAS,KAAK,YACd,QACA,UACA,UACA,SACA,GAAG,EACJ,CAGD,QAAQ,IAAI,KAAK,UAAU,EAAM,CAAC,CAGpC,MAAM,EAAiB,EAAgC,CACrD,KAAK,IAAI,QAAS,EAAS,EAAK,CAGlC,KAAK,EAAiB,EAAgC,CACpD,KAAK,IAAI,OAAQ,EAAS,EAAK,CAGjC,KAAK,EAAiB,EAAgC,CACpD,KAAK,IAAI,OAAQ,EAAS,EAAK,CAGjC,MAAM,EAAiB,EAAgC,CACrD,KAAK,IAAI,QAAS,EAAS,EAAK,GAIpC,MAAa,EAAS,IAAI,EACxB,QAAQ,IAAI,mBAAqB,kBAClC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/metrics/index.ts"],"sourcesContent":[],"mappings":";;;;iBAUgB,QAAA,iBAA6C;iBAI7C,aAAA,0DAIb;iBAIa,mBAAA,0DAIb;AAhBa,iBAoBA,eAAA,CApBkD,IAAA,EAAA,MAAA,EAAA,WAAA,CAAA,EAAA,MAAA,EAAA,SAAA,CAAA,EAAA,MAAA,CAAA,EAwB/D,SAxB+D;AAIlD,cAwBH,eApBV,EAAA;EAIa,YAAA,SAAA,CA8Bf,mBAAA,CAAA,UAAA,CA1Be;EAIA,YAAA,WAAe,gCAInB;EAIC,eAAA,SAcZ,gCAAA;EAAA,gBAAA,WAAA,gCAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/metrics/index.ts"],"sourcesContent":["import {\n metrics,\n type Meter,\n type Counter,\n type Histogram,\n type UpDownCounter,\n} from '@opentelemetry/api';\n\nconst DEFAULT_METER_NAME = '@lssm/lib.observability';\n\nexport function getMeter(name: string = DEFAULT_METER_NAME): Meter {\n return metrics.getMeter(name);\n}\n\nexport function createCounter(\n name: string,\n description?: string,\n meterName?: string\n): Counter {\n return getMeter(meterName).createCounter(name, { description });\n}\n\nexport function createUpDownCounter(\n name: string,\n description?: string,\n meterName?: string\n): UpDownCounter {\n return getMeter(meterName).createUpDownCounter(name, { description });\n}\n\nexport function createHistogram(\n name: string,\n description?: string,\n meterName?: string\n): Histogram {\n return getMeter(meterName).createHistogram(name, { description });\n}\n\nexport const standardMetrics = {\n httpRequests: createCounter('http_requests_total', 'Total HTTP requests'),\n httpDuration: createHistogram(\n 'http_request_duration_seconds',\n 'HTTP request duration'\n ),\n operationErrors: createCounter(\n 'operation_errors_total',\n 'Total operation errors'\n ),\n workflowDuration: createHistogram(\n 'workflow_duration_seconds',\n 'Workflow execution duration'\n ),\n};\n\n"],"mappings":"6CAUA,SAAgB,EAAS,EAAe,0BAA2B,CACjE,OAAO,EAAQ,SAAS,EAAK,CAG/B,SAAgB,EACd,EACA,EACA,EACS,CACT,OAAO,EAAS,EAAU,CAAC,cAAc,EAAM,CAAE,cAAa,CAAC,CAGjE,SAAgB,EACd,EACA,EACA,EACe,CACf,OAAO,EAAS,EAAU,CAAC,oBAAoB,EAAM,CAAE,cAAa,CAAC,CAGvE,SAAgB,EACd,EACA,EACA,EACW,CACX,OAAO,EAAS,EAAU,CAAC,gBAAgB,EAAM,CAAE,cAAa,CAAC,CAGnE,MAAa,EAAkB,CAC7B,aAAc,EAAc,sBAAuB,sBAAsB,CACzE,aAAc,EACZ,gCACA,wBACD,CACD,gBAAiB,EACf,yBACA,yBACD,CACD,iBAAkB,EAChB,4BACA,8BACD,CACF"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.d.mts","names":[],"sources":["../../src/tracing/index.ts"],"sourcesContent":[],"mappings":";;;iBAUgB,SAAA,iBAA+C;iBAIzC,uCAET,SAAS,QAAQ,0BAE3B,QAAQ;AARK,iBA4BA,SA5B+C,CAAA,CAAM,CAAA,CAAA,IAAA,EAAA,MAAA,EAAA,EAAA,EAAA,CAAA,IAAA,EA8BxD,IA9BwD,EAAA,GA8B/C,CA9B+C,EAAA,UAAA,CAAA,EAAA,MAAA,CAAA,EAgClE,CAhCkE"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","names":[],"sources":["../../src/tracing/index.ts"],"sourcesContent":["import {\n trace,\n context,\n SpanStatusCode,\n type Span,\n type Tracer,\n} from '@opentelemetry/api';\n\nconst DEFAULT_TRACER_NAME = '@lssm/lib.observability';\n\nexport function getTracer(name: string = DEFAULT_TRACER_NAME): Tracer {\n return trace.getTracer(name);\n}\n\nexport async function traceAsync<T>(\n name: string,\n fn: (span: Span) => Promise<T>,\n tracerName?: string\n): Promise<T> {\n const tracer = getTracer(tracerName);\n return tracer.startActiveSpan(name, async (span) => {\n try {\n const result = await fn(span);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\nexport function traceSync<T>(\n name: string,\n fn: (span: Span) => T,\n tracerName?: string\n): T {\n const tracer = getTracer(tracerName);\n return tracer.startActiveSpan(name, (span) => {\n try {\n const result = fn(span);\n span.setStatus({ code: SpanStatusCode.OK });\n return result;\n } catch (error) {\n span.recordException(error as Error);\n span.setStatus({\n code: SpanStatusCode.ERROR,\n message: error instanceof Error ? error.message : String(error),\n });\n throw error;\n } finally {\n span.end();\n }\n });\n}\n\n"],"mappings":"4EAUA,SAAgB,EAAU,EAAe,0BAA6B,CACpE,OAAO,EAAM,UAAU,EAAK,CAG9B,eAAsB,EACpB,EACA,EACA,EACY,CAEZ,OADe,EAAU,EAAW,CACtB,gBAAgB,EAAM,KAAO,IAAS,CAClD,GAAI,CACF,IAAM,EAAS,MAAM,EAAG,EAAK,CAE7B,OADA,EAAK,UAAU,CAAE,KAAM,EAAe,GAAI,CAAC,CACpC,QACA,EAAO,CAMd,MALA,EAAK,gBAAgB,EAAe,CACpC,EAAK,UAAU,CACb,KAAM,EAAe,MACrB,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAChE,CAAC,CACI,SACE,CACR,EAAK,KAAK,GAEZ,CAGJ,SAAgB,EACd,EACA,EACA,EACG,CAEH,OADe,EAAU,EAAW,CACtB,gBAAgB,EAAO,GAAS,CAC5C,GAAI,CACF,IAAM,EAAS,EAAG,EAAK,CAEvB,OADA,EAAK,UAAU,CAAE,KAAM,EAAe,GAAI,CAAC,CACpC,QACA,EAAO,CAMd,MALA,EAAK,gBAAgB,EAAe,CACpC,EAAK,UAAU,CACb,KAAM,EAAe,MACrB,QAAS,aAAiB,MAAQ,EAAM,QAAU,OAAO,EAAM,CAChE,CAAC,CACI,SACE,CACR,EAAK,KAAK,GAEZ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.d.mts","names":[],"sources":["../../src/tracing/middleware.ts"],"sourcesContent":[],"mappings":";iBAGgB,uBAAA,CAAA,SACK,qBAAqB,QAAQ,cAAS,QAAA"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"middleware.mjs","names":[],"sources":["../../src/tracing/middleware.ts"],"sourcesContent":["import { traceAsync } from './index';\nimport { standardMetrics } from '../metrics';\n\nexport function createTracingMiddleware() {\n return async (req: Request, next: () => Promise<Response>) => {\n const method = req.method;\n const url = new URL(req.url);\n const path = url.pathname;\n\n standardMetrics.httpRequests.add(1, { method, path });\n const startTime = performance.now();\n\n return traceAsync(`HTTP ${method} ${path}`, async (span) => {\n span.setAttribute('http.method', method);\n span.setAttribute('http.url', req.url);\n\n try {\n const response = await next();\n span.setAttribute('http.status_code', response.status);\n\n const duration = (performance.now() - startTime) / 1000;\n standardMetrics.httpDuration.record(duration, {\n method,\n path,\n status: response.status.toString(),\n });\n\n return response;\n } catch (error) {\n standardMetrics.operationErrors.add(1, { method, path });\n throw error;\n }\n });\n };\n}\n\n"],"mappings":"gGAGA,SAAgB,GAA0B,CACxC,OAAO,MAAO,EAAc,IAAkC,CAC5D,IAAM,EAAS,EAAI,OAEb,EADM,IAAI,IAAI,EAAI,IAAI,CACX,SAEjB,EAAgB,aAAa,IAAI,EAAG,CAAE,SAAQ,OAAM,CAAC,CACrD,IAAM,EAAY,YAAY,KAAK,CAEnC,OAAO,EAAW,QAAQ,EAAO,GAAG,IAAQ,KAAO,IAAS,CAC1D,EAAK,aAAa,cAAe,EAAO,CACxC,EAAK,aAAa,WAAY,EAAI,IAAI,CAEtC,GAAI,CACF,IAAM,EAAW,MAAM,GAAM,CAC7B,EAAK,aAAa,mBAAoB,EAAS,OAAO,CAEtD,IAAM,GAAY,YAAY,KAAK,CAAG,GAAa,IAOnD,OANA,EAAgB,aAAa,OAAO,EAAU,CAC5C,SACA,OACA,OAAQ,EAAS,OAAO,UAAU,CACnC,CAAC,CAEK,QACA,EAAO,CAEd,MADA,EAAgB,gBAAgB,IAAI,EAAG,CAAE,SAAQ,OAAM,CAAC,CAClD,IAER"}
package/src/index.ts DELETED
@@ -1,13 +0,0 @@
1
- export { getTracer, traceAsync, traceSync } from './tracing';
2
- export {
3
- getMeter,
4
- createCounter,
5
- createUpDownCounter,
6
- createHistogram,
7
- standardMetrics,
8
- } from './metrics';
9
- export { Logger, logger } from './logging';
10
- export { createTracingMiddleware } from './tracing/middleware';
11
-
12
- export type { LogLevel, LogEntry } from './logging';
13
-
@@ -1,57 +0,0 @@
1
- import { trace, context } from '@opentelemetry/api';
2
-
3
- export type LogLevel = 'debug' | 'info' | 'warn' | 'error';
4
-
5
- export interface LogEntry {
6
- level: LogLevel;
7
- message: string;
8
- [key: string]: unknown;
9
- }
10
-
11
- export class Logger {
12
- constructor(private readonly serviceName: string) {}
13
-
14
- private log(
15
- level: LogLevel,
16
- message: string,
17
- meta: Record<string, unknown> = {}
18
- ) {
19
- const span = trace.getSpan(context.active());
20
- const traceId = span?.spanContext().traceId;
21
- const spanId = span?.spanContext().spanId;
22
-
23
- const entry: LogEntry = {
24
- timestamp: new Date().toISOString(),
25
- service: this.serviceName,
26
- level,
27
- message,
28
- traceId,
29
- spanId,
30
- ...meta,
31
- };
32
-
33
- // structured logging to stdout
34
- console.log(JSON.stringify(entry));
35
- }
36
-
37
- debug(message: string, meta?: Record<string, unknown>) {
38
- this.log('debug', message, meta);
39
- }
40
-
41
- info(message: string, meta?: Record<string, unknown>) {
42
- this.log('info', message, meta);
43
- }
44
-
45
- warn(message: string, meta?: Record<string, unknown>) {
46
- this.log('warn', message, meta);
47
- }
48
-
49
- error(message: string, meta?: Record<string, unknown>) {
50
- this.log('error', message, meta);
51
- }
52
- }
53
-
54
- export const logger = new Logger(
55
- process.env.OTEL_SERVICE_NAME || 'unknown-service'
56
- );
57
-
@@ -1,54 +0,0 @@
1
- import {
2
- metrics,
3
- type Meter,
4
- type Counter,
5
- type Histogram,
6
- type UpDownCounter,
7
- } from '@opentelemetry/api';
8
-
9
- const DEFAULT_METER_NAME = '@lssm/lib.observability';
10
-
11
- export function getMeter(name: string = DEFAULT_METER_NAME): Meter {
12
- return metrics.getMeter(name);
13
- }
14
-
15
- export function createCounter(
16
- name: string,
17
- description?: string,
18
- meterName?: string
19
- ): Counter {
20
- return getMeter(meterName).createCounter(name, { description });
21
- }
22
-
23
- export function createUpDownCounter(
24
- name: string,
25
- description?: string,
26
- meterName?: string
27
- ): UpDownCounter {
28
- return getMeter(meterName).createUpDownCounter(name, { description });
29
- }
30
-
31
- export function createHistogram(
32
- name: string,
33
- description?: string,
34
- meterName?: string
35
- ): Histogram {
36
- return getMeter(meterName).createHistogram(name, { description });
37
- }
38
-
39
- export const standardMetrics = {
40
- httpRequests: createCounter('http_requests_total', 'Total HTTP requests'),
41
- httpDuration: createHistogram(
42
- 'http_request_duration_seconds',
43
- 'HTTP request duration'
44
- ),
45
- operationErrors: createCounter(
46
- 'operation_errors_total',
47
- 'Total operation errors'
48
- ),
49
- workflowDuration: createHistogram(
50
- 'workflow_duration_seconds',
51
- 'Workflow execution duration'
52
- ),
53
- };
54
-
@@ -1,62 +0,0 @@
1
- import {
2
- trace,
3
- context,
4
- SpanStatusCode,
5
- type Span,
6
- type Tracer,
7
- } from '@opentelemetry/api';
8
-
9
- const DEFAULT_TRACER_NAME = '@lssm/lib.observability';
10
-
11
- export function getTracer(name: string = DEFAULT_TRACER_NAME): Tracer {
12
- return trace.getTracer(name);
13
- }
14
-
15
- export async function traceAsync<T>(
16
- name: string,
17
- fn: (span: Span) => Promise<T>,
18
- tracerName?: string
19
- ): Promise<T> {
20
- const tracer = getTracer(tracerName);
21
- return tracer.startActiveSpan(name, async (span) => {
22
- try {
23
- const result = await fn(span);
24
- span.setStatus({ code: SpanStatusCode.OK });
25
- return result;
26
- } catch (error) {
27
- span.recordException(error as Error);
28
- span.setStatus({
29
- code: SpanStatusCode.ERROR,
30
- message: error instanceof Error ? error.message : String(error),
31
- });
32
- throw error;
33
- } finally {
34
- span.end();
35
- }
36
- });
37
- }
38
-
39
- export function traceSync<T>(
40
- name: string,
41
- fn: (span: Span) => T,
42
- tracerName?: string
43
- ): T {
44
- const tracer = getTracer(tracerName);
45
- return tracer.startActiveSpan(name, (span) => {
46
- try {
47
- const result = fn(span);
48
- span.setStatus({ code: SpanStatusCode.OK });
49
- return result;
50
- } catch (error) {
51
- span.recordException(error as Error);
52
- span.setStatus({
53
- code: SpanStatusCode.ERROR,
54
- message: error instanceof Error ? error.message : String(error),
55
- });
56
- throw error;
57
- } finally {
58
- span.end();
59
- }
60
- });
61
- }
62
-
@@ -1,36 +0,0 @@
1
- import { traceAsync } from './index';
2
- import { standardMetrics } from '../metrics';
3
-
4
- export function createTracingMiddleware() {
5
- return async (req: Request, next: () => Promise<Response>) => {
6
- const method = req.method;
7
- const url = new URL(req.url);
8
- const path = url.pathname;
9
-
10
- standardMetrics.httpRequests.add(1, { method, path });
11
- const startTime = performance.now();
12
-
13
- return traceAsync(`HTTP ${method} ${path}`, async (span) => {
14
- span.setAttribute('http.method', method);
15
- span.setAttribute('http.url', req.url);
16
-
17
- try {
18
- const response = await next();
19
- span.setAttribute('http.status_code', response.status);
20
-
21
- const duration = (performance.now() - startTime) / 1000;
22
- standardMetrics.httpDuration.record(duration, {
23
- method,
24
- path,
25
- status: response.status.toString(),
26
- });
27
-
28
- return response;
29
- } catch (error) {
30
- standardMetrics.operationErrors.add(1, { method, path });
31
- throw error;
32
- }
33
- });
34
- };
35
- }
36
-
package/tsconfig.json DELETED
@@ -1,10 +0,0 @@
1
- {
2
- "extends": "@lssm/tool.typescript/react-library.json",
3
- "include": ["src"],
4
- "exclude": ["node_modules"],
5
- "compilerOptions": {
6
- "rootDir": "src",
7
- "outDir": "dist"
8
- }
9
- }
10
-