@mnemom/aip-otel-exporter 0.1.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.
Files changed (66) hide show
  1. package/README.md +172 -0
  2. package/dashboards/README.md +92 -0
  3. package/dashboards/datadog-aip-overview.json +311 -0
  4. package/dashboards/grafana-aip-detail.json +403 -0
  5. package/dashboards/grafana-aip-overview.json +431 -0
  6. package/dist/attributes.d.ts +70 -0
  7. package/dist/attributes.d.ts.map +1 -0
  8. package/dist/attributes.js +81 -0
  9. package/dist/attributes.js.map +1 -0
  10. package/dist/auto/aap-instrumentation.d.ts +23 -0
  11. package/dist/auto/aap-instrumentation.d.ts.map +1 -0
  12. package/dist/auto/aap-instrumentation.js +112 -0
  13. package/dist/auto/aap-instrumentation.js.map +1 -0
  14. package/dist/auto/aip-instrumentation.d.ts +22 -0
  15. package/dist/auto/aip-instrumentation.d.ts.map +1 -0
  16. package/dist/auto/aip-instrumentation.js +87 -0
  17. package/dist/auto/aip-instrumentation.js.map +1 -0
  18. package/dist/auto/index.d.ts +20 -0
  19. package/dist/auto/index.d.ts.map +1 -0
  20. package/dist/auto/index.js +22 -0
  21. package/dist/auto/index.js.map +1 -0
  22. package/dist/index.d.ts +33 -0
  23. package/dist/index.d.ts.map +1 -0
  24. package/dist/index.js +58 -0
  25. package/dist/index.js.map +1 -0
  26. package/dist/manual/record-coherence.d.ts +12 -0
  27. package/dist/manual/record-coherence.d.ts.map +1 -0
  28. package/dist/manual/record-coherence.js +21 -0
  29. package/dist/manual/record-coherence.js.map +1 -0
  30. package/dist/manual/record-drift.d.ts +14 -0
  31. package/dist/manual/record-drift.d.ts.map +1 -0
  32. package/dist/manual/record-drift.js +48 -0
  33. package/dist/manual/record-drift.js.map +1 -0
  34. package/dist/manual/record-integrity-check.d.ts +19 -0
  35. package/dist/manual/record-integrity-check.d.ts.map +1 -0
  36. package/dist/manual/record-integrity-check.js +92 -0
  37. package/dist/manual/record-integrity-check.js.map +1 -0
  38. package/dist/manual/record-verification.d.ts +14 -0
  39. package/dist/manual/record-verification.d.ts.map +1 -0
  40. package/dist/manual/record-verification.js +40 -0
  41. package/dist/manual/record-verification.js.map +1 -0
  42. package/dist/manual/span-builder.d.ts +28 -0
  43. package/dist/manual/span-builder.d.ts.map +1 -0
  44. package/dist/manual/span-builder.js +42 -0
  45. package/dist/manual/span-builder.js.map +1 -0
  46. package/dist/metrics/integrity-metrics.d.ts +44 -0
  47. package/dist/metrics/integrity-metrics.d.ts.map +1 -0
  48. package/dist/metrics/integrity-metrics.js +128 -0
  49. package/dist/metrics/integrity-metrics.js.map +1 -0
  50. package/dist/types.d.ts +205 -0
  51. package/dist/types.d.ts.map +1 -0
  52. package/dist/types.js +8 -0
  53. package/dist/types.js.map +1 -0
  54. package/dist/workers/index.d.ts +8 -0
  55. package/dist/workers/index.d.ts.map +1 -0
  56. package/dist/workers/index.js +7 -0
  57. package/dist/workers/index.js.map +1 -0
  58. package/dist/workers/otlp-serializer.d.ts +90 -0
  59. package/dist/workers/otlp-serializer.d.ts.map +1 -0
  60. package/dist/workers/otlp-serializer.js +133 -0
  61. package/dist/workers/otlp-serializer.js.map +1 -0
  62. package/dist/workers/workers-exporter.d.ts +26 -0
  63. package/dist/workers/workers-exporter.d.ts.map +1 -0
  64. package/dist/workers/workers-exporter.js +228 -0
  65. package/dist/workers/workers-exporter.js.map +1 -0
  66. package/package.json +83 -0
@@ -0,0 +1,90 @@
1
+ /**
2
+ * OTLP JSON serialization utilities for Cloudflare Workers.
3
+ *
4
+ * Builds OTLP-compatible JSON payloads directly without any dependency on the
5
+ * OpenTelemetry SDK. Uses only `crypto.getRandomValues` (available in CF
6
+ * Workers) for ID generation and `Date.now()` for timestamps.
7
+ */
8
+ export type OTLPAttributeValue = {
9
+ stringValue: string;
10
+ } | {
11
+ intValue: string;
12
+ } | {
13
+ doubleValue: number;
14
+ } | {
15
+ boolValue: boolean;
16
+ } | {
17
+ arrayValue: {
18
+ values: OTLPAttributeValue[];
19
+ };
20
+ };
21
+ export interface OTLPAttribute {
22
+ key: string;
23
+ value: OTLPAttributeValue;
24
+ }
25
+ export interface OTLPEvent {
26
+ name: string;
27
+ timeUnixNano: string;
28
+ attributes: OTLPAttribute[];
29
+ }
30
+ export interface OTLPSpan {
31
+ traceId: string;
32
+ spanId: string;
33
+ parentSpanId?: string;
34
+ name: string;
35
+ kind: number;
36
+ startTimeUnixNano: string;
37
+ endTimeUnixNano: string;
38
+ attributes: OTLPAttribute[];
39
+ events: OTLPEvent[];
40
+ status: {
41
+ code: number;
42
+ };
43
+ }
44
+ export interface OTLPExportPayload {
45
+ resourceSpans: [
46
+ {
47
+ resource: {
48
+ attributes: OTLPAttribute[];
49
+ };
50
+ scopeSpans: [
51
+ {
52
+ scope: {
53
+ name: string;
54
+ version: string;
55
+ };
56
+ spans: OTLPSpan[];
57
+ }
58
+ ];
59
+ }
60
+ ];
61
+ }
62
+ /** Generate a 32-character hex trace ID. */
63
+ export declare function generateTraceId(): string;
64
+ /** Generate a 16-character hex span ID. */
65
+ export declare function generateSpanId(): string;
66
+ /**
67
+ * Convert a single JS value to the OTLP attribute wire format.
68
+ * Returns `null` for undefined / null values so callers can filter them out.
69
+ */
70
+ export declare function toOTLPAttribute(key: string, value: unknown): OTLPAttribute | null;
71
+ /**
72
+ * Batch-convert a record of key/value pairs to OTLP attributes,
73
+ * filtering out any whose value is undefined or null.
74
+ */
75
+ export declare function toOTLPAttributes(attrs: Record<string, unknown>): OTLPAttribute[];
76
+ /**
77
+ * Create a fully populated OTLPSpan with generated IDs and the current timestamp.
78
+ *
79
+ * The span kind is always 1 (INTERNAL) and the status code is 1 (OK).
80
+ */
81
+ export declare function createOTLPSpan(name: string, attributes: Record<string, unknown>, events?: Array<{
82
+ name: string;
83
+ attributes: Record<string, unknown>;
84
+ }>): OTLPSpan;
85
+ /**
86
+ * Wrap an array of OTLPSpan objects in the full OTLP ResourceSpans envelope
87
+ * and return the JSON string ready to POST.
88
+ */
89
+ export declare function serializeExportPayload(spans: OTLPSpan[], serviceName: string): string;
90
+ //# sourceMappingURL=otlp-serializer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-serializer.d.ts","sourceRoot":"","sources":["../../src/workers/otlp-serializer.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAMH,MAAM,MAAM,kBAAkB,GAC1B;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GACvB;IAAE,QAAQ,EAAE,MAAM,CAAA;CAAE,GACpB;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,GACvB;IAAE,SAAS,EAAE,OAAO,CAAA;CAAE,GACtB;IAAE,UAAU,EAAE;QAAE,MAAM,EAAE,kBAAkB,EAAE,CAAA;KAAE,CAAA;CAAE,CAAC;AAErD,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,kBAAkB,CAAC;CAC3B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,aAAa,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,iBAAiB,EAAE,MAAM,CAAC;IAC1B,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,aAAa,EAAE,CAAC;IAC5B,MAAM,EAAE,SAAS,EAAE,CAAC;IACpB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE;QACb;YACE,QAAQ,EAAE;gBAAE,UAAU,EAAE,aAAa,EAAE,CAAA;aAAE,CAAC;YAC1C,UAAU,EAAE;gBACV;oBACE,KAAK,EAAE;wBAAE,IAAI,EAAE,MAAM,CAAC;wBAAC,OAAO,EAAE,MAAM,CAAA;qBAAE,CAAC;oBACzC,KAAK,EAAE,QAAQ,EAAE,CAAC;iBACnB;aACF,CAAC;SACH;KACF,CAAC;CACH;AAcD,4CAA4C;AAC5C,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,2CAA2C;AAC3C,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,GAAG,EAAE,MAAM,EACX,KAAK,EAAE,OAAO,GACb,aAAa,GAAG,IAAI,CA0BtB;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC7B,aAAa,EAAE,CAOjB;AAMD;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACnC,MAAM,CAAC,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,CAAC,GACpE,QAAQ,CAyBV;AAMD;;;GAGG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,QAAQ,EAAE,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM,CAqBR"}
@@ -0,0 +1,133 @@
1
+ /**
2
+ * OTLP JSON serialization utilities for Cloudflare Workers.
3
+ *
4
+ * Builds OTLP-compatible JSON payloads directly without any dependency on the
5
+ * OpenTelemetry SDK. Uses only `crypto.getRandomValues` (available in CF
6
+ * Workers) for ID generation and `Date.now()` for timestamps.
7
+ */
8
+ // ---------------------------------------------------------------------------
9
+ // ID generation (CF Workers-compatible)
10
+ // ---------------------------------------------------------------------------
11
+ function hexFromBytes(bytes) {
12
+ let hex = "";
13
+ for (let i = 0; i < bytes.length; i++) {
14
+ hex += bytes[i].toString(16).padStart(2, "0");
15
+ }
16
+ return hex;
17
+ }
18
+ /** Generate a 32-character hex trace ID. */
19
+ export function generateTraceId() {
20
+ return hexFromBytes(crypto.getRandomValues(new Uint8Array(16)));
21
+ }
22
+ /** Generate a 16-character hex span ID. */
23
+ export function generateSpanId() {
24
+ return hexFromBytes(crypto.getRandomValues(new Uint8Array(8)));
25
+ }
26
+ // ---------------------------------------------------------------------------
27
+ // Attribute conversion
28
+ // ---------------------------------------------------------------------------
29
+ /**
30
+ * Convert a single JS value to the OTLP attribute wire format.
31
+ * Returns `null` for undefined / null values so callers can filter them out.
32
+ */
33
+ export function toOTLPAttribute(key, value) {
34
+ if (value === undefined || value === null)
35
+ return null;
36
+ if (typeof value === "string") {
37
+ return { key, value: { stringValue: value } };
38
+ }
39
+ if (typeof value === "boolean") {
40
+ return { key, value: { boolValue: value } };
41
+ }
42
+ if (typeof value === "number") {
43
+ if (Number.isInteger(value)) {
44
+ return { key, value: { intValue: String(value) } };
45
+ }
46
+ return { key, value: { doubleValue: value } };
47
+ }
48
+ if (Array.isArray(value)) {
49
+ const values = [];
50
+ for (const item of value) {
51
+ const attr = toOTLPAttribute("", item);
52
+ if (attr)
53
+ values.push(attr.value);
54
+ }
55
+ return { key, value: { arrayValue: { values } } };
56
+ }
57
+ // Fallback: coerce to string
58
+ return { key, value: { stringValue: String(value) } };
59
+ }
60
+ /**
61
+ * Batch-convert a record of key/value pairs to OTLP attributes,
62
+ * filtering out any whose value is undefined or null.
63
+ */
64
+ export function toOTLPAttributes(attrs) {
65
+ const result = [];
66
+ for (const [key, value] of Object.entries(attrs)) {
67
+ const attr = toOTLPAttribute(key, value);
68
+ if (attr)
69
+ result.push(attr);
70
+ }
71
+ return result;
72
+ }
73
+ // ---------------------------------------------------------------------------
74
+ // Span construction
75
+ // ---------------------------------------------------------------------------
76
+ /**
77
+ * Create a fully populated OTLPSpan with generated IDs and the current timestamp.
78
+ *
79
+ * The span kind is always 1 (INTERNAL) and the status code is 1 (OK).
80
+ */
81
+ export function createOTLPSpan(name, attributes, events) {
82
+ const now = String(Date.now() * 1_000_000);
83
+ const otlpEvents = [];
84
+ if (events) {
85
+ for (const event of events) {
86
+ otlpEvents.push({
87
+ name: event.name,
88
+ timeUnixNano: now,
89
+ attributes: toOTLPAttributes(event.attributes),
90
+ });
91
+ }
92
+ }
93
+ return {
94
+ traceId: generateTraceId(),
95
+ spanId: generateSpanId(),
96
+ name,
97
+ kind: 1, // INTERNAL
98
+ startTimeUnixNano: now,
99
+ endTimeUnixNano: now,
100
+ attributes: toOTLPAttributes(attributes),
101
+ events: otlpEvents,
102
+ status: { code: 1 }, // OK
103
+ };
104
+ }
105
+ // ---------------------------------------------------------------------------
106
+ // Export payload serialization
107
+ // ---------------------------------------------------------------------------
108
+ /**
109
+ * Wrap an array of OTLPSpan objects in the full OTLP ResourceSpans envelope
110
+ * and return the JSON string ready to POST.
111
+ */
112
+ export function serializeExportPayload(spans, serviceName) {
113
+ const payload = {
114
+ resourceSpans: [
115
+ {
116
+ resource: {
117
+ attributes: toOTLPAttributes({ "service.name": serviceName }),
118
+ },
119
+ scopeSpans: [
120
+ {
121
+ scope: {
122
+ name: "@mnemom/aip-otel-exporter",
123
+ version: "0.1.0",
124
+ },
125
+ spans,
126
+ },
127
+ ],
128
+ },
129
+ ],
130
+ };
131
+ return JSON.stringify(payload);
132
+ }
133
+ //# sourceMappingURL=otlp-serializer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"otlp-serializer.js","sourceRoot":"","sources":["../../src/workers/otlp-serializer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Cloudflare Workers OTLP exporter for AIP/AAP telemetry.
3
+ *
4
+ * Implements the `WorkersOTelExporter` interface from types.ts using only
5
+ * `fetch()` and the OTLP JSON serializer -- zero dependency on the OTel SDK.
6
+ *
7
+ * Usage:
8
+ * ```ts
9
+ * import { createWorkersExporter } from "@mnemom/aip-otel-exporter/workers";
10
+ *
11
+ * const exporter = createWorkersExporter({
12
+ * endpoint: "https://otel-collector.example.com/v1/traces",
13
+ * authorization: "Bearer <token>",
14
+ * });
15
+ *
16
+ * exporter.recordIntegrityCheck(signal);
17
+ * ctx.waitUntil(exporter.flush());
18
+ * ```
19
+ */
20
+ import type { WorkersExporterConfig, WorkersOTelExporter } from "../types.js";
21
+ /**
22
+ * Create a CF Workers-compatible OTLP exporter that buffers spans in memory
23
+ * and flushes them via `fetch()`.
24
+ */
25
+ export declare function createWorkersExporter(config: WorkersExporterConfig): WorkersOTelExporter;
26
+ //# sourceMappingURL=workers-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-exporter.d.ts","sourceRoot":"","sources":["../../src/workers/workers-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,mBAAmB,EAKpB,MAAM,aAAa,CAAC;AAwErB;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,qBAAqB,GAC5B,mBAAmB,CAiOrB"}
@@ -0,0 +1,228 @@
1
+ /**
2
+ * Cloudflare Workers OTLP exporter for AIP/AAP telemetry.
3
+ *
4
+ * Implements the `WorkersOTelExporter` interface from types.ts using only
5
+ * `fetch()` and the OTLP JSON serializer -- zero dependency on the OTel SDK.
6
+ *
7
+ * Usage:
8
+ * ```ts
9
+ * import { createWorkersExporter } from "@mnemom/aip-otel-exporter/workers";
10
+ *
11
+ * const exporter = createWorkersExporter({
12
+ * endpoint: "https://otel-collector.example.com/v1/traces",
13
+ * authorization: "Bearer <token>",
14
+ * });
15
+ *
16
+ * exporter.recordIntegrityCheck(signal);
17
+ * ctx.waitUntil(exporter.flush());
18
+ * ```
19
+ */
20
+ import {
21
+ // Span & event names
22
+ SPAN_AIP_INTEGRITY_CHECK, SPAN_AAP_VERIFY_TRACE, SPAN_AAP_CHECK_COHERENCE, SPAN_AAP_DETECT_DRIFT, EVENT_AIP_CONCERN, EVENT_AIP_DRIFT_ALERT, EVENT_AAP_VIOLATION, EVENT_AAP_DRIFT_ALERT,
23
+ // AIP Integrity Check attributes
24
+ AIP_INTEGRITY_CHECKPOINT_ID, AIP_INTEGRITY_VERDICT, AIP_INTEGRITY_AGENT_ID, AIP_INTEGRITY_CARD_ID, AIP_INTEGRITY_SESSION_ID, AIP_INTEGRITY_THINKING_HASH, AIP_INTEGRITY_PROCEED, AIP_INTEGRITY_RECOMMENDED_ACTION, AIP_INTEGRITY_CONCERNS_COUNT, AIP_INTEGRITY_ANALYSIS_MODEL, AIP_INTEGRITY_ANALYSIS_DURATION_MS, AIP_INTEGRITY_THINKING_TOKENS, AIP_INTEGRITY_TRUNCATED, AIP_INTEGRITY_EXTRACTION_CONFIDENCE,
25
+ // Conscience context attributes
26
+ AIP_CONSCIENCE_CONSULTATION_DEPTH, AIP_CONSCIENCE_VALUES_CHECKED_COUNT, AIP_CONSCIENCE_CONFLICTS_COUNT,
27
+ // Window summary attributes
28
+ AIP_WINDOW_SIZE, AIP_WINDOW_INTEGRITY_RATIO, AIP_WINDOW_DRIFT_ALERT_ACTIVE,
29
+ // GenAI SIG forward-compat aliases
30
+ GEN_AI_EVALUATION_VERDICT, GEN_AI_EVALUATION_SCORE,
31
+ // AAP Verification attributes
32
+ AAP_VERIFICATION_RESULT, AAP_VERIFICATION_SIMILARITY_SCORE, AAP_VERIFICATION_VIOLATIONS_COUNT, AAP_VERIFICATION_WARNINGS_COUNT, AAP_VERIFICATION_TRACE_ID, AAP_VERIFICATION_CARD_ID, AAP_VERIFICATION_DURATION_MS, AAP_VERIFICATION_CHECKS_PERFORMED,
33
+ // AAP Coherence attributes
34
+ AAP_COHERENCE_COMPATIBLE, AAP_COHERENCE_SCORE, AAP_COHERENCE_PROCEED, AAP_COHERENCE_MATCHED_COUNT, AAP_COHERENCE_CONFLICT_COUNT,
35
+ // AAP Drift attributes
36
+ AAP_DRIFT_ALERTS_COUNT, AAP_DRIFT_TRACES_ANALYZED, } from "../attributes.js";
37
+ import { createOTLPSpan, serializeExportPayload } from "./otlp-serializer.js";
38
+ // ---------------------------------------------------------------------------
39
+ // Factory
40
+ // ---------------------------------------------------------------------------
41
+ /**
42
+ * Create a CF Workers-compatible OTLP exporter that buffers spans in memory
43
+ * and flushes them via `fetch()`.
44
+ */
45
+ export function createWorkersExporter(config) {
46
+ const serviceName = config.serviceName ?? "aip-otel-exporter";
47
+ const maxBatchSize = config.maxBatchSize ?? 100;
48
+ let buffer = [];
49
+ // -------------------------------------------------------------------
50
+ // Internal helpers
51
+ // -------------------------------------------------------------------
52
+ function pushSpan(span) {
53
+ buffer.push(span);
54
+ if (buffer.length >= maxBatchSize) {
55
+ // Fire-and-forget auto-flush; callers should still use ctx.waitUntil(flush())
56
+ void flush();
57
+ }
58
+ }
59
+ // -------------------------------------------------------------------
60
+ // flush()
61
+ // -------------------------------------------------------------------
62
+ async function flush() {
63
+ if (buffer.length === 0)
64
+ return;
65
+ const spans = buffer;
66
+ buffer = [];
67
+ const body = serializeExportPayload(spans, serviceName);
68
+ const headers = {
69
+ "Content-Type": "application/json",
70
+ ...config.headers,
71
+ };
72
+ if (config.authorization) {
73
+ headers["Authorization"] = config.authorization;
74
+ }
75
+ await fetch(config.endpoint, {
76
+ method: "POST",
77
+ headers,
78
+ body,
79
+ });
80
+ }
81
+ // -------------------------------------------------------------------
82
+ // recordIntegrityCheck
83
+ // -------------------------------------------------------------------
84
+ function recordIntegrityCheck(signal) {
85
+ const cp = signal?.checkpoint;
86
+ const meta = cp?.analysis_metadata;
87
+ const conscience = cp?.conscience_context;
88
+ const win = signal?.window_summary;
89
+ const attributes = {
90
+ // Checkpoint
91
+ [AIP_INTEGRITY_CHECKPOINT_ID]: cp?.checkpoint_id,
92
+ [AIP_INTEGRITY_VERDICT]: cp?.verdict,
93
+ [AIP_INTEGRITY_AGENT_ID]: cp?.agent_id,
94
+ [AIP_INTEGRITY_CARD_ID]: cp?.card_id,
95
+ [AIP_INTEGRITY_SESSION_ID]: cp?.session_id,
96
+ [AIP_INTEGRITY_THINKING_HASH]: cp?.thinking_block_hash,
97
+ // Signal
98
+ [AIP_INTEGRITY_PROCEED]: signal?.proceed,
99
+ [AIP_INTEGRITY_RECOMMENDED_ACTION]: signal?.recommended_action,
100
+ [AIP_INTEGRITY_CONCERNS_COUNT]: cp?.concerns?.length,
101
+ // Analysis metadata
102
+ [AIP_INTEGRITY_ANALYSIS_MODEL]: meta?.analysis_model,
103
+ [AIP_INTEGRITY_ANALYSIS_DURATION_MS]: meta?.analysis_duration_ms,
104
+ [AIP_INTEGRITY_THINKING_TOKENS]: meta?.thinking_tokens_original,
105
+ [AIP_INTEGRITY_TRUNCATED]: meta?.truncated,
106
+ [AIP_INTEGRITY_EXTRACTION_CONFIDENCE]: meta?.extraction_confidence,
107
+ // Conscience context
108
+ [AIP_CONSCIENCE_CONSULTATION_DEPTH]: conscience?.consultation_depth,
109
+ [AIP_CONSCIENCE_VALUES_CHECKED_COUNT]: conscience?.values_checked?.length,
110
+ [AIP_CONSCIENCE_CONFLICTS_COUNT]: conscience?.conflicts?.length,
111
+ // Window summary
112
+ [AIP_WINDOW_SIZE]: win?.size,
113
+ [AIP_WINDOW_INTEGRITY_RATIO]: win?.integrity_ratio,
114
+ [AIP_WINDOW_DRIFT_ALERT_ACTIVE]: win?.drift_alert_active,
115
+ // GenAI SIG forward-compat aliases
116
+ [GEN_AI_EVALUATION_VERDICT]: cp?.verdict,
117
+ [GEN_AI_EVALUATION_SCORE]: win?.integrity_ratio,
118
+ };
119
+ const events = [];
120
+ // One event per concern
121
+ if (cp?.concerns) {
122
+ for (const concern of cp.concerns) {
123
+ events.push({
124
+ name: EVENT_AIP_CONCERN,
125
+ attributes: {
126
+ category: concern.category,
127
+ severity: concern.severity,
128
+ description: concern.description,
129
+ },
130
+ });
131
+ }
132
+ }
133
+ // Drift alert event when drift is active
134
+ if (win?.drift_alert_active) {
135
+ events.push({
136
+ name: EVENT_AIP_DRIFT_ALERT,
137
+ attributes: {},
138
+ });
139
+ }
140
+ pushSpan(createOTLPSpan(SPAN_AIP_INTEGRITY_CHECK, attributes, events));
141
+ }
142
+ // -------------------------------------------------------------------
143
+ // recordVerification
144
+ // -------------------------------------------------------------------
145
+ function recordVerification(result) {
146
+ const meta = result?.verification_metadata;
147
+ const attributes = {
148
+ [AAP_VERIFICATION_RESULT]: result?.verified,
149
+ [AAP_VERIFICATION_SIMILARITY_SCORE]: result?.similarity_score,
150
+ [AAP_VERIFICATION_VIOLATIONS_COUNT]: result?.violations?.length,
151
+ [AAP_VERIFICATION_WARNINGS_COUNT]: result?.warnings?.length,
152
+ [AAP_VERIFICATION_TRACE_ID]: result?.trace_id,
153
+ [AAP_VERIFICATION_CARD_ID]: result?.card_id,
154
+ [AAP_VERIFICATION_DURATION_MS]: meta?.duration_ms,
155
+ [AAP_VERIFICATION_CHECKS_PERFORMED]: meta?.checks_performed?.join(", "),
156
+ };
157
+ const events = [];
158
+ if (result?.violations) {
159
+ for (const violation of result.violations) {
160
+ events.push({
161
+ name: EVENT_AAP_VIOLATION,
162
+ attributes: {
163
+ type: violation.type,
164
+ severity: violation.severity,
165
+ description: violation.description,
166
+ },
167
+ });
168
+ }
169
+ }
170
+ pushSpan(createOTLPSpan(SPAN_AAP_VERIFY_TRACE, attributes, events));
171
+ }
172
+ // -------------------------------------------------------------------
173
+ // recordCoherence
174
+ // -------------------------------------------------------------------
175
+ function recordCoherence(result) {
176
+ const attributes = {
177
+ [AAP_COHERENCE_COMPATIBLE]: result?.compatible,
178
+ [AAP_COHERENCE_SCORE]: result?.score,
179
+ [AAP_COHERENCE_PROCEED]: result?.proceed,
180
+ [AAP_COHERENCE_MATCHED_COUNT]: result?.value_alignment?.matched?.length,
181
+ [AAP_COHERENCE_CONFLICT_COUNT]: result?.value_alignment?.conflicts?.length,
182
+ };
183
+ pushSpan(createOTLPSpan(SPAN_AAP_CHECK_COHERENCE, attributes));
184
+ }
185
+ // -------------------------------------------------------------------
186
+ // recordDrift
187
+ // -------------------------------------------------------------------
188
+ function recordDrift(alerts, tracesAnalyzed) {
189
+ const attributes = {
190
+ [AAP_DRIFT_ALERTS_COUNT]: alerts?.length,
191
+ [AAP_DRIFT_TRACES_ANALYZED]: tracesAnalyzed,
192
+ };
193
+ const events = [];
194
+ if (alerts) {
195
+ for (const alert of alerts) {
196
+ const eventAttrs = {};
197
+ if (alert?.alert_type != null)
198
+ eventAttrs.alert_type = alert.alert_type;
199
+ if (alert?.agent_id != null)
200
+ eventAttrs.agent_id = alert.agent_id;
201
+ if (alert?.card_id != null)
202
+ eventAttrs.card_id = alert.card_id;
203
+ if (alert?.analysis?.similarity_score != null)
204
+ eventAttrs.similarity_score = alert.analysis.similarity_score;
205
+ if (alert?.analysis?.drift_direction != null)
206
+ eventAttrs.drift_direction = alert.analysis.drift_direction;
207
+ if (alert?.recommendation != null)
208
+ eventAttrs.recommendation = alert.recommendation;
209
+ events.push({
210
+ name: EVENT_AAP_DRIFT_ALERT,
211
+ attributes: eventAttrs,
212
+ });
213
+ }
214
+ }
215
+ pushSpan(createOTLPSpan(SPAN_AAP_DETECT_DRIFT, attributes, events));
216
+ }
217
+ // -------------------------------------------------------------------
218
+ // Public interface
219
+ // -------------------------------------------------------------------
220
+ return {
221
+ recordIntegrityCheck,
222
+ recordVerification,
223
+ recordCoherence,
224
+ recordDrift,
225
+ flush,
226
+ };
227
+ }
228
+ //# sourceMappingURL=workers-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workers-exporter.js","sourceRoot":"","sources":["../../src/workers/workers-exporter.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,83 @@
1
+ {
2
+ "name": "@mnemom/aip-otel-exporter",
3
+ "version": "0.1.0",
4
+ "description": "OpenTelemetry exporter for AIP integrity checkpoints and AAP verification results",
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "import": "./dist/index.js",
11
+ "types": "./dist/index.d.ts"
12
+ },
13
+ "./auto": {
14
+ "import": "./dist/auto/index.js",
15
+ "types": "./dist/auto/index.d.ts"
16
+ },
17
+ "./workers": {
18
+ "import": "./dist/workers/index.js",
19
+ "types": "./dist/workers/index.d.ts"
20
+ }
21
+ },
22
+ "files": [
23
+ "dist",
24
+ "dashboards",
25
+ "LICENSE"
26
+ ],
27
+ "scripts": {
28
+ "build": "tsc",
29
+ "test": "vitest run",
30
+ "test:watch": "vitest",
31
+ "test:coverage": "vitest run --coverage",
32
+ "bench": "vitest bench",
33
+ "lint": "tsc --noEmit",
34
+ "prepublishOnly": "npm run build"
35
+ },
36
+ "engines": {
37
+ "node": ">=18.0.0"
38
+ },
39
+ "peerDependencies": {
40
+ "@opentelemetry/api": ">=1.4.0"
41
+ },
42
+ "peerDependenciesMeta": {
43
+ "@opentelemetry/api": {
44
+ "optional": true
45
+ }
46
+ },
47
+ "devDependencies": {
48
+ "@opentelemetry/api": "^1.9.0",
49
+ "@opentelemetry/context-async-hooks": "^2.5.1",
50
+ "@opentelemetry/resources": "^1.30.0",
51
+ "@opentelemetry/sdk-metrics": "^1.30.0",
52
+ "@opentelemetry/sdk-trace-base": "^1.30.0",
53
+ "@types/node": "^25.2.3",
54
+ "typescript": "^5.7.0",
55
+ "vitest": "^3.0.0"
56
+ },
57
+ "keywords": [
58
+ "opentelemetry",
59
+ "otel",
60
+ "aip",
61
+ "aap",
62
+ "integrity",
63
+ "alignment",
64
+ "observability",
65
+ "langfuse",
66
+ "arize",
67
+ "datadog"
68
+ ],
69
+ "author": "Mnemom.ai",
70
+ "license": "Apache-2.0",
71
+ "homepage": "https://github.com/mnemom/aip-otel-exporter#readme",
72
+ "bugs": {
73
+ "url": "https://github.com/mnemom/aip-otel-exporter/issues"
74
+ },
75
+ "publishConfig": {
76
+ "access": "public"
77
+ },
78
+ "repository": {
79
+ "type": "git",
80
+ "url": "https://github.com/mnemom/aip-otel-exporter.git",
81
+ "directory": "packages/typescript"
82
+ }
83
+ }