@agentbouncr/core 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 (95) hide show
  1. package/LICENSE +93 -0
  2. package/README.md +47 -0
  3. package/dist/audit/hash-chain.d.ts +39 -0
  4. package/dist/audit/hash-chain.d.ts.map +1 -0
  5. package/dist/audit/hash-chain.js +63 -0
  6. package/dist/audit/hash-chain.js.map +1 -0
  7. package/dist/audit/index.d.ts +2 -0
  8. package/dist/audit/index.d.ts.map +1 -0
  9. package/dist/audit/index.js +2 -0
  10. package/dist/audit/index.js.map +1 -0
  11. package/dist/core/condition-evaluator.d.ts +20 -0
  12. package/dist/core/condition-evaluator.d.ts.map +1 -0
  13. package/dist/core/condition-evaluator.js +85 -0
  14. package/dist/core/condition-evaluator.js.map +1 -0
  15. package/dist/core/permission-layer.d.ts +24 -0
  16. package/dist/core/permission-layer.d.ts.map +1 -0
  17. package/dist/core/permission-layer.js +58 -0
  18. package/dist/core/permission-layer.js.map +1 -0
  19. package/dist/core/policy-engine.d.ts +35 -0
  20. package/dist/core/policy-engine.d.ts.map +1 -0
  21. package/dist/core/policy-engine.js +131 -0
  22. package/dist/core/policy-engine.js.map +1 -0
  23. package/dist/core/policy-schema.d.ts +50 -0
  24. package/dist/core/policy-schema.d.ts.map +1 -0
  25. package/dist/core/policy-schema.js +59 -0
  26. package/dist/core/policy-schema.js.map +1 -0
  27. package/dist/core/tool-registry.d.ts +31 -0
  28. package/dist/core/tool-registry.d.ts.map +1 -0
  29. package/dist/core/tool-registry.js +53 -0
  30. package/dist/core/tool-registry.js.map +1 -0
  31. package/dist/detection/injection-detector.d.ts +21 -0
  32. package/dist/detection/injection-detector.d.ts.map +1 -0
  33. package/dist/detection/injection-detector.js +61 -0
  34. package/dist/detection/injection-detector.js.map +1 -0
  35. package/dist/events/event-emitter.d.ts +44 -0
  36. package/dist/events/event-emitter.d.ts.map +1 -0
  37. package/dist/events/event-emitter.js +119 -0
  38. package/dist/events/event-emitter.js.map +1 -0
  39. package/dist/importers/json-schema-converter.d.ts +16 -0
  40. package/dist/importers/json-schema-converter.d.ts.map +1 -0
  41. package/dist/importers/json-schema-converter.js +95 -0
  42. package/dist/importers/json-schema-converter.js.map +1 -0
  43. package/dist/importers/mcp-importer.d.ts +30 -0
  44. package/dist/importers/mcp-importer.d.ts.map +1 -0
  45. package/dist/importers/mcp-importer.js +45 -0
  46. package/dist/importers/mcp-importer.js.map +1 -0
  47. package/dist/index.d.ts +27 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +43 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/lifecycle/governance-middleware.d.ts +105 -0
  52. package/dist/lifecycle/governance-middleware.d.ts.map +1 -0
  53. package/dist/lifecycle/governance-middleware.js +610 -0
  54. package/dist/lifecycle/governance-middleware.js.map +1 -0
  55. package/dist/lifecycle/kill-switch.d.ts +46 -0
  56. package/dist/lifecycle/kill-switch.d.ts.map +1 -0
  57. package/dist/lifecycle/kill-switch.js +119 -0
  58. package/dist/lifecycle/kill-switch.js.map +1 -0
  59. package/dist/lifecycle/middleware-schemas.d.ts +49 -0
  60. package/dist/lifecycle/middleware-schemas.d.ts.map +1 -0
  61. package/dist/lifecycle/middleware-schemas.js +33 -0
  62. package/dist/lifecycle/middleware-schemas.js.map +1 -0
  63. package/dist/providers/vercel-ai-adapter.d.ts +42 -0
  64. package/dist/providers/vercel-ai-adapter.d.ts.map +1 -0
  65. package/dist/providers/vercel-ai-adapter.js +96 -0
  66. package/dist/providers/vercel-ai-adapter.js.map +1 -0
  67. package/dist/schema/tool-schema.d.ts +62 -0
  68. package/dist/schema/tool-schema.d.ts.map +1 -0
  69. package/dist/schema/tool-schema.js +88 -0
  70. package/dist/schema/tool-schema.js.map +1 -0
  71. package/dist/tracing/index.d.ts +6 -0
  72. package/dist/tracing/index.d.ts.map +1 -0
  73. package/dist/tracing/index.js +6 -0
  74. package/dist/tracing/index.js.map +1 -0
  75. package/dist/tracing/trace-context.d.ts +37 -0
  76. package/dist/tracing/trace-context.d.ts.map +1 -0
  77. package/dist/tracing/trace-context.js +76 -0
  78. package/dist/tracing/trace-context.js.map +1 -0
  79. package/dist/tracing/trace-provider.d.ts +43 -0
  80. package/dist/tracing/trace-provider.d.ts.map +1 -0
  81. package/dist/tracing/trace-provider.js +89 -0
  82. package/dist/tracing/trace-provider.js.map +1 -0
  83. package/dist/types/index.d.ts +248 -0
  84. package/dist/types/index.d.ts.map +1 -0
  85. package/dist/types/index.js +20 -0
  86. package/dist/types/index.js.map +1 -0
  87. package/dist/utils/external-content.d.ts +9 -0
  88. package/dist/utils/external-content.d.ts.map +1 -0
  89. package/dist/utils/external-content.js +11 -0
  90. package/dist/utils/external-content.js.map +1 -0
  91. package/dist/utils/logger.d.ts +4 -0
  92. package/dist/utils/logger.d.ts.map +1 -0
  93. package/dist/utils/logger.js +13 -0
  94. package/dist/utils/logger.js.map +1 -0
  95. package/package.json +45 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * @agentbouncr/core — W3C Trace Context Primitives
3
+ *
4
+ * Trace-ID-Generierung und -Validierung nach W3C Trace Context Standard.
5
+ * https://www.w3.org/TR/trace-context/
6
+ *
7
+ * Format:
8
+ * traceId: 32 hex chars (128 bit)
9
+ * spanId: 16 hex chars (64 bit)
10
+ * traceparent: "00-{traceId}-{spanId}-{flags}"
11
+ */
12
+ import { randomBytes } from 'node:crypto';
13
+ // --- Constants ---
14
+ const TRACE_ID_BYTES = 16;
15
+ const SPAN_ID_BYTES = 8;
16
+ const TRACE_VERSION = '00';
17
+ const TRACE_FLAGS_SAMPLED = '01';
18
+ const TRACE_ID_REGEX = /^[0-9a-f]{32}$/;
19
+ const SPAN_ID_REGEX = /^[0-9a-f]{16}$/;
20
+ const TRACEPARENT_REGEX = /^([0-9a-f]{2})-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/;
21
+ const ALL_ZEROS_TRACE_ID = '0'.repeat(32);
22
+ const ALL_ZEROS_SPAN_ID = '0'.repeat(16);
23
+ // --- Generation ---
24
+ export function generateTraceId() {
25
+ return randomBytes(TRACE_ID_BYTES).toString('hex');
26
+ }
27
+ export function generateSpanId() {
28
+ return randomBytes(SPAN_ID_BYTES).toString('hex');
29
+ }
30
+ // --- Validation ---
31
+ export function isValidTraceId(traceId) {
32
+ return TRACE_ID_REGEX.test(traceId) && traceId !== ALL_ZEROS_TRACE_ID;
33
+ }
34
+ export function isValidSpanId(spanId) {
35
+ return SPAN_ID_REGEX.test(spanId) && spanId !== ALL_ZEROS_SPAN_ID;
36
+ }
37
+ // --- traceparent formatting ---
38
+ function formatTraceparent(traceId, spanId) {
39
+ return `${TRACE_VERSION}-${traceId}-${spanId}-${TRACE_FLAGS_SAMPLED}`;
40
+ }
41
+ // --- Factory ---
42
+ /**
43
+ * Create a TraceContext. Reuses valid traceId/spanId if provided,
44
+ * otherwise generates new ones.
45
+ */
46
+ export function createTraceContext(traceId, spanId) {
47
+ const validTraceId = traceId && isValidTraceId(traceId) ? traceId : generateTraceId();
48
+ const validSpanId = spanId && isValidSpanId(spanId) ? spanId : generateSpanId();
49
+ return {
50
+ traceId: validTraceId,
51
+ spanId: validSpanId,
52
+ traceparent: formatTraceparent(validTraceId, validSpanId),
53
+ };
54
+ }
55
+ // --- Parsing ---
56
+ /**
57
+ * Parse a W3C traceparent header string into a TraceContext.
58
+ * Returns null for invalid formats.
59
+ *
60
+ * Format: "{version}-{traceId}-{spanId}-{flags}"
61
+ * Example: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
62
+ */
63
+ export function parseTraceparent(header) {
64
+ const match = header.match(TRACEPARENT_REGEX);
65
+ if (!match)
66
+ return null;
67
+ const [, , traceId, spanId] = match;
68
+ if (!isValidTraceId(traceId) || !isValidSpanId(spanId))
69
+ return null;
70
+ return {
71
+ traceId,
72
+ spanId,
73
+ traceparent: header,
74
+ };
75
+ }
76
+ //# sourceMappingURL=trace-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context.js","sourceRoot":"","sources":["../../src/tracing/trace-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAa1C,oBAAoB;AAEpB,MAAM,cAAc,GAAG,EAAE,CAAC;AAC1B,MAAM,aAAa,GAAG,CAAC,CAAC;AACxB,MAAM,aAAa,GAAG,IAAI,CAAC;AAC3B,MAAM,mBAAmB,GAAG,IAAI,CAAC;AAEjC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AACxC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,iBAAiB,GAAG,6DAA6D,CAAC;AACxF,MAAM,kBAAkB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC1C,MAAM,iBAAiB,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAEzC,qBAAqB;AAErB,MAAM,UAAU,eAAe;IAC7B,OAAO,WAAW,CAAC,cAAc,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,OAAO,WAAW,CAAC,aAAa,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACpD,CAAC;AAED,qBAAqB;AAErB,MAAM,UAAU,cAAc,CAAC,OAAe;IAC5C,OAAO,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,OAAO,KAAK,kBAAkB,CAAC;AACxE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAc;IAC1C,OAAO,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,iBAAiB,CAAC;AACpE,CAAC;AAED,iCAAiC;AAEjC,SAAS,iBAAiB,CAAC,OAAe,EAAE,MAAc;IACxD,OAAO,GAAG,aAAa,IAAI,OAAO,IAAI,MAAM,IAAI,mBAAmB,EAAE,CAAC;AACxE,CAAC;AAED,kBAAkB;AAElB;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,MAAe;IAClE,MAAM,YAAY,GAAG,OAAO,IAAI,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,EAAE,CAAC;IACtF,MAAM,WAAW,GAAG,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,EAAE,CAAC;IAEhF,OAAO;QACL,OAAO,EAAE,YAAY;QACrB,MAAM,EAAE,WAAW;QACnB,WAAW,EAAE,iBAAiB,CAAC,YAAY,EAAE,WAAW,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED,kBAAkB;AAElB;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAC9C,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,MAAM,CAAC,GAAG,KAAK,CAAC;IAEpC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IAEpE,OAAO;QACL,OAAO;QACP,MAAM;QACN,WAAW,EAAE,MAAM;KACpB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,43 @@
1
+ /**
2
+ * @agentbouncr/core — TraceProvider
3
+ *
4
+ * DI-injectable Trace-Kontext-Management mit:
5
+ * - AsyncLocalStorage fuer implizite Propagation
6
+ * - OTel-API-Bridge (no-op wenn kein SDK registriert)
7
+ * - Pino child-Logger mit traceId/spanId gebunden
8
+ */
9
+ import type pino from 'pino';
10
+ import { type TraceContext } from './trace-context.js';
11
+ export declare class TraceProvider {
12
+ private readonly logger;
13
+ private readonly storage;
14
+ private readonly tracer;
15
+ constructor(logger: pino.Logger, serviceName?: string);
16
+ /**
17
+ * Execute fn within a traced scope. TraceId is available via
18
+ * getTraceId()/getTraceContext() anywhere inside fn (sync or async).
19
+ *
20
+ * Priority for traceId:
21
+ * 1. options.traceId (caller-provided, e.g. from EvaluateRequest)
22
+ * 2. Active OTel span context (if SDK registered)
23
+ * 3. Generate new W3C-compliant trace ID
24
+ */
25
+ run<T>(fn: () => T, options?: {
26
+ traceId?: string;
27
+ spanName?: string;
28
+ }): T;
29
+ /**
30
+ * Get the active TraceContext. Returns undefined outside run() scope.
31
+ */
32
+ getTraceContext(): TraceContext | undefined;
33
+ /**
34
+ * Convenience: get just the traceId. Returns undefined outside run() scope.
35
+ */
36
+ getTraceId(): string | undefined;
37
+ /**
38
+ * Get the context-bound logger (with traceId/spanId fields).
39
+ * Falls back to the base logger outside run() scope.
40
+ */
41
+ getLogger(): pino.Logger;
42
+ }
43
+ //# sourceMappingURL=trace-provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-provider.d.ts","sourceRoot":"","sources":["../../src/tracing/trace-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAGL,KAAK,YAAY,EAClB,MAAM,oBAAoB,CAAC;AAW5B,qBAAa,aAAa;IAKtB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAJzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;gBAGb,MAAM,EAAE,IAAI,CAAC,MAAM,EACpC,WAAW,GAAE,MAA4B;IAK3C;;;;;;;;OAQG;IACH,GAAG,CAAC,CAAC,EACH,EAAE,EAAE,MAAM,CAAC,EACX,OAAO,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAChD,CAAC;IAkDJ;;OAEG;IACH,eAAe,IAAI,YAAY,GAAG,SAAS;IAI3C;;OAEG;IACH,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;;OAGG;IACH,SAAS,IAAI,IAAI,CAAC,MAAM;CAGzB"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @agentbouncr/core — TraceProvider
3
+ *
4
+ * DI-injectable Trace-Kontext-Management mit:
5
+ * - AsyncLocalStorage fuer implizite Propagation
6
+ * - OTel-API-Bridge (no-op wenn kein SDK registriert)
7
+ * - Pino child-Logger mit traceId/spanId gebunden
8
+ */
9
+ import { AsyncLocalStorage } from 'node:async_hooks';
10
+ import { trace, SpanKind } from '@opentelemetry/api';
11
+ import { createTraceContext, generateSpanId, } from './trace-context.js';
12
+ // --- TraceProvider ---
13
+ export class TraceProvider {
14
+ logger;
15
+ storage = new AsyncLocalStorage();
16
+ tracer;
17
+ constructor(logger, serviceName = '@agentbouncr/core') {
18
+ this.logger = logger;
19
+ this.tracer = trace.getTracer(serviceName);
20
+ }
21
+ /**
22
+ * Execute fn within a traced scope. TraceId is available via
23
+ * getTraceId()/getTraceContext() anywhere inside fn (sync or async).
24
+ *
25
+ * Priority for traceId:
26
+ * 1. options.traceId (caller-provided, e.g. from EvaluateRequest)
27
+ * 2. Active OTel span context (if SDK registered)
28
+ * 3. Generate new W3C-compliant trace ID
29
+ */
30
+ run(fn, options) {
31
+ // Determine trace context
32
+ let traceCtx;
33
+ if (options?.traceId) {
34
+ traceCtx = createTraceContext(options.traceId);
35
+ }
36
+ else {
37
+ const activeSpan = trace.getActiveSpan();
38
+ if (activeSpan) {
39
+ const spanCtx = activeSpan.spanContext();
40
+ traceCtx = createTraceContext(spanCtx.traceId, generateSpanId());
41
+ }
42
+ else {
43
+ traceCtx = createTraceContext();
44
+ }
45
+ }
46
+ const childLogger = this.logger.child({
47
+ traceId: traceCtx.traceId,
48
+ spanId: traceCtx.spanId,
49
+ });
50
+ const store = { traceContext: traceCtx, logger: childLogger };
51
+ const spanName = options?.spanName ?? 'governance.operation';
52
+ return this.tracer.startActiveSpan(spanName, { kind: SpanKind.INTERNAL }, (span) => {
53
+ return this.storage.run(store, () => {
54
+ try {
55
+ const result = fn();
56
+ if (result instanceof Promise) {
57
+ return result.then((val) => { span.end(); return val; }, (err) => { span.end(); throw err; });
58
+ }
59
+ span.end();
60
+ return result;
61
+ }
62
+ catch (err) {
63
+ span.end();
64
+ throw err;
65
+ }
66
+ });
67
+ });
68
+ }
69
+ /**
70
+ * Get the active TraceContext. Returns undefined outside run() scope.
71
+ */
72
+ getTraceContext() {
73
+ return this.storage.getStore()?.traceContext;
74
+ }
75
+ /**
76
+ * Convenience: get just the traceId. Returns undefined outside run() scope.
77
+ */
78
+ getTraceId() {
79
+ return this.storage.getStore()?.traceContext.traceId;
80
+ }
81
+ /**
82
+ * Get the context-bound logger (with traceId/spanId fields).
83
+ * Falls back to the base logger outside run() scope.
84
+ */
85
+ getLogger() {
86
+ return this.storage.getStore()?.logger ?? this.logger;
87
+ }
88
+ }
89
+ //# sourceMappingURL=trace-provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-provider.js","sourceRoot":"","sources":["../../src/tracing/trace-provider.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,248 @@
1
+ /**
2
+ * @agentbouncr/core — Shared Types
3
+ *
4
+ * GovernanceError, Failure Categories, and shared interfaces
5
+ * used across all governance modules.
6
+ */
7
+ import type { GovernanceTool, RiskLevel } from '../schema/tool-schema.js';
8
+ export type FailureCategory = 'tool_error' | 'policy_denial' | 'provider_timeout' | 'provider_error' | 'injection_alert' | 'config_error' | 'rate_limit' | 'approval_timeout';
9
+ export declare class GovernanceError extends Error {
10
+ readonly code: string;
11
+ readonly category: FailureCategory;
12
+ readonly context?: Record<string, unknown> | undefined;
13
+ readonly name = "GovernanceError";
14
+ constructor(message: string, code: string, category: FailureCategory, context?: Record<string, unknown> | undefined);
15
+ }
16
+ export interface InjectionDetectionResult {
17
+ detected: boolean;
18
+ patterns: string[];
19
+ text: string;
20
+ }
21
+ export interface KillSwitchResult {
22
+ triggered: boolean;
23
+ command: string | null;
24
+ }
25
+ export interface PermissionResult {
26
+ allowed: boolean;
27
+ reason?: string;
28
+ toolName: string;
29
+ agentId: string;
30
+ }
31
+ export interface EvaluateRequest {
32
+ agentId: string;
33
+ tool: string;
34
+ params?: Record<string, unknown>;
35
+ traceId?: string;
36
+ }
37
+ export interface EvaluateResult {
38
+ allowed: boolean;
39
+ traceId: string;
40
+ reason?: string;
41
+ appliedRules: AppliedRule[];
42
+ requiresApproval?: boolean;
43
+ approvalId?: string;
44
+ deadline?: string;
45
+ }
46
+ export interface AppliedRule {
47
+ policyName: string;
48
+ ruleName?: string;
49
+ effect: 'allow' | 'deny';
50
+ requireApproval?: boolean;
51
+ }
52
+ export interface ToolResult {
53
+ success: boolean;
54
+ data?: unknown;
55
+ error?: string;
56
+ }
57
+ export interface ToolExecutionContext {
58
+ agentId: string;
59
+ traceId: string;
60
+ [key: string]: unknown;
61
+ }
62
+ export interface AuditEvent {
63
+ id?: number;
64
+ traceId: string;
65
+ timestamp: string;
66
+ agentId: string;
67
+ tool: string;
68
+ params?: Record<string, unknown>;
69
+ result: 'allowed' | 'denied' | 'error';
70
+ reason?: string;
71
+ durationMs: number;
72
+ failureCategory?: FailureCategory;
73
+ previousHash: string | null;
74
+ hash: string;
75
+ }
76
+ export type AuditEventInput = Omit<AuditEvent, 'id' | 'previousHash' | 'hash'>;
77
+ export interface AuditFilter {
78
+ agentId?: string;
79
+ tool?: string;
80
+ result?: 'allowed' | 'denied' | 'error';
81
+ traceId?: string;
82
+ fromTimestamp?: string;
83
+ toTimestamp?: string;
84
+ failureCategory?: FailureCategory;
85
+ search?: string;
86
+ limit?: number;
87
+ offset?: number;
88
+ }
89
+ export interface AuditChainVerificationResult {
90
+ valid: boolean;
91
+ brokenAt?: number;
92
+ totalEvents: number;
93
+ verifiedEvents: number;
94
+ }
95
+ export type ConditionOperator = 'equals' | 'notEquals' | 'startsWith' | 'endsWith' | 'contains' | 'gt' | 'lt' | 'gte' | 'lte' | 'in' | 'matches';
96
+ /**
97
+ * Policy condition: maps parameter names to operator-value pairs.
98
+ * Example: { "path": { "startsWith": "/etc/" }, "amount": { "gt": 1000 } }
99
+ * All conditions are AND-combined (conjunctive).
100
+ */
101
+ export type PolicyCondition = Record<string, Partial<Record<ConditionOperator, unknown>>>;
102
+ export interface Policy {
103
+ name: string;
104
+ version: string;
105
+ agentId?: string;
106
+ rules: PolicyRule[];
107
+ createdAt: string;
108
+ updatedAt: string;
109
+ }
110
+ export interface PolicyRule {
111
+ name?: string;
112
+ tool: string;
113
+ effect: 'allow' | 'deny';
114
+ condition?: PolicyCondition;
115
+ reason?: string;
116
+ rateLimit?: {
117
+ maxPerMinute: number;
118
+ };
119
+ requireApproval?: boolean;
120
+ }
121
+ export type AgentRunStatus = 'registered' | 'running' | 'stopped' | 'error';
122
+ export interface AgentConfig {
123
+ agentId: string;
124
+ name: string;
125
+ description?: string;
126
+ allowedTools: string[];
127
+ policyName?: string;
128
+ metadata?: Record<string, unknown>;
129
+ }
130
+ export interface AgentStatus {
131
+ agentId: string;
132
+ name: string;
133
+ status: AgentRunStatus;
134
+ registeredAt: string;
135
+ lastActiveAt?: string;
136
+ }
137
+ export interface PolicyVersion {
138
+ id: number;
139
+ policyName: string;
140
+ version: string;
141
+ agentId?: string;
142
+ rules: PolicyRule[];
143
+ author: string;
144
+ createdAt: string;
145
+ }
146
+ export interface GovernanceEventRecord {
147
+ id?: number;
148
+ agentId: string;
149
+ eventType: string;
150
+ timestamp: string;
151
+ traceId?: string;
152
+ data?: Record<string, unknown>;
153
+ receivedAt?: string;
154
+ }
155
+ export interface GovernanceEventFilter {
156
+ agentId?: string;
157
+ eventType?: string;
158
+ fromTimestamp?: string;
159
+ toTimestamp?: string;
160
+ limit?: number;
161
+ offset?: number;
162
+ }
163
+ export type ApprovalStatus = 'pending' | 'approved' | 'rejected' | 'timeout';
164
+ export interface ApprovalRequest {
165
+ id: string;
166
+ agentId: string;
167
+ tool: string;
168
+ params?: Record<string, unknown>;
169
+ traceId: string;
170
+ policyName: string;
171
+ ruleName?: string;
172
+ status: ApprovalStatus;
173
+ deadline: string;
174
+ approver?: string;
175
+ comment?: string;
176
+ createdAt: string;
177
+ resolvedAt?: string;
178
+ tenantId: string;
179
+ }
180
+ export interface ApprovalRequestInput {
181
+ agentId: string;
182
+ tool: string;
183
+ params?: Record<string, unknown>;
184
+ traceId: string;
185
+ policyName: string;
186
+ ruleName?: string;
187
+ deadline: string;
188
+ }
189
+ export interface ApprovalFilter {
190
+ agentId?: string;
191
+ status?: ApprovalStatus;
192
+ tool?: string;
193
+ limit?: number;
194
+ offset?: number;
195
+ }
196
+ export interface ApprovalResolution {
197
+ status: 'approved' | 'rejected' | 'timeout';
198
+ approver?: string;
199
+ comment?: string;
200
+ }
201
+ export interface ToolFilter {
202
+ source?: 'manual' | 'import' | 'mcp';
203
+ riskLevel?: RiskLevel;
204
+ category?: string;
205
+ /** Search in tool name and description */
206
+ search?: string;
207
+ }
208
+ export interface TransactionClient {
209
+ run(sql: string, params?: unknown[]): void;
210
+ get<T>(sql: string, params?: unknown[]): T | undefined;
211
+ all<T>(sql: string, params?: unknown[]): T[];
212
+ }
213
+ export interface DatabaseAdapter {
214
+ writeAuditEvent(event: AuditEventInput): Promise<void>;
215
+ queryAuditEvents(filter: AuditFilter): Promise<AuditEvent[]>;
216
+ getLatestAuditHash(): Promise<string | null>;
217
+ verifyAuditChain(): Promise<AuditChainVerificationResult>;
218
+ exportAuditEvents(filter: AuditFilter, stream: NodeJS.WritableStream): Promise<void>;
219
+ writePolicy(policy: Policy): Promise<void>;
220
+ getActivePolicy(agentId: string): Promise<Policy | null>;
221
+ listPolicies(): Promise<Policy[]>;
222
+ getPolicyByName(name: string): Promise<Policy | null>;
223
+ deletePolicy(name: string): Promise<boolean>;
224
+ writePolicyVersion(policyName: string, policy: Policy, author: string): Promise<void>;
225
+ getPolicyHistory(policyName: string): Promise<PolicyVersion[]>;
226
+ getPolicyVersion(policyName: string, versionId: number): Promise<PolicyVersion | null>;
227
+ registerAgent(config: AgentConfig): Promise<string>;
228
+ getAgentStatus(agentId: string): Promise<AgentStatus | null>;
229
+ updateAgentStatus(agentId: string, status: AgentRunStatus): Promise<void>;
230
+ listAgents(): Promise<AgentStatus[]>;
231
+ deleteAgent(agentId: string): Promise<boolean>;
232
+ writeTool(tool: GovernanceTool): Promise<void>;
233
+ getTool(name: string): Promise<GovernanceTool | null>;
234
+ listTools(filter?: ToolFilter): Promise<GovernanceTool[]>;
235
+ deleteTool(name: string): Promise<boolean>;
236
+ writeGovernanceEvent(event: GovernanceEventRecord): Promise<void>;
237
+ queryGovernanceEvents(filter: GovernanceEventFilter): Promise<GovernanceEventRecord[]>;
238
+ runMigrations(): Promise<void>;
239
+ getSchemaVersion(): Promise<number>;
240
+ transaction<T>(fn: (tx: TransactionClient) => Promise<T>): Promise<T>;
241
+ createApprovalRequest?(request: ApprovalRequestInput): Promise<ApprovalRequest>;
242
+ getApprovalRequest?(id: string): Promise<ApprovalRequest | null>;
243
+ listApprovalRequests?(filter?: ApprovalFilter): Promise<ApprovalRequest[]>;
244
+ resolveApprovalRequest?(id: string, resolution: ApprovalResolution): Promise<boolean>;
245
+ forTenant?(tenantId: string): DatabaseAdapter;
246
+ close(): Promise<void>;
247
+ }
248
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * @agentbouncr/core — Shared Types
3
+ *
4
+ * GovernanceError, Failure Categories, and shared interfaces
5
+ * used across all governance modules.
6
+ */
7
+ // --- GovernanceError ---
8
+ export class GovernanceError extends Error {
9
+ code;
10
+ category;
11
+ context;
12
+ name = 'GovernanceError';
13
+ constructor(message, code, category, context) {
14
+ super(message);
15
+ this.code = code;
16
+ this.category = category;
17
+ this.context = context;
18
+ }
19
+ }
20
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAgBH,0BAA0B;AAE1B,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAKtB;IACA;IACA;IANO,IAAI,GAAG,iBAAiB,CAAC;IAElD,YACE,OAAe,EACC,IAAY,EACZ,QAAyB,EACzB,OAAiC;QAEjD,KAAK,CAAC,OAAO,CAAC,CAAC;QAJC,SAAI,GAAJ,IAAI,CAAQ;QACZ,aAAQ,GAAR,QAAQ,CAAiB;QACzB,YAAO,GAAP,OAAO,CAA0B;IAGnD,CAAC;CACF"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * External content wrapper for untrusted data entering the LLM context.
3
+ * Used for web search results, memory entries with treat_as_external, etc.
4
+ * Prevents injection by clearly marking boundaries of untrusted content.
5
+ */
6
+ export declare const INJECTION_WARNING_START = "[EXTERNAL CONTENT - NICHT VERTRAUENSWUERDIG]";
7
+ export declare const INJECTION_WARNING_END = "[ENDE EXTERNAL CONTENT]";
8
+ export declare function wrapExternalContent(content: string): string;
9
+ //# sourceMappingURL=external-content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-content.d.ts","sourceRoot":"","sources":["../../src/utils/external-content.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,eAAO,MAAM,uBAAuB,iDAAiD,CAAC;AACtF,eAAO,MAAM,qBAAqB,4BAA4B,CAAC;AAE/D,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3D"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * External content wrapper for untrusted data entering the LLM context.
3
+ * Used for web search results, memory entries with treat_as_external, etc.
4
+ * Prevents injection by clearly marking boundaries of untrusted content.
5
+ */
6
+ export const INJECTION_WARNING_START = '[EXTERNAL CONTENT - NICHT VERTRAUENSWUERDIG]';
7
+ export const INJECTION_WARNING_END = '[ENDE EXTERNAL CONTENT]';
8
+ export function wrapExternalContent(content) {
9
+ return `${INJECTION_WARNING_START}\n${content}\n${INJECTION_WARNING_END}`;
10
+ }
11
+ //# sourceMappingURL=external-content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"external-content.js","sourceRoot":"","sources":["../../src/utils/external-content.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,CAAC,MAAM,uBAAuB,GAAG,8CAA8C,CAAC;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG,yBAAyB,CAAC;AAE/D,MAAM,UAAU,mBAAmB,CAAC,OAAe;IACjD,OAAO,GAAG,uBAAuB,KAAK,OAAO,KAAK,qBAAqB,EAAE,CAAC;AAC5E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import pino from 'pino';
2
+ export declare const logger: pino.Logger<never, boolean>;
3
+ export declare const securityLogger: pino.Logger<never, boolean>;
4
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAIxB,eAAO,MAAM,MAAM,6BAQjB,CAAC;AAEH,eAAO,MAAM,cAAc,6BAAwC,CAAC"}
@@ -0,0 +1,13 @@
1
+ import pino from 'pino';
2
+ const level = process.env.LOG_LEVEL || 'info';
3
+ export const logger = pino({
4
+ level,
5
+ timestamp: pino.stdTimeFunctions.isoTime,
6
+ formatters: {
7
+ level(label) {
8
+ return { level: label };
9
+ },
10
+ },
11
+ });
12
+ export const securityLogger = logger.child({ context: 'security' });
13
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,MAAM,CAAC;AAE9C,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK;IACL,SAAS,EAAE,IAAI,CAAC,gBAAgB,CAAC,OAAO;IACxC,UAAU,EAAE;QACV,KAAK,CAAC,KAAK;YACT,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;KACF;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC"}
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "@agentbouncr/core",
3
+ "version": "0.1.0",
4
+ "type": "module",
5
+ "license": "Elastic-2.0",
6
+ "description": "Agent Governance Framework — Core Engine (Permission Layer, Policy Engine, Audit Trail)",
7
+ "repository": {
8
+ "type": "git",
9
+ "url": "https://github.com/agentbouncr/agentbouncr.git",
10
+ "directory": "packages/core"
11
+ },
12
+ "publishConfig": {
13
+ "registry": "https://registry.npmjs.org",
14
+ "access": "public"
15
+ },
16
+ "main": "./dist/index.js",
17
+ "types": "./dist/index.d.ts",
18
+ "exports": {
19
+ ".": {
20
+ "types": "./dist/index.d.ts",
21
+ "import": "./dist/index.js"
22
+ }
23
+ },
24
+ "files": [
25
+ "dist",
26
+ "README.md",
27
+ "LICENSE"
28
+ ],
29
+ "scripts": {
30
+ "build": "tsc",
31
+ "clean": "rm -rf dist"
32
+ },
33
+ "engines": {
34
+ "node": ">=20.0.0"
35
+ },
36
+ "dependencies": {
37
+ "@opentelemetry/api": "^1.9.0",
38
+ "pino": "^10.3.1",
39
+ "safe-regex2": "^5.0.0",
40
+ "zod": "^4.3.6"
41
+ },
42
+ "devDependencies": {
43
+ "@types/node": "^25.2.3"
44
+ }
45
+ }