@agentlensai/core 0.2.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 (62) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/constants.test.d.ts +2 -0
  3. package/dist/__tests__/constants.test.d.ts.map +1 -0
  4. package/dist/__tests__/constants.test.js +17 -0
  5. package/dist/__tests__/constants.test.js.map +1 -0
  6. package/dist/__tests__/events.test.d.ts +2 -0
  7. package/dist/__tests__/events.test.d.ts.map +1 -0
  8. package/dist/__tests__/events.test.js +295 -0
  9. package/dist/__tests__/events.test.js.map +1 -0
  10. package/dist/__tests__/hash.test.d.ts +2 -0
  11. package/dist/__tests__/hash.test.d.ts.map +1 -0
  12. package/dist/__tests__/hash.test.js +316 -0
  13. package/dist/__tests__/hash.test.js.map +1 -0
  14. package/dist/__tests__/index.test.d.ts +2 -0
  15. package/dist/__tests__/index.test.d.ts.map +1 -0
  16. package/dist/__tests__/index.test.js +35 -0
  17. package/dist/__tests__/index.test.js.map +1 -0
  18. package/dist/__tests__/schemas.test.d.ts +2 -0
  19. package/dist/__tests__/schemas.test.d.ts.map +1 -0
  20. package/dist/__tests__/schemas.test.js +420 -0
  21. package/dist/__tests__/schemas.test.js.map +1 -0
  22. package/dist/__tests__/session-query-types.test.d.ts +2 -0
  23. package/dist/__tests__/session-query-types.test.d.ts.map +1 -0
  24. package/dist/__tests__/session-query-types.test.js +230 -0
  25. package/dist/__tests__/session-query-types.test.js.map +1 -0
  26. package/dist/__tests__/types.test.d.ts +2 -0
  27. package/dist/__tests__/types.test.d.ts.map +1 -0
  28. package/dist/__tests__/types.test.js +236 -0
  29. package/dist/__tests__/types.test.js.map +1 -0
  30. package/dist/alert-schemas.d.ts +99 -0
  31. package/dist/alert-schemas.d.ts.map +1 -0
  32. package/dist/alert-schemas.js +51 -0
  33. package/dist/alert-schemas.js.map +1 -0
  34. package/dist/constants.d.ts +12 -0
  35. package/dist/constants.d.ts.map +1 -0
  36. package/dist/constants.js +12 -0
  37. package/dist/constants.js.map +1 -0
  38. package/dist/events.d.ts +41 -0
  39. package/dist/events.d.ts.map +1 -0
  40. package/dist/events.js +73 -0
  41. package/dist/events.js.map +1 -0
  42. package/dist/hash.d.ts +61 -0
  43. package/dist/hash.d.ts.map +1 -0
  44. package/dist/hash.js +81 -0
  45. package/dist/hash.js.map +1 -0
  46. package/dist/index.d.ts +11 -0
  47. package/dist/index.d.ts.map +1 -0
  48. package/dist/index.js +18 -0
  49. package/dist/index.js.map +1 -0
  50. package/dist/schemas.d.ts +301 -0
  51. package/dist/schemas.d.ts.map +1 -0
  52. package/dist/schemas.js +171 -0
  53. package/dist/schemas.js.map +1 -0
  54. package/dist/storage.d.ts +121 -0
  55. package/dist/storage.d.ts.map +1 -0
  56. package/dist/storage.js +9 -0
  57. package/dist/storage.js.map +1 -0
  58. package/dist/types.d.ts +239 -0
  59. package/dist/types.d.ts.map +1 -0
  60. package/dist/types.js +37 -0
  61. package/dist/types.js.map +1 -0
  62. package/package.json +50 -0
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @agentlens/core — Shared Constants
3
+ */
4
+ /** Default number of results per page */
5
+ export declare const DEFAULT_PAGE_SIZE = 50;
6
+ /** Maximum number of results per page */
7
+ export declare const MAX_PAGE_SIZE = 500;
8
+ /** Maximum payload size in UTF-8 bytes (10KB). Measured with Buffer.byteLength(). */
9
+ export declare const MAX_PAYLOAD_SIZE = 10240;
10
+ /** Default retention period in days */
11
+ export declare const DEFAULT_RETENTION_DAYS = 90;
12
+ //# sourceMappingURL=constants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,yCAAyC;AACzC,eAAO,MAAM,aAAa,MAAM,CAAC;AAEjC,qFAAqF;AACrF,eAAO,MAAM,gBAAgB,QAAQ,CAAC;AAEtC,uCAAuC;AACvC,eAAO,MAAM,sBAAsB,KAAK,CAAC"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @agentlens/core — Shared Constants
3
+ */
4
+ /** Default number of results per page */
5
+ export const DEFAULT_PAGE_SIZE = 50;
6
+ /** Maximum number of results per page */
7
+ export const MAX_PAGE_SIZE = 500;
8
+ /** Maximum payload size in UTF-8 bytes (10KB). Measured with Buffer.byteLength(). */
9
+ export const MAX_PAYLOAD_SIZE = 10240;
10
+ /** Default retention period in days */
11
+ export const DEFAULT_RETENTION_DAYS = 90;
12
+ //# sourceMappingURL=constants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,yCAAyC;AACzC,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAEpC,yCAAyC;AACzC,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,CAAC;AAEjC,qFAAqF;AACrF,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC;AAEtC,uCAAuC;AACvC,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC"}
@@ -0,0 +1,41 @@
1
+ import type { AgentLensEvent, EventType, EventSeverity, EventPayload } from './types.js';
2
+ /**
3
+ * Options for creating an event
4
+ */
5
+ export interface CreateEventOptions {
6
+ /** Session this event belongs to */
7
+ sessionId: string;
8
+ /** Agent that produced this event */
9
+ agentId: string;
10
+ /** Event type */
11
+ eventType: EventType;
12
+ /** Event payload */
13
+ payload: EventPayload;
14
+ /** Severity level (defaults to 'info') */
15
+ severity?: EventSeverity;
16
+ /** Arbitrary metadata */
17
+ metadata?: Record<string, unknown>;
18
+ /** Hash of the previous event in the session chain (null for first event) */
19
+ prevHash?: string | null;
20
+ /** Optional client-provided timestamp (defaults to now) */
21
+ timestamp?: string;
22
+ }
23
+ /**
24
+ * Create a fully-formed AgentLensEvent with generated ULID id,
25
+ * ISO timestamp, default severity, and computed hash.
26
+ *
27
+ * @param options - Event creation options
28
+ * @returns A complete AgentLensEvent ready for persistence
29
+ */
30
+ export declare function createEvent(options: CreateEventOptions): AgentLensEvent;
31
+ /**
32
+ * Truncate a payload if its JSON serialization exceeds MAX_PAYLOAD_SIZE.
33
+ *
34
+ * When truncated, the payload is replaced with a summary object containing
35
+ * a `_truncated: true` flag and the original size.
36
+ *
37
+ * @param payload - The event payload to potentially truncate
38
+ * @returns The original payload or a truncated version
39
+ */
40
+ export declare function truncatePayload(payload: EventPayload): EventPayload;
41
+ //# sourceMappingURL=events.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.d.ts","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAIzF;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,oCAAoC;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,iBAAiB;IACjB,SAAS,EAAE,SAAS,CAAC;IACrB,oBAAoB;IACpB,OAAO,EAAE,YAAY,CAAC;IACtB,0CAA0C;IAC1C,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,yBAAyB;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,6EAA6E;IAC7E,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,kBAAkB,GAAG,cAAc,CAkCvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,GAAG,YAAY,CAgBnE"}
package/dist/events.js ADDED
@@ -0,0 +1,73 @@
1
+ /**
2
+ * @agentlens/core — Event Creation Helpers
3
+ *
4
+ * Factory functions for creating events with proper defaults.
5
+ */
6
+ import { ulid } from 'ulid';
7
+ import { computeEventHash } from './hash.js';
8
+ import { MAX_PAYLOAD_SIZE } from './constants.js';
9
+ /**
10
+ * Create a fully-formed AgentLensEvent with generated ULID id,
11
+ * ISO timestamp, default severity, and computed hash.
12
+ *
13
+ * @param options - Event creation options
14
+ * @returns A complete AgentLensEvent ready for persistence
15
+ */
16
+ export function createEvent(options) {
17
+ const id = ulid();
18
+ const timestamp = options.timestamp ?? new Date().toISOString();
19
+ const severity = options.severity ?? 'info';
20
+ const metadata = options.metadata ?? {};
21
+ const prevHash = options.prevHash ?? null;
22
+ // Truncate payload if needed
23
+ const payload = truncatePayload(options.payload);
24
+ const hash = computeEventHash({
25
+ id,
26
+ timestamp,
27
+ sessionId: options.sessionId,
28
+ agentId: options.agentId,
29
+ eventType: options.eventType,
30
+ severity,
31
+ payload,
32
+ metadata,
33
+ prevHash,
34
+ });
35
+ return {
36
+ id,
37
+ timestamp,
38
+ sessionId: options.sessionId,
39
+ agentId: options.agentId,
40
+ eventType: options.eventType,
41
+ severity,
42
+ payload,
43
+ metadata,
44
+ prevHash,
45
+ hash,
46
+ };
47
+ }
48
+ /**
49
+ * Truncate a payload if its JSON serialization exceeds MAX_PAYLOAD_SIZE.
50
+ *
51
+ * When truncated, the payload is replaced with a summary object containing
52
+ * a `_truncated: true` flag and the original size.
53
+ *
54
+ * @param payload - The event payload to potentially truncate
55
+ * @returns The original payload or a truncated version
56
+ */
57
+ export function truncatePayload(payload) {
58
+ const serialized = JSON.stringify(payload);
59
+ const byteLength = Buffer.byteLength(serialized, 'utf8');
60
+ if (byteLength <= MAX_PAYLOAD_SIZE) {
61
+ return payload;
62
+ }
63
+ return {
64
+ type: '_truncated',
65
+ data: {
66
+ _truncated: true,
67
+ originalSize: byteLength,
68
+ maxSize: MAX_PAYLOAD_SIZE,
69
+ preview: serialized.slice(0, 200) + '...',
70
+ },
71
+ };
72
+ }
73
+ //# sourceMappingURL=events.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"events.js","sourceRoot":"","sources":["../src/events.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAE5B,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAwBlD;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,OAA2B;IACrD,MAAM,EAAE,GAAG,IAAI,EAAE,CAAC;IAClB,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,EAAE,CAAC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,IAAI,CAAC;IAE1C,6BAA6B;IAC7B,MAAM,OAAO,GAAG,eAAe,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,IAAI,GAAG,gBAAgB,CAAC;QAC5B,EAAE;QACF,SAAS;QACT,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,QAAQ;KACT,CAAC,CAAC;IAEH,OAAO;QACL,EAAE;QACF,SAAS;QACT,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,QAAQ;QACR,IAAI;KACL,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,OAAqB;IACnD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IAC3C,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACzD,IAAI,UAAU,IAAI,gBAAgB,EAAE,CAAC;QACnC,OAAO,OAAO,CAAC;IACjB,CAAC;IAED,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,IAAI,EAAE;YACJ,UAAU,EAAE,IAAI;YAChB,YAAY,EAAE,UAAU;YACxB,OAAO,EAAE,gBAAgB;YACzB,OAAO,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,KAAK;SAC1C;KACc,CAAC;AACpB,CAAC"}
package/dist/hash.d.ts ADDED
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Hash format version. Bump when changing hash input structure
3
+ * to distinguish old vs new hashes.
4
+ */
5
+ export declare const HASH_VERSION = 2;
6
+ /**
7
+ * Input type for computing event hash.
8
+ * Includes all fields that contribute to the hash.
9
+ */
10
+ export interface HashableEvent {
11
+ id: string;
12
+ timestamp: string;
13
+ sessionId: string;
14
+ agentId: string;
15
+ eventType: string;
16
+ severity: string;
17
+ payload: unknown;
18
+ metadata: Record<string, unknown>;
19
+ prevHash: string | null;
20
+ }
21
+ /**
22
+ * Compute a deterministic SHA-256 hash for an event.
23
+ *
24
+ * The hash is computed from a canonical JSON representation of the
25
+ * event's key fields plus the previous event's hash (hash chain).
26
+ *
27
+ * @param event - The event fields to hash
28
+ * @returns Hex-encoded SHA-256 hash string
29
+ */
30
+ export declare function computeEventHash(event: HashableEvent): string;
31
+ /**
32
+ * Interface for events in chain verification.
33
+ * Must include all hashable fields so hashes can be recomputed.
34
+ */
35
+ export interface ChainEvent extends HashableEvent {
36
+ hash: string;
37
+ }
38
+ /**
39
+ * Detailed result from chain verification.
40
+ */
41
+ export interface ChainVerificationResult {
42
+ valid: boolean;
43
+ /** Index of the first event that failed verification, or -1 if valid */
44
+ failedAtIndex: number;
45
+ /** Human-readable reason for the failure, or null if valid */
46
+ reason: string | null;
47
+ }
48
+ /**
49
+ * Verify the integrity of a hash chain.
50
+ *
51
+ * For each event:
52
+ * 1. Recomputes the hash from event contents and verifies it matches event.hash
53
+ * 2. Checks that prevHash matches the previous event's hash
54
+ *
55
+ * The first event in a chain should have prevHash = null.
56
+ *
57
+ * @param events - Ordered array of full events to verify
58
+ * @returns ChainVerificationResult with details on any failure
59
+ */
60
+ export declare function verifyChain(events: ChainEvent[]): ChainVerificationResult;
61
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAOA;;;GAGG;AACH,eAAO,MAAM,YAAY,IAAI,CAAC;AAE9B;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,aAAa,GAAG,MAAM,CAc7D;AAED;;;GAGG;AACH,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,KAAK,EAAE,OAAO,CAAC;IACf,wEAAwE;IACxE,aAAa,EAAE,MAAM,CAAC;IACtB,8DAA8D;IAC9D,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;CACvB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,uBAAuB,CAoCzE"}
package/dist/hash.js ADDED
@@ -0,0 +1,81 @@
1
+ /**
2
+ * @agentlens/core — Hash Chain Utilities
3
+ *
4
+ * Cryptographic hash chain for tamper evidence per Architecture §4.3
5
+ */
6
+ import { createHash } from 'node:crypto';
7
+ /**
8
+ * Hash format version. Bump when changing hash input structure
9
+ * to distinguish old vs new hashes.
10
+ */
11
+ export const HASH_VERSION = 2;
12
+ /**
13
+ * Compute a deterministic SHA-256 hash for an event.
14
+ *
15
+ * The hash is computed from a canonical JSON representation of the
16
+ * event's key fields plus the previous event's hash (hash chain).
17
+ *
18
+ * @param event - The event fields to hash
19
+ * @returns Hex-encoded SHA-256 hash string
20
+ */
21
+ export function computeEventHash(event) {
22
+ const canonical = JSON.stringify({
23
+ v: HASH_VERSION,
24
+ id: event.id,
25
+ timestamp: event.timestamp,
26
+ sessionId: event.sessionId,
27
+ agentId: event.agentId,
28
+ eventType: event.eventType,
29
+ severity: event.severity,
30
+ payload: event.payload,
31
+ metadata: event.metadata,
32
+ prevHash: event.prevHash,
33
+ });
34
+ return createHash('sha256').update(canonical).digest('hex');
35
+ }
36
+ /**
37
+ * Verify the integrity of a hash chain.
38
+ *
39
+ * For each event:
40
+ * 1. Recomputes the hash from event contents and verifies it matches event.hash
41
+ * 2. Checks that prevHash matches the previous event's hash
42
+ *
43
+ * The first event in a chain should have prevHash = null.
44
+ *
45
+ * @param events - Ordered array of full events to verify
46
+ * @returns ChainVerificationResult with details on any failure
47
+ */
48
+ export function verifyChain(events) {
49
+ if (events.length === 0) {
50
+ return { valid: true, failedAtIndex: -1, reason: null };
51
+ }
52
+ // First event should have prevHash = null
53
+ if (events[0].prevHash !== null) {
54
+ return {
55
+ valid: false,
56
+ failedAtIndex: 0,
57
+ reason: 'First event must have prevHash = null',
58
+ };
59
+ }
60
+ for (let i = 0; i < events.length; i++) {
61
+ // Recompute hash from contents
62
+ const recomputed = computeEventHash(events[i]);
63
+ if (recomputed !== events[i].hash) {
64
+ return {
65
+ valid: false,
66
+ failedAtIndex: i,
67
+ reason: `Event ${i} hash mismatch: expected ${recomputed}, got ${events[i].hash}`,
68
+ };
69
+ }
70
+ // Verify prevHash chain continuity (skip first event, already checked prevHash === null)
71
+ if (i > 0 && events[i].prevHash !== events[i - 1].hash) {
72
+ return {
73
+ valid: false,
74
+ failedAtIndex: i,
75
+ reason: `Event ${i} prevHash does not match previous event's hash`,
76
+ };
77
+ }
78
+ }
79
+ return { valid: true, failedAtIndex: -1, reason: null };
80
+ }
81
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sourceRoot":"","sources":["../src/hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC;AAkB9B;;;;;;;;GAQG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAoB;IACnD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;QAC/B,CAAC,EAAE,YAAY;QACf,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,SAAS,EAAE,KAAK,CAAC,SAAS;QAC1B,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,KAAK,CAAC,OAAO;QACtB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC,CAAC;IACH,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9D,CAAC;AAqBD;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,WAAW,CAAC,MAAoB;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;IAC1D,CAAC;IAED,0CAA0C;IAC1C,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAChC,OAAO;YACL,KAAK,EAAE,KAAK;YACZ,aAAa,EAAE,CAAC;YAChB,MAAM,EAAE,uCAAuC;SAChD,CAAC;IACJ,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACvC,+BAA+B;QAC/B,MAAM,UAAU,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QAC/C,IAAI,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClC,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,aAAa,EAAE,CAAC;gBAChB,MAAM,EAAE,SAAS,CAAC,4BAA4B,UAAU,SAAS,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE;aAClF,CAAC;QACJ,CAAC;QAED,yFAAyF;QACzF,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACvD,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,aAAa,EAAE,CAAC;gBAChB,MAAM,EAAE,SAAS,CAAC,gDAAgD;aACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAED,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * @agentlens/core — Shared types, validation schemas, and utilities
3
+ */
4
+ export * from './types.js';
5
+ export * from './storage.js';
6
+ export * from './schemas.js';
7
+ export * from './hash.js';
8
+ export * from './events.js';
9
+ export * from './constants.js';
10
+ export * from './alert-schemas.js';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,cAAc,YAAY,CAAC;AAG3B,cAAc,cAAc,CAAC;AAG7B,cAAc,cAAc,CAAC;AAG7B,cAAc,WAAW,CAAC;AAG1B,cAAc,aAAa,CAAC;AAG5B,cAAc,gBAAgB,CAAC;AAG/B,cAAc,oBAAoB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @agentlens/core — Shared types, validation schemas, and utilities
3
+ */
4
+ // Re-export all types
5
+ export * from './types.js';
6
+ // Re-export storage interface
7
+ export * from './storage.js';
8
+ // Re-export schemas
9
+ export * from './schemas.js';
10
+ // Re-export hash chain utilities
11
+ export * from './hash.js';
12
+ // Re-export event creation helpers
13
+ export * from './events.js';
14
+ // Re-export constants
15
+ export * from './constants.js';
16
+ // Re-export alert schemas
17
+ export * from './alert-schemas.js';
18
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,sBAAsB;AACtB,cAAc,YAAY,CAAC;AAE3B,8BAA8B;AAC9B,cAAc,cAAc,CAAC;AAE7B,oBAAoB;AACpB,cAAc,cAAc,CAAC;AAE7B,iCAAiC;AACjC,cAAc,WAAW,CAAC;AAE1B,mCAAmC;AACnC,cAAc,aAAa,CAAC;AAE5B,sBAAsB;AACtB,cAAc,gBAAgB,CAAC;AAE/B,0BAA0B;AAC1B,cAAc,oBAAoB,CAAC"}
@@ -0,0 +1,301 @@
1
+ /**
2
+ * @agentlens/core — Zod Validation Schemas
3
+ *
4
+ * Runtime validation schemas for all API inputs per Architecture §4.2
5
+ */
6
+ import { z } from 'zod';
7
+ /**
8
+ * Schema for validating event types
9
+ */
10
+ export declare const eventTypeSchema: z.ZodEnum<["session_started", "session_ended", "tool_call", "tool_response", "tool_error", "approval_requested", "approval_granted", "approval_denied", "approval_expired", "form_submitted", "form_completed", "form_expired", "cost_tracked", "alert_triggered", "alert_resolved", "custom"]>;
11
+ /**
12
+ * Schema for validating severity levels
13
+ */
14
+ export declare const severitySchema: z.ZodEnum<["debug", "info", "warn", "error", "critical"]>;
15
+ export declare const toolCallPayloadSchema: z.ZodObject<{
16
+ toolName: z.ZodString;
17
+ callId: z.ZodString;
18
+ arguments: z.ZodRecord<z.ZodString, z.ZodUnknown>;
19
+ serverName: z.ZodOptional<z.ZodString>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ arguments: Record<string, unknown>;
22
+ toolName: string;
23
+ callId: string;
24
+ serverName?: string | undefined;
25
+ }, {
26
+ arguments: Record<string, unknown>;
27
+ toolName: string;
28
+ callId: string;
29
+ serverName?: string | undefined;
30
+ }>;
31
+ export declare const toolResponsePayloadSchema: z.ZodObject<{
32
+ callId: z.ZodString;
33
+ toolName: z.ZodString;
34
+ result: z.ZodUnknown;
35
+ durationMs: z.ZodNumber;
36
+ }, "strip", z.ZodTypeAny, {
37
+ toolName: string;
38
+ callId: string;
39
+ durationMs: number;
40
+ result?: unknown;
41
+ }, {
42
+ toolName: string;
43
+ callId: string;
44
+ durationMs: number;
45
+ result?: unknown;
46
+ }>;
47
+ export declare const toolErrorPayloadSchema: z.ZodObject<{
48
+ callId: z.ZodString;
49
+ toolName: z.ZodString;
50
+ error: z.ZodString;
51
+ errorCode: z.ZodOptional<z.ZodString>;
52
+ durationMs: z.ZodNumber;
53
+ }, "strip", z.ZodTypeAny, {
54
+ error: string;
55
+ toolName: string;
56
+ callId: string;
57
+ durationMs: number;
58
+ errorCode?: string | undefined;
59
+ }, {
60
+ error: string;
61
+ toolName: string;
62
+ callId: string;
63
+ durationMs: number;
64
+ errorCode?: string | undefined;
65
+ }>;
66
+ export declare const sessionStartedPayloadSchema: z.ZodObject<{
67
+ agentName: z.ZodOptional<z.ZodString>;
68
+ agentVersion: z.ZodOptional<z.ZodString>;
69
+ mcpClientInfo: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
70
+ tags: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
71
+ }, "strip", z.ZodTypeAny, {
72
+ agentName?: string | undefined;
73
+ agentVersion?: string | undefined;
74
+ mcpClientInfo?: Record<string, unknown> | undefined;
75
+ tags?: string[] | undefined;
76
+ }, {
77
+ agentName?: string | undefined;
78
+ agentVersion?: string | undefined;
79
+ mcpClientInfo?: Record<string, unknown> | undefined;
80
+ tags?: string[] | undefined;
81
+ }>;
82
+ export declare const sessionEndedPayloadSchema: z.ZodObject<{
83
+ reason: z.ZodEnum<["completed", "error", "timeout", "manual"]>;
84
+ summary: z.ZodOptional<z.ZodString>;
85
+ totalToolCalls: z.ZodOptional<z.ZodNumber>;
86
+ totalDurationMs: z.ZodOptional<z.ZodNumber>;
87
+ }, "strip", z.ZodTypeAny, {
88
+ reason: "timeout" | "completed" | "error" | "manual";
89
+ summary?: string | undefined;
90
+ totalToolCalls?: number | undefined;
91
+ totalDurationMs?: number | undefined;
92
+ }, {
93
+ reason: "timeout" | "completed" | "error" | "manual";
94
+ summary?: string | undefined;
95
+ totalToolCalls?: number | undefined;
96
+ totalDurationMs?: number | undefined;
97
+ }>;
98
+ export declare const approvalRequestedPayloadSchema: z.ZodObject<{
99
+ requestId: z.ZodString;
100
+ action: z.ZodString;
101
+ params: z.ZodRecord<z.ZodString, z.ZodUnknown>;
102
+ urgency: z.ZodString;
103
+ }, "strip", z.ZodTypeAny, {
104
+ params: Record<string, unknown>;
105
+ requestId: string;
106
+ action: string;
107
+ urgency: string;
108
+ }, {
109
+ params: Record<string, unknown>;
110
+ requestId: string;
111
+ action: string;
112
+ urgency: string;
113
+ }>;
114
+ export declare const approvalDecisionPayloadSchema: z.ZodObject<{
115
+ requestId: z.ZodString;
116
+ action: z.ZodString;
117
+ decidedBy: z.ZodString;
118
+ reason: z.ZodOptional<z.ZodString>;
119
+ }, "strip", z.ZodTypeAny, {
120
+ requestId: string;
121
+ action: string;
122
+ decidedBy: string;
123
+ reason?: string | undefined;
124
+ }, {
125
+ requestId: string;
126
+ action: string;
127
+ decidedBy: string;
128
+ reason?: string | undefined;
129
+ }>;
130
+ export declare const formSubmittedPayloadSchema: z.ZodObject<{
131
+ submissionId: z.ZodString;
132
+ formId: z.ZodString;
133
+ formName: z.ZodOptional<z.ZodString>;
134
+ fieldCount: z.ZodNumber;
135
+ }, "strip", z.ZodTypeAny, {
136
+ submissionId: string;
137
+ formId: string;
138
+ fieldCount: number;
139
+ formName?: string | undefined;
140
+ }, {
141
+ submissionId: string;
142
+ formId: string;
143
+ fieldCount: number;
144
+ formName?: string | undefined;
145
+ }>;
146
+ export declare const formCompletedPayloadSchema: z.ZodObject<{
147
+ submissionId: z.ZodString;
148
+ formId: z.ZodString;
149
+ completedBy: z.ZodString;
150
+ durationMs: z.ZodNumber;
151
+ }, "strip", z.ZodTypeAny, {
152
+ durationMs: number;
153
+ submissionId: string;
154
+ formId: string;
155
+ completedBy: string;
156
+ }, {
157
+ durationMs: number;
158
+ submissionId: string;
159
+ formId: string;
160
+ completedBy: string;
161
+ }>;
162
+ export declare const formExpiredPayloadSchema: z.ZodObject<{
163
+ submissionId: z.ZodString;
164
+ formId: z.ZodString;
165
+ expiredAfterMs: z.ZodNumber;
166
+ }, "strip", z.ZodTypeAny, {
167
+ submissionId: string;
168
+ formId: string;
169
+ expiredAfterMs: number;
170
+ }, {
171
+ submissionId: string;
172
+ formId: string;
173
+ expiredAfterMs: number;
174
+ }>;
175
+ export declare const costTrackedPayloadSchema: z.ZodObject<{
176
+ provider: z.ZodString;
177
+ model: z.ZodString;
178
+ inputTokens: z.ZodNumber;
179
+ outputTokens: z.ZodNumber;
180
+ totalTokens: z.ZodNumber;
181
+ costUsd: z.ZodNumber;
182
+ trigger: z.ZodOptional<z.ZodString>;
183
+ }, "strip", z.ZodTypeAny, {
184
+ provider: string;
185
+ model: string;
186
+ inputTokens: number;
187
+ outputTokens: number;
188
+ totalTokens: number;
189
+ costUsd: number;
190
+ trigger?: string | undefined;
191
+ }, {
192
+ provider: string;
193
+ model: string;
194
+ inputTokens: number;
195
+ outputTokens: number;
196
+ totalTokens: number;
197
+ costUsd: number;
198
+ trigger?: string | undefined;
199
+ }>;
200
+ export declare const alertTriggeredPayloadSchema: z.ZodObject<{
201
+ alertRuleId: z.ZodString;
202
+ alertName: z.ZodString;
203
+ condition: z.ZodString;
204
+ currentValue: z.ZodNumber;
205
+ threshold: z.ZodNumber;
206
+ message: z.ZodString;
207
+ }, "strip", z.ZodTypeAny, {
208
+ message: string;
209
+ alertRuleId: string;
210
+ alertName: string;
211
+ condition: string;
212
+ currentValue: number;
213
+ threshold: number;
214
+ }, {
215
+ message: string;
216
+ alertRuleId: string;
217
+ alertName: string;
218
+ condition: string;
219
+ currentValue: number;
220
+ threshold: number;
221
+ }>;
222
+ export declare const alertResolvedPayloadSchema: z.ZodObject<{
223
+ alertRuleId: z.ZodString;
224
+ alertName: z.ZodString;
225
+ resolvedBy: z.ZodOptional<z.ZodString>;
226
+ }, "strip", z.ZodTypeAny, {
227
+ alertRuleId: string;
228
+ alertName: string;
229
+ resolvedBy?: string | undefined;
230
+ }, {
231
+ alertRuleId: string;
232
+ alertName: string;
233
+ resolvedBy?: string | undefined;
234
+ }>;
235
+ export declare const customPayloadSchema: z.ZodObject<{
236
+ type: z.ZodString;
237
+ data: z.ZodRecord<z.ZodString, z.ZodUnknown>;
238
+ }, "strip", z.ZodTypeAny, {
239
+ type: string;
240
+ data: Record<string, unknown>;
241
+ }, {
242
+ type: string;
243
+ data: Record<string, unknown>;
244
+ }>;
245
+ /**
246
+ * Map of event type to payload schema for type-specific validation.
247
+ */
248
+ export declare const payloadSchemasByEventType: Record<string, z.ZodTypeAny>;
249
+ /**
250
+ * Schema for validating inbound event ingestion.
251
+ *
252
+ * Uses superRefine to validate the payload against the correct
253
+ * type-specific schema based on eventType.
254
+ */
255
+ export declare const ingestEventSchema: z.ZodEffects<z.ZodObject<{
256
+ sessionId: z.ZodString;
257
+ agentId: z.ZodString;
258
+ eventType: z.ZodEnum<["session_started", "session_ended", "tool_call", "tool_response", "tool_error", "approval_requested", "approval_granted", "approval_denied", "approval_expired", "form_submitted", "form_completed", "form_expired", "cost_tracked", "alert_triggered", "alert_resolved", "custom"]>;
259
+ severity: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error", "critical"]>>;
260
+ payload: z.ZodRecord<z.ZodString, z.ZodUnknown>;
261
+ metadata: z.ZodDefault<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
262
+ /** Optional client-side timestamp; server will validate and may override */
263
+ timestamp: z.ZodOptional<z.ZodString>;
264
+ }, "strip", z.ZodTypeAny, {
265
+ sessionId: string;
266
+ agentId: string;
267
+ eventType: "tool_call" | "session_started" | "session_ended" | "tool_response" | "tool_error" | "approval_requested" | "approval_granted" | "approval_denied" | "approval_expired" | "form_submitted" | "form_completed" | "form_expired" | "cost_tracked" | "alert_triggered" | "alert_resolved" | "custom";
268
+ severity: "error" | "debug" | "info" | "warn" | "critical";
269
+ payload: Record<string, unknown>;
270
+ metadata: Record<string, unknown>;
271
+ timestamp?: string | undefined;
272
+ }, {
273
+ sessionId: string;
274
+ agentId: string;
275
+ eventType: "tool_call" | "session_started" | "session_ended" | "tool_response" | "tool_error" | "approval_requested" | "approval_granted" | "approval_denied" | "approval_expired" | "form_submitted" | "form_completed" | "form_expired" | "cost_tracked" | "alert_triggered" | "alert_resolved" | "custom";
276
+ payload: Record<string, unknown>;
277
+ timestamp?: string | undefined;
278
+ severity?: "error" | "debug" | "info" | "warn" | "critical" | undefined;
279
+ metadata?: Record<string, unknown> | undefined;
280
+ }>, {
281
+ sessionId: string;
282
+ agentId: string;
283
+ eventType: "tool_call" | "session_started" | "session_ended" | "tool_response" | "tool_error" | "approval_requested" | "approval_granted" | "approval_denied" | "approval_expired" | "form_submitted" | "form_completed" | "form_expired" | "cost_tracked" | "alert_triggered" | "alert_resolved" | "custom";
284
+ severity: "error" | "debug" | "info" | "warn" | "critical";
285
+ payload: Record<string, unknown>;
286
+ metadata: Record<string, unknown>;
287
+ timestamp?: string | undefined;
288
+ }, {
289
+ sessionId: string;
290
+ agentId: string;
291
+ eventType: "tool_call" | "session_started" | "session_ended" | "tool_response" | "tool_error" | "approval_requested" | "approval_granted" | "approval_denied" | "approval_expired" | "form_submitted" | "form_completed" | "form_expired" | "cost_tracked" | "alert_triggered" | "alert_resolved" | "custom";
292
+ payload: Record<string, unknown>;
293
+ timestamp?: string | undefined;
294
+ severity?: "error" | "debug" | "info" | "warn" | "critical" | undefined;
295
+ metadata?: Record<string, unknown> | undefined;
296
+ }>;
297
+ /**
298
+ * Type inferred from the ingest event schema
299
+ */
300
+ export type IngestEventInput = z.infer<typeof ingestEventSchema>;
301
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../src/schemas.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;GAEG;AACH,eAAO,MAAM,eAAe,iSAiB1B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,cAAc,2DAAyD,CAAC;AAIrF,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;EAKhC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAC;AAEH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;EAMjC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;EAKtC,CAAC;AAEH,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;EAKpC,CAAC;AAEH,eAAO,MAAM,8BAA8B;;;;;;;;;;;;;;;EAKzC,CAAC;AAEH,eAAO,MAAM,6BAA6B;;;;;;;;;;;;;;;EAKxC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKrC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;EAKrC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;EAInC,CAAC;AAEH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;;;;;;;;;;;EAQnC,CAAC;AAEH,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;;;;;;;EAOtC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;;;;;;;;;;;EAIrC,CAAC;AAEH,eAAO,MAAM,mBAAmB;;;;;;;;;EAG9B,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,yBAAyB,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,CAiBlE,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB;;;;;;;IAQ1B,4EAA4E;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAgB5E,CAAC;AAEL;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}