@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,46 @@
1
+ /**
2
+ * @agentbouncr/core — Kill-Switch Manager
3
+ *
4
+ * Deterministic emergency stop — no LLM, no network.
5
+ * Once activated, all evaluate() calls are denied.
6
+ * Reset requires explicit admin action (no auto-recovery).
7
+ */
8
+ import type pino from 'pino';
9
+ import type { GovernanceEventEmitter } from '../events/event-emitter.js';
10
+ export interface KillSwitchStatus {
11
+ active: boolean;
12
+ activatedAt?: string;
13
+ reason?: string;
14
+ }
15
+ export declare class KillSwitchManager {
16
+ private readonly logger;
17
+ private readonly eventEmitter?;
18
+ private globalActive;
19
+ private globalActivatedAt?;
20
+ private globalReason?;
21
+ private readonly tenantState;
22
+ constructor(logger: pino.Logger, eventEmitter?: GovernanceEventEmitter | undefined);
23
+ /**
24
+ * Check if the kill-switch is currently active.
25
+ * With tenantId: checks tenant-specific state.
26
+ * Without: checks global state.
27
+ */
28
+ isActive(tenantId?: string): boolean;
29
+ /**
30
+ * Activate the kill-switch. All governance evaluations will be denied.
31
+ * Idempotent — calling activate() when already active is a no-op.
32
+ * With tenantId: only affects the specified tenant.
33
+ */
34
+ activate(reason: string, tenantId?: string): void;
35
+ /**
36
+ * Reset the kill-switch. Requires explicit admin action.
37
+ * With tenantId: resets only the specified tenant.
38
+ */
39
+ reset(tenantId?: string, reason?: string): void;
40
+ /**
41
+ * Get the current kill-switch status.
42
+ * With tenantId: returns tenant-specific status.
43
+ */
44
+ getStatus(tenantId?: string): KillSwitchStatus;
45
+ }
46
+ //# sourceMappingURL=kill-switch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-switch.d.ts","sourceRoot":"","sources":["../../src/lifecycle/kill-switch.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAIzE,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAID,qBAAa,iBAAiB;IAU1B,OAAO,CAAC,QAAQ,CAAC,MAAM;IACvB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC;IAThC,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,iBAAiB,CAAC,CAAS;IACnC,OAAO,CAAC,YAAY,CAAC,CAAS;IAG9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAiF;gBAG1F,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,YAAY,CAAC,EAAE,sBAAsB,YAAA;IAGxD;;;;OAIG;IACH,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO;IAOpC;;;;OAIG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI;IAwCjD;;;OAGG;IACH,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IA0C/C;;;OAGG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,gBAAgB;CAe/C"}
@@ -0,0 +1,119 @@
1
+ /**
2
+ * @agentbouncr/core — Kill-Switch Manager
3
+ *
4
+ * Deterministic emergency stop — no LLM, no network.
5
+ * Once activated, all evaluate() calls are denied.
6
+ * Reset requires explicit admin action (no auto-recovery).
7
+ */
8
+ // --- Kill-Switch Manager ---
9
+ export class KillSwitchManager {
10
+ logger;
11
+ eventEmitter;
12
+ // Global state (Stufe-1 users without tenantId)
13
+ globalActive = false;
14
+ globalActivatedAt;
15
+ globalReason;
16
+ // Per-tenant state (Multi-Tenant)
17
+ tenantState = new Map();
18
+ constructor(logger, eventEmitter) {
19
+ this.logger = logger;
20
+ this.eventEmitter = eventEmitter;
21
+ }
22
+ /**
23
+ * Check if the kill-switch is currently active.
24
+ * With tenantId: checks tenant-specific state.
25
+ * Without: checks global state.
26
+ */
27
+ isActive(tenantId) {
28
+ if (tenantId) {
29
+ return this.tenantState.get(tenantId)?.active ?? false;
30
+ }
31
+ return this.globalActive;
32
+ }
33
+ /**
34
+ * Activate the kill-switch. All governance evaluations will be denied.
35
+ * Idempotent — calling activate() when already active is a no-op.
36
+ * With tenantId: only affects the specified tenant.
37
+ */
38
+ activate(reason, tenantId) {
39
+ if (tenantId) {
40
+ const state = this.tenantState.get(tenantId);
41
+ if (state?.active)
42
+ return;
43
+ const activatedAt = new Date().toISOString();
44
+ this.tenantState.set(tenantId, { active: true, activatedAt, reason });
45
+ this.logger.fatal({ reason, activatedAt, tenantId }, 'Kill-Switch activated — all tool calls will be denied');
46
+ this.eventEmitter?.emitEvent({
47
+ type: 'killswitch.activated',
48
+ timestamp: activatedAt,
49
+ tenantId,
50
+ data: { reason, tenantId },
51
+ });
52
+ return;
53
+ }
54
+ if (this.globalActive)
55
+ return;
56
+ this.globalActive = true;
57
+ this.globalActivatedAt = new Date().toISOString();
58
+ this.globalReason = reason;
59
+ this.logger.fatal({ reason, activatedAt: this.globalActivatedAt }, 'Kill-Switch activated — all tool calls will be denied');
60
+ this.eventEmitter?.emitEvent({
61
+ type: 'killswitch.activated',
62
+ timestamp: this.globalActivatedAt,
63
+ data: { reason },
64
+ });
65
+ }
66
+ /**
67
+ * Reset the kill-switch. Requires explicit admin action.
68
+ * With tenantId: resets only the specified tenant.
69
+ */
70
+ reset(tenantId, reason) {
71
+ if (tenantId) {
72
+ const state = this.tenantState.get(tenantId);
73
+ if (!state?.active)
74
+ return;
75
+ this.logger.warn({ previousReason: state.reason, activatedAt: state.activatedAt, tenantId, resetReason: reason }, 'Kill-Switch reset');
76
+ this.tenantState.delete(tenantId);
77
+ this.eventEmitter?.emitEvent({
78
+ type: 'killswitch.deactivated',
79
+ timestamp: new Date().toISOString(),
80
+ tenantId,
81
+ data: { reason: reason ?? 'Manual reset', previousReason: state.reason, tenantId },
82
+ });
83
+ return;
84
+ }
85
+ if (!this.globalActive)
86
+ return;
87
+ const previousReason = this.globalReason;
88
+ const activatedAt = this.globalActivatedAt;
89
+ this.logger.warn({ previousReason, activatedAt, resetReason: reason }, 'Kill-Switch reset');
90
+ this.globalActive = false;
91
+ this.globalActivatedAt = undefined;
92
+ this.globalReason = undefined;
93
+ this.eventEmitter?.emitEvent({
94
+ type: 'killswitch.deactivated',
95
+ timestamp: new Date().toISOString(),
96
+ data: { reason: reason ?? 'Manual reset', previousReason },
97
+ });
98
+ }
99
+ /**
100
+ * Get the current kill-switch status.
101
+ * With tenantId: returns tenant-specific status.
102
+ */
103
+ getStatus(tenantId) {
104
+ if (tenantId) {
105
+ const state = this.tenantState.get(tenantId);
106
+ return {
107
+ active: state?.active ?? false,
108
+ activatedAt: state?.activatedAt,
109
+ reason: state?.reason,
110
+ };
111
+ }
112
+ return {
113
+ active: this.globalActive,
114
+ activatedAt: this.globalActivatedAt,
115
+ reason: this.globalReason,
116
+ };
117
+ }
118
+ }
119
+ //# sourceMappingURL=kill-switch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"kill-switch.js","sourceRoot":"","sources":["../../src/lifecycle/kill-switch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ /**
2
+ * @agentbouncr/core — Zod Schemas for GovernanceMiddleware Inputs
3
+ *
4
+ * Runtime validation for EvaluateRequest and AgentConfig.
5
+ * Policy validation re-uses policySchema from policy-schema.ts.
6
+ */
7
+ import { z } from 'zod/v4';
8
+ export declare const evaluateRequestSchema: z.ZodObject<{
9
+ agentId: z.ZodString;
10
+ tool: z.ZodString;
11
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
12
+ traceId: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ export declare const agentConfigSchema: z.ZodObject<{
15
+ agentId: z.ZodString;
16
+ name: z.ZodString;
17
+ description: z.ZodOptional<z.ZodString>;
18
+ allowedTools: z.ZodDefault<z.ZodArray<z.ZodString>>;
19
+ policyName: z.ZodOptional<z.ZodString>;
20
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
21
+ }, z.core.$strip>;
22
+ export declare const dryRunRequestSchema: z.ZodObject<{
23
+ agentId: z.ZodString;
24
+ tool: z.ZodString;
25
+ params: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
26
+ traceId: z.ZodOptional<z.ZodString>;
27
+ policy: z.ZodObject<{
28
+ name: z.ZodString;
29
+ version: z.ZodString;
30
+ agentId: z.ZodOptional<z.ZodString>;
31
+ rules: z.ZodArray<z.ZodObject<{
32
+ name: z.ZodOptional<z.ZodString>;
33
+ tool: z.ZodString;
34
+ effect: z.ZodEnum<{
35
+ allow: "allow";
36
+ deny: "deny";
37
+ }>;
38
+ condition: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodRecord<z.ZodString, z.ZodUnion<readonly [z.ZodString, z.ZodNumber, z.ZodBoolean, z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>]>>>>;
39
+ reason: z.ZodOptional<z.ZodString>;
40
+ rateLimit: z.ZodOptional<z.ZodObject<{
41
+ maxPerMinute: z.ZodNumber;
42
+ }, z.core.$strip>>;
43
+ requireApproval: z.ZodOptional<z.ZodBoolean>;
44
+ }, z.core.$strip>>;
45
+ createdAt: z.ZodString;
46
+ updatedAt: z.ZodString;
47
+ }, z.core.$strip>;
48
+ }, z.core.$strip>;
49
+ //# sourceMappingURL=middleware-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-schemas.d.ts","sourceRoot":"","sources":["../../src/lifecycle/middleware-schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAK3B,eAAO,MAAM,qBAAqB;;;;;iBAKhC,CAAC;AAIH,eAAO,MAAM,iBAAiB;;;;;;;iBAO5B,CAAC;AAIH,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;iBAM9B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * @agentbouncr/core — Zod Schemas for GovernanceMiddleware Inputs
3
+ *
4
+ * Runtime validation for EvaluateRequest and AgentConfig.
5
+ * Policy validation re-uses policySchema from policy-schema.ts.
6
+ */
7
+ import { z } from 'zod/v4';
8
+ import { policySchema } from '../core/policy-schema.js';
9
+ // --- EvaluateRequest Schema ---
10
+ export const evaluateRequestSchema = z.object({
11
+ agentId: z.string().min(1),
12
+ tool: z.string().min(1),
13
+ params: z.record(z.string(), z.unknown()).optional(),
14
+ traceId: z.string().optional(),
15
+ });
16
+ // --- AgentConfig Schema ---
17
+ export const agentConfigSchema = z.object({
18
+ agentId: z.string().min(1),
19
+ name: z.string().min(1),
20
+ description: z.string().optional(),
21
+ allowedTools: z.array(z.string()).default([]),
22
+ policyName: z.string().optional(),
23
+ metadata: z.record(z.string(), z.unknown()).optional(),
24
+ });
25
+ // --- Dry-Run Request Schema ---
26
+ export const dryRunRequestSchema = z.object({
27
+ agentId: z.string().min(1),
28
+ tool: z.string().min(1),
29
+ params: z.record(z.string(), z.unknown()).optional(),
30
+ traceId: z.string().optional(),
31
+ policy: policySchema,
32
+ });
33
+ //# sourceMappingURL=middleware-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"middleware-schemas.js","sourceRoot":"","sources":["../../src/lifecycle/middleware-schemas.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAC3B,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAExD,iCAAiC;AAEjC,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,6BAA6B;AAE7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAClC,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC7C,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,iCAAiC;AAEjC,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC9B,MAAM,EAAE,YAAY;CACrB,CAAC,CAAC"}
@@ -0,0 +1,42 @@
1
+ /**
2
+ * @agentbouncr/core — Vercel AI SDK Adapter
3
+ *
4
+ * Wraps Vercel AI SDK tools with governance checks.
5
+ * Uses structural typing — NO dependency on the 'ai' package.
6
+ *
7
+ * Before each tool execution:
8
+ * 1. PolicyEngine.evaluate() is called
9
+ * 2. Events are emitted (tool_call.allowed / tool_call.denied / tool_call.error)
10
+ * 3. On deny: GovernanceError is thrown, execute is NOT called
11
+ */
12
+ import type pino from 'pino';
13
+ import type { Policy } from '../types/index.js';
14
+ import type { PolicyEngine } from '../core/policy-engine.js';
15
+ import type { GovernanceEventEmitter } from '../events/event-emitter.js';
16
+ export interface AITool {
17
+ type?: 'function';
18
+ description?: string;
19
+ parameters: unknown;
20
+ execute?: (params: Record<string, unknown>, options?: Record<string, unknown>) => PromiseLike<unknown>;
21
+ }
22
+ export type AIToolSet = Record<string, AITool>;
23
+ export interface GovernanceWrapOptions {
24
+ agentId: string;
25
+ policyEngine: PolicyEngine;
26
+ policy: Policy;
27
+ eventEmitter?: GovernanceEventEmitter;
28
+ logger: pino.Logger;
29
+ }
30
+ /**
31
+ * Wrap Vercel AI SDK tools with governance checks.
32
+ *
33
+ * Each tool's execute function is intercepted:
34
+ * - PolicyEngine.evaluate() runs BEFORE the original execute
35
+ * - On deny: throws GovernanceError, original execute is NEVER called
36
+ * - On allow: calls original execute, returns result
37
+ * - On error: emits tool_call.error, throws GovernanceError
38
+ *
39
+ * Tools without execute (description-only) are returned unchanged.
40
+ */
41
+ export declare function wrapToolsWithGovernance(tools: AIToolSet, options: GovernanceWrapOptions): AIToolSet;
42
+ //# sourceMappingURL=vercel-ai-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai-adapter.d.ts","sourceRoot":"","sources":["../../src/providers/vercel-ai-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,EAAmB,MAAM,mBAAmB,CAAC;AAEjE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAC7D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAC;AAIzE,MAAM,WAAW,MAAM;IACrB,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,CACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAC9B,WAAW,CAAC,OAAO,CAAC,CAAC;CAC3B;AAED,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,YAAY,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,sBAAsB,CAAC;IACtC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC;CACrB;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,SAAS,EAChB,OAAO,EAAE,qBAAqB,GAC7B,SAAS,CAgBX"}
@@ -0,0 +1,96 @@
1
+ /**
2
+ * @agentbouncr/core — Vercel AI SDK Adapter
3
+ *
4
+ * Wraps Vercel AI SDK tools with governance checks.
5
+ * Uses structural typing — NO dependency on the 'ai' package.
6
+ *
7
+ * Before each tool execution:
8
+ * 1. PolicyEngine.evaluate() is called
9
+ * 2. Events are emitted (tool_call.allowed / tool_call.denied / tool_call.error)
10
+ * 3. On deny: GovernanceError is thrown, execute is NOT called
11
+ */
12
+ import { GovernanceError } from '../types/index.js';
13
+ /**
14
+ * Wrap Vercel AI SDK tools with governance checks.
15
+ *
16
+ * Each tool's execute function is intercepted:
17
+ * - PolicyEngine.evaluate() runs BEFORE the original execute
18
+ * - On deny: throws GovernanceError, original execute is NEVER called
19
+ * - On allow: calls original execute, returns result
20
+ * - On error: emits tool_call.error, throws GovernanceError
21
+ *
22
+ * Tools without execute (description-only) are returned unchanged.
23
+ */
24
+ export function wrapToolsWithGovernance(tools, options) {
25
+ const wrapped = {};
26
+ for (const [toolName, tool] of Object.entries(tools)) {
27
+ if (!tool.execute) {
28
+ wrapped[toolName] = tool;
29
+ continue;
30
+ }
31
+ wrapped[toolName] = {
32
+ ...tool,
33
+ execute: createGovernedExecute(toolName, tool.execute, options),
34
+ };
35
+ }
36
+ return wrapped;
37
+ }
38
+ function createGovernedExecute(toolName, originalExecute, options) {
39
+ const { agentId, policyEngine, policy, eventEmitter, logger } = options;
40
+ return async (params, executeOptions) => {
41
+ const request = {
42
+ agentId,
43
+ tool: toolName,
44
+ params,
45
+ };
46
+ const evaluation = policyEngine.evaluate(request, policy);
47
+ if (!evaluation.allowed) {
48
+ logger.warn({ agentId, tool: toolName, traceId: evaluation.traceId, reason: evaluation.reason }, 'Tool call denied by governance');
49
+ eventEmitter?.emitEvent({
50
+ type: 'tool_call.denied',
51
+ timestamp: new Date().toISOString(),
52
+ traceId: evaluation.traceId,
53
+ agentId,
54
+ data: {
55
+ tool: toolName,
56
+ params,
57
+ reason: evaluation.reason,
58
+ appliedRules: evaluation.appliedRules,
59
+ },
60
+ });
61
+ throw new GovernanceError(evaluation.reason ?? `Tool '${toolName}' denied by policy`, 'POLICY_DENIED', 'policy_denial', { agentId, tool: toolName, traceId: evaluation.traceId });
62
+ }
63
+ // Allowed — emit event and execute
64
+ eventEmitter?.emitEvent({
65
+ type: 'tool_call.allowed',
66
+ timestamp: new Date().toISOString(),
67
+ traceId: evaluation.traceId,
68
+ agentId,
69
+ data: {
70
+ tool: toolName,
71
+ params,
72
+ appliedRules: evaluation.appliedRules,
73
+ },
74
+ });
75
+ try {
76
+ const result = await originalExecute(params, executeOptions);
77
+ return result;
78
+ }
79
+ catch (err) {
80
+ logger.error({ agentId, tool: toolName, traceId: evaluation.traceId, error: String(err) }, 'Tool execution failed');
81
+ eventEmitter?.emitEvent({
82
+ type: 'tool_call.error',
83
+ timestamp: new Date().toISOString(),
84
+ traceId: evaluation.traceId,
85
+ agentId,
86
+ data: {
87
+ tool: toolName,
88
+ params,
89
+ error: String(err),
90
+ },
91
+ });
92
+ throw new GovernanceError('Tool execution failed', 'TOOL_EXECUTION_ERROR', 'tool_error', { agentId, tool: toolName, traceId: evaluation.traceId, originalError: String(err) });
93
+ }
94
+ };
95
+ }
96
+ //# sourceMappingURL=vercel-ai-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vercel-ai-adapter.js","sourceRoot":"","sources":["../../src/providers/vercel-ai-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @agentbouncr/core — Canonical Governance Tool Schema
3
+ *
4
+ * Einheitliches Tool-Format fuer alle Adapter (MCP, Vercel AI SDK, OpenAI, LangChain, n8n).
5
+ * Zod-Schemas fuer Runtime-Validierung, TypeScript-Types per Inference.
6
+ */
7
+ import { z } from 'zod/v4';
8
+ export declare const riskLevelSchema: z.ZodEnum<{
9
+ critical: "critical";
10
+ high: "high";
11
+ medium: "medium";
12
+ low: "low";
13
+ }>;
14
+ export type RiskLevel = z.infer<typeof riskLevelSchema>;
15
+ export declare const toolSourceSchema: z.ZodEnum<{
16
+ manual: "manual";
17
+ import: "import";
18
+ mcp: "mcp";
19
+ }>;
20
+ export type ToolSource = z.infer<typeof toolSourceSchema>;
21
+ export declare const toolParameterConstraintsSchema: z.ZodObject<{
22
+ enum: z.ZodOptional<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>>;
23
+ min: z.ZodOptional<z.ZodNumber>;
24
+ max: z.ZodOptional<z.ZodNumber>;
25
+ maxLength: z.ZodOptional<z.ZodNumber>;
26
+ pattern: z.ZodOptional<z.ZodString>;
27
+ jsonSchema: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
28
+ }, z.core.$strip>;
29
+ export type ToolParameterConstraints = z.infer<typeof toolParameterConstraintsSchema>;
30
+ export declare const governanceToolParameterSchema: z.ZodType<GovernanceToolParameter>;
31
+ export interface GovernanceToolParameter {
32
+ name: string;
33
+ type: 'string' | 'number' | 'boolean' | 'object' | 'array';
34
+ required: boolean;
35
+ description?: string;
36
+ default?: unknown;
37
+ children?: GovernanceToolParameter[];
38
+ constraints?: ToolParameterConstraints;
39
+ }
40
+ export declare const governanceToolSchema: z.ZodObject<{
41
+ name: z.ZodString;
42
+ description: z.ZodOptional<z.ZodString>;
43
+ parameters: z.ZodArray<z.ZodType<GovernanceToolParameter, unknown, z.core.$ZodTypeInternals<GovernanceToolParameter, unknown>>>;
44
+ riskLevel: z.ZodEnum<{
45
+ critical: "critical";
46
+ high: "high";
47
+ medium: "medium";
48
+ low: "low";
49
+ }>;
50
+ category: z.ZodOptional<z.ZodString>;
51
+ source: z.ZodEnum<{
52
+ manual: "manual";
53
+ import: "import";
54
+ mcp: "mcp";
55
+ }>;
56
+ version: z.ZodOptional<z.ZodString>;
57
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
58
+ timeout: z.ZodOptional<z.ZodNumber>;
59
+ }, z.core.$strip>;
60
+ export type GovernanceTool = z.infer<typeof governanceToolSchema>;
61
+ export declare function parametersToJsonSchema(params: GovernanceToolParameter[]): Record<string, unknown>;
62
+ //# sourceMappingURL=tool-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema.d.ts","sourceRoot":"","sources":["../../src/schema/tool-schema.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,QAAQ,CAAC;AAI3B,eAAO,MAAM,eAAe;;;;;EAAgD,CAAC;AAC7E,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAIxD,eAAO,MAAM,gBAAgB;;;;EAAsC,CAAC;AACpE,MAAM,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,gBAAgB,CAAC,CAAC;AAI1D,eAAO,MAAM,8BAA8B;;;;;;;iBAOzC,CAAC;AAEH,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAItF,eAAO,MAAM,6BAA6B,EAAE,CAAC,CAAC,OAAO,CAAC,uBAAuB,CAQ3E,CAAC;AAEH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC3D,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,uBAAuB,EAAE,CAAC;IACrC,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AAID,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;iBAU/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAIlE,wBAAgB,sBAAsB,CACpC,MAAM,EAAE,uBAAuB,EAAE,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+CzB"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * @agentbouncr/core — Canonical Governance Tool Schema
3
+ *
4
+ * Einheitliches Tool-Format fuer alle Adapter (MCP, Vercel AI SDK, OpenAI, LangChain, n8n).
5
+ * Zod-Schemas fuer Runtime-Validierung, TypeScript-Types per Inference.
6
+ */
7
+ import { z } from 'zod/v4';
8
+ // --- Risk Level ---
9
+ export const riskLevelSchema = z.enum(['critical', 'high', 'medium', 'low']);
10
+ // --- Tool Source ---
11
+ export const toolSourceSchema = z.enum(['manual', 'import', 'mcp']);
12
+ // --- Parameter Constraints ---
13
+ export const toolParameterConstraintsSchema = z.object({
14
+ enum: z.array(z.union([z.string(), z.number()])).optional(),
15
+ min: z.number().optional(),
16
+ max: z.number().optional(),
17
+ maxLength: z.number().optional(),
18
+ pattern: z.string().optional(),
19
+ jsonSchema: z.record(z.string(), z.unknown()).optional(),
20
+ });
21
+ // --- Tool Parameter (recursive for nested objects) ---
22
+ export const governanceToolParameterSchema = z.object({
23
+ name: z.string().min(1),
24
+ type: z.enum(['string', 'number', 'boolean', 'object', 'array']),
25
+ required: z.boolean(),
26
+ description: z.string().optional(),
27
+ default: z.unknown().optional(),
28
+ children: z.lazy(() => z.array(governanceToolParameterSchema)).optional(),
29
+ constraints: toolParameterConstraintsSchema.optional(),
30
+ });
31
+ // --- Governance Tool ---
32
+ export const governanceToolSchema = z.object({
33
+ name: z.string().min(1),
34
+ description: z.string().optional(),
35
+ parameters: z.array(governanceToolParameterSchema),
36
+ riskLevel: riskLevelSchema,
37
+ category: z.string().optional(),
38
+ source: toolSourceSchema,
39
+ version: z.string().optional(),
40
+ tags: z.array(z.string()).optional(),
41
+ timeout: z.number().positive().optional(),
42
+ });
43
+ // --- Utility: Convert GovernanceToolParameter[] to JSON Schema ---
44
+ export function parametersToJsonSchema(params) {
45
+ const properties = {};
46
+ const required = [];
47
+ for (const param of params) {
48
+ const prop = { type: param.type };
49
+ if (param.description) {
50
+ prop.description = param.description;
51
+ }
52
+ if (param.default !== undefined) {
53
+ prop.default = param.default;
54
+ }
55
+ if (param.constraints) {
56
+ if (param.constraints.enum)
57
+ prop.enum = param.constraints.enum;
58
+ if (param.constraints.min !== undefined)
59
+ prop.minimum = param.constraints.min;
60
+ if (param.constraints.max !== undefined)
61
+ prop.maximum = param.constraints.max;
62
+ if (param.constraints.maxLength !== undefined)
63
+ prop.maxLength = param.constraints.maxLength;
64
+ if (param.constraints.pattern)
65
+ prop.pattern = param.constraints.pattern;
66
+ }
67
+ if (param.type === 'object' && param.children) {
68
+ const nested = parametersToJsonSchema(param.children);
69
+ prop.properties = nested.properties;
70
+ if (nested.required?.length > 0) {
71
+ prop.required = nested.required;
72
+ }
73
+ }
74
+ if (param.type === 'array' && param.children?.length === 1) {
75
+ prop.items = { type: param.children[0].type };
76
+ }
77
+ properties[param.name] = prop;
78
+ if (param.required) {
79
+ required.push(param.name);
80
+ }
81
+ }
82
+ return {
83
+ type: 'object',
84
+ properties,
85
+ ...(required.length > 0 ? { required } : {}),
86
+ };
87
+ }
88
+ //# sourceMappingURL=tool-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-schema.js","sourceRoot":"","sources":["../../src/schema/tool-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @agentbouncr/core — Tracing Module (W3C Trace Context)
3
+ */
4
+ export { TraceProvider } from './trace-provider.js';
5
+ export { createTraceContext, generateTraceId, generateSpanId, isValidTraceId, isValidSpanId, parseTraceparent, type TraceContext, } from './trace-context.js';
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,KAAK,YAAY,GAClB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * @agentbouncr/core — Tracing Module (W3C Trace Context)
3
+ */
4
+ export { TraceProvider } from './trace-provider.js';
5
+ export { createTraceContext, generateTraceId, generateSpanId, isValidTraceId, isValidSpanId, parseTraceparent, } from './trace-context.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tracing/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,cAAc,EACd,aAAa,EACb,gBAAgB,GAEjB,MAAM,oBAAoB,CAAC"}
@@ -0,0 +1,37 @@
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
+ export interface TraceContext {
13
+ /** 32 lowercase hex characters (128-bit trace identifier) */
14
+ readonly traceId: string;
15
+ /** 16 lowercase hex characters (64-bit span identifier) */
16
+ readonly spanId: string;
17
+ /** Full W3C traceparent header value */
18
+ readonly traceparent: string;
19
+ }
20
+ export declare function generateTraceId(): string;
21
+ export declare function generateSpanId(): string;
22
+ export declare function isValidTraceId(traceId: string): boolean;
23
+ export declare function isValidSpanId(spanId: string): boolean;
24
+ /**
25
+ * Create a TraceContext. Reuses valid traceId/spanId if provided,
26
+ * otherwise generates new ones.
27
+ */
28
+ export declare function createTraceContext(traceId?: string, spanId?: string): TraceContext;
29
+ /**
30
+ * Parse a W3C traceparent header string into a TraceContext.
31
+ * Returns null for invalid formats.
32
+ *
33
+ * Format: "{version}-{traceId}-{spanId}-{flags}"
34
+ * Example: "00-4bf92f3577b34da6a3ce929d0e0e4736-00f067aa0ba902b7-01"
35
+ */
36
+ export declare function parseTraceparent(header: string): TraceContext | null;
37
+ //# sourceMappingURL=trace-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context.d.ts","sourceRoot":"","sources":["../../src/tracing/trace-context.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,MAAM,WAAW,YAAY;IAC3B,6DAA6D;IAC7D,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,wCAAwC;IACxC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAiBD,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAED,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAID,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEvD;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAUD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,YAAY,CASlF;AAID;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,IAAI,CAapE"}