@frontmcp/plugin-codecall 0.0.1 → 0.7.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/codecall.plugin.d.ts +42 -0
  2. package/codecall.plugin.d.ts.map +1 -0
  3. package/codecall.symbol.d.ts +107 -0
  4. package/codecall.symbol.d.ts.map +1 -0
  5. package/codecall.types.d.ts +353 -0
  6. package/codecall.types.d.ts.map +1 -0
  7. package/errors/index.d.ts +2 -0
  8. package/errors/index.d.ts.map +1 -0
  9. package/errors/tool-call.errors.d.ts +80 -0
  10. package/errors/tool-call.errors.d.ts.map +1 -0
  11. package/esm/index.mjs +2625 -0
  12. package/esm/package.json +59 -0
  13. package/index.d.ts +3 -0
  14. package/index.d.ts.map +1 -0
  15. package/index.js +2668 -0
  16. package/package.json +1 -1
  17. package/providers/code-call.config.d.ts +30 -0
  18. package/providers/code-call.config.d.ts.map +1 -0
  19. package/security/index.d.ts +3 -0
  20. package/security/index.d.ts.map +1 -0
  21. package/security/self-reference-guard.d.ts +33 -0
  22. package/security/self-reference-guard.d.ts.map +1 -0
  23. package/security/tool-access-control.service.d.ts +105 -0
  24. package/security/tool-access-control.service.d.ts.map +1 -0
  25. package/services/audit-logger.service.d.ts +187 -0
  26. package/services/audit-logger.service.d.ts.map +1 -0
  27. package/services/enclave.service.d.ts +63 -0
  28. package/services/enclave.service.d.ts.map +1 -0
  29. package/services/error-enrichment.service.d.ts +95 -0
  30. package/services/error-enrichment.service.d.ts.map +1 -0
  31. package/services/index.d.ts +7 -0
  32. package/services/index.d.ts.map +1 -0
  33. package/services/output-sanitizer.d.ts +87 -0
  34. package/services/output-sanitizer.d.ts.map +1 -0
  35. package/services/synonym-expansion.service.d.ts +67 -0
  36. package/services/synonym-expansion.service.d.ts.map +1 -0
  37. package/services/tool-search.service.d.ts +196 -0
  38. package/services/tool-search.service.d.ts.map +1 -0
  39. package/tools/describe.schema.d.ts +29 -0
  40. package/tools/describe.schema.d.ts.map +1 -0
  41. package/tools/describe.tool.d.ts +36 -0
  42. package/tools/describe.tool.d.ts.map +1 -0
  43. package/tools/execute.schema.d.ts +116 -0
  44. package/tools/execute.schema.d.ts.map +1 -0
  45. package/tools/execute.tool.d.ts +6 -0
  46. package/tools/execute.tool.d.ts.map +1 -0
  47. package/tools/index.d.ts +5 -0
  48. package/tools/index.d.ts.map +1 -0
  49. package/tools/invoke.schema.d.ts +105 -0
  50. package/tools/invoke.schema.d.ts.map +1 -0
  51. package/tools/invoke.tool.d.ts +14 -0
  52. package/tools/invoke.tool.d.ts.map +1 -0
  53. package/tools/search.schema.d.ts +31 -0
  54. package/tools/search.schema.d.ts.map +1 -0
  55. package/tools/search.tool.d.ts +6 -0
  56. package/tools/search.tool.d.ts.map +1 -0
  57. package/utils/describe.utils.d.ts +87 -0
  58. package/utils/describe.utils.d.ts.map +1 -0
  59. package/utils/index.d.ts +3 -0
  60. package/utils/index.d.ts.map +1 -0
  61. package/utils/mcp-result.d.ts +7 -0
  62. package/utils/mcp-result.d.ts.map +1 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@frontmcp/plugin-codecall",
3
- "version": "0.0.1",
3
+ "version": "0.7.0",
4
4
  "description": "CodeCall plugin for FrontMCP - AgentScript-based meta-tools for orchestrating MCP tools",
5
5
  "author": "AgentFront <info@agentfront.dev>",
6
6
  "license": "Apache-2.0",
@@ -0,0 +1,30 @@
1
+ import { BaseConfig } from '@frontmcp/sdk';
2
+ import { CodeCallPluginOptions } from '../codecall.types';
3
+ import { ResolvedCodeCallVmOptions } from '../codecall.symbol';
4
+ /**
5
+ * CodeCall configuration provider with convict-like API
6
+ * Extends BaseConfig to provide type-safe dotted path access
7
+ *
8
+ * @example
9
+ * // Get values with dotted path notation
10
+ * config.get('vm.preset') // returns 'secure'
11
+ * config.get('embedding.strategy') // returns 'tfidf'
12
+ * config.get('directCalls.enabled') // returns true
13
+ *
14
+ * // Get with default value
15
+ * config.get('vm.timeoutMs', 5000) // returns value or 5000
16
+ *
17
+ * // Get entire sections
18
+ * config.getSection('vm') // returns entire vm config
19
+ * config.getAll() // returns complete config
20
+ *
21
+ * // Require values (throws if undefined)
22
+ * config.getOrThrow('mode') // throws if undefined
23
+ * config.getRequired('topK') // same as getOrThrow
24
+ */
25
+ export default class CodeCallConfig extends BaseConfig<CodeCallPluginOptions & {
26
+ resolvedVm: ResolvedCodeCallVmOptions;
27
+ }> {
28
+ constructor(options?: Partial<CodeCallPluginOptions>);
29
+ }
30
+ //# sourceMappingURL=code-call.config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-call.config.d.ts","sourceRoot":"","sources":["../../src/providers/code-call.config.ts"],"names":[],"mappings":"AAEA,OAAO,EAA2B,UAAU,EAAE,MAAM,eAAe,CAAC;AACpE,OAAO,EACL,qBAAqB,EAItB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,yBAAyB,EAAE,MAAM,oBAAoB,CAAC;AAE/D;;;;;;;;;;;;;;;;;;;;GAoBG;AAMH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU,CACpD,qBAAqB,GAAG;IAAE,UAAU,EAAE,yBAAyB,CAAA;CAAE,CAClE;gBACa,OAAO,GAAE,OAAO,CAAC,qBAAqB,CAAM;CASzD"}
@@ -0,0 +1,3 @@
1
+ export * from './self-reference-guard';
2
+ export * from './tool-access-control.service';
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/security/index.ts"],"names":[],"mappings":"AAEA,cAAc,wBAAwB,CAAC;AACvC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Check if a tool name is a CodeCall plugin tool that should be blocked.
3
+ *
4
+ * SECURITY: This is the FIRST check in callTool before ANY other processing.
5
+ * It prevents:
6
+ * - Recursive execution attacks (codecall:execute calling itself)
7
+ * - Privilege escalation via nested tool calls
8
+ * - Resource exhaustion through self-invocation loops
9
+ *
10
+ * @param toolName - The name of the tool being called
11
+ * @returns true if the tool is a blocked CodeCall tool
12
+ */
13
+ export declare function isBlockedSelfReference(toolName: string): boolean;
14
+ /**
15
+ * Assert that a tool call is not a self-reference.
16
+ * Throws SelfReferenceError if the tool is blocked.
17
+ *
18
+ * SECURITY: This function MUST be called at the very start of callTool,
19
+ * before any other validation or processing.
20
+ *
21
+ * @param toolName - The name of the tool being called
22
+ * @throws SelfReferenceError if the tool is a blocked CodeCall tool
23
+ */
24
+ export declare function assertNotSelfReference(toolName: string): void;
25
+ /**
26
+ * Get the list of blocked tool patterns for documentation/testing.
27
+ * This is informational only - the actual blocking uses isBlockedSelfReference().
28
+ */
29
+ export declare function getBlockedPatterns(): {
30
+ prefix: string;
31
+ explicit: readonly string[];
32
+ };
33
+ //# sourceMappingURL=self-reference-guard.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"self-reference-guard.d.ts","sourceRoot":"","sources":["../../src/security/self-reference-guard.ts"],"names":[],"mappings":"AAoBA;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAehE;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI7D;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAAA;CAAE,CAKpF"}
@@ -0,0 +1,105 @@
1
+ import type { AuthInfo } from '@modelcontextprotocol/sdk/server/auth/types.js';
2
+ /**
3
+ * Tool access control modes:
4
+ * - whitelist: Only explicitly allowed tools can be called (most secure)
5
+ * - blacklist: All tools allowed except explicitly blocked (default, more flexible)
6
+ * - dynamic: Evaluate access per-call based on custom function
7
+ */
8
+ export type ToolAccessMode = 'whitelist' | 'blacklist' | 'dynamic';
9
+ /**
10
+ * Tool access policy configuration.
11
+ */
12
+ export interface ToolAccessPolicy {
13
+ /**
14
+ * Access control mode.
15
+ * @default 'blacklist'
16
+ */
17
+ mode: ToolAccessMode;
18
+ /**
19
+ * Tools explicitly allowed (for whitelist mode).
20
+ * Supports exact names and glob patterns (e.g., 'users:*').
21
+ */
22
+ whitelist?: string[];
23
+ /**
24
+ * Tools explicitly blocked (for blacklist mode).
25
+ * Supports exact names and glob patterns (e.g., 'admin:*').
26
+ */
27
+ blacklist?: string[];
28
+ /**
29
+ * Pattern-based rules that apply in addition to whitelist/blacklist.
30
+ */
31
+ patterns?: {
32
+ allow?: string[];
33
+ deny?: string[];
34
+ };
35
+ /**
36
+ * Custom evaluator function for dynamic mode.
37
+ * Called for each tool access request.
38
+ */
39
+ evaluator?: (context: ToolAccessContext) => Promise<ToolAccessDecision>;
40
+ }
41
+ /**
42
+ * Context provided to the access evaluator.
43
+ */
44
+ export interface ToolAccessContext {
45
+ toolName: string;
46
+ authInfo?: AuthInfo;
47
+ executionId?: string;
48
+ callDepth: number;
49
+ timestamp: number;
50
+ }
51
+ /**
52
+ * Decision from the access control check.
53
+ */
54
+ export interface ToolAccessDecision {
55
+ allowed: boolean;
56
+ reason?: string;
57
+ }
58
+ /**
59
+ * Tool Access Control Service
60
+ *
61
+ * Provides centralized access control for tool calls within CodeCall.
62
+ * Implements a layered security model:
63
+ *
64
+ * 1. Self-reference blocking (handled separately in self-reference-guard.ts)
65
+ * 2. Default blacklist (always enforced)
66
+ * 3. User-configured whitelist/blacklist
67
+ * 4. Pattern matching (glob patterns)
68
+ * 5. Dynamic evaluation (if configured)
69
+ */
70
+ export declare class ToolAccessControlService {
71
+ private readonly policy;
72
+ private readonly whitelistSet;
73
+ private readonly blacklistSet;
74
+ private readonly allowPatterns;
75
+ private readonly denyPatterns;
76
+ constructor(policy?: ToolAccessPolicy);
77
+ /**
78
+ * Check if a tool can be accessed.
79
+ *
80
+ * @param toolName - The tool being accessed
81
+ * @param context - Optional access context for dynamic evaluation
82
+ * @returns Decision indicating if access is allowed
83
+ */
84
+ checkAccess(toolName: string, context?: Partial<ToolAccessContext>): Promise<ToolAccessDecision>;
85
+ private checkWhitelistMode;
86
+ private checkBlacklistMode;
87
+ private checkDynamicMode;
88
+ /**
89
+ * Check if a tool name matches any entry in a set (supports glob patterns).
90
+ */
91
+ private isInSet;
92
+ /**
93
+ * Convert a glob pattern to a RegExp.
94
+ * Supports: * (any characters), ? (single character)
95
+ *
96
+ * Security: Prevents ReDoS by limiting pattern complexity and using non-greedy matching.
97
+ */
98
+ private globToRegex;
99
+ /**
100
+ * Get the current policy configuration (for debugging/testing).
101
+ */
102
+ getPolicy(): Readonly<ToolAccessPolicy>;
103
+ }
104
+ export default ToolAccessControlService;
105
+ //# sourceMappingURL=tool-access-control.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-access-control.service.d.ts","sourceRoot":"","sources":["../../src/security/tool-access-control.service.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gDAAgD,CAAC;AAE/E;;;;;GAKG;AACH,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC;AAEnE;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,IAAI,EAAE,cAAc,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IAErB;;OAEG;IACH,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACjB,CAAC;IAEF;;;OAGG;IACH,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,iBAAiB,KAAK,OAAO,CAAC,kBAAkB,CAAC,CAAC;CACzE;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAeD;;;;;;;;;;;GAWG;AACH,qBAIa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAmB;IAC1C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAc;IAC3C,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAW;IACzC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAW;gBAE5B,MAAM,CAAC,EAAE,gBAAgB;IAWrC;;;;;;OAMG;IACG,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAsCxF,kBAAkB;YAqBlB,kBAAkB;YAelB,gBAAgB;IAS9B;;OAEG;IACH,OAAO,CAAC,OAAO;IAmBf;;;;;OAKG;IACH,OAAO,CAAC,WAAW;IAenB;;OAEG;IACH,SAAS,IAAI,QAAQ,CAAC,gBAAgB,CAAC;CAGxC;AAED,eAAe,wBAAwB,CAAC"}
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Audit event types for CodeCall operations.
3
+ */
4
+ export declare const AUDIT_EVENT_TYPES: {
5
+ /** Script execution started */
6
+ readonly EXECUTION_START: "codecall:execution:start";
7
+ /** Script execution completed successfully */
8
+ readonly EXECUTION_SUCCESS: "codecall:execution:success";
9
+ /** Script execution failed */
10
+ readonly EXECUTION_FAILURE: "codecall:execution:failure";
11
+ /** Script execution timed out */
12
+ readonly EXECUTION_TIMEOUT: "codecall:execution:timeout";
13
+ /** Tool call initiated from script */
14
+ readonly TOOL_CALL_START: "codecall:tool:call:start";
15
+ /** Tool call completed successfully */
16
+ readonly TOOL_CALL_SUCCESS: "codecall:tool:call:success";
17
+ /** Tool call failed */
18
+ readonly TOOL_CALL_FAILURE: "codecall:tool:call:failure";
19
+ /** Self-reference attack blocked */
20
+ readonly SECURITY_SELF_REFERENCE: "codecall:security:self-reference";
21
+ /** Tool access denied */
22
+ readonly SECURITY_ACCESS_DENIED: "codecall:security:access-denied";
23
+ /** AST validation failed (blocked code pattern) */
24
+ readonly SECURITY_AST_BLOCKED: "codecall:security:ast-blocked";
25
+ /** Search performed */
26
+ readonly SEARCH_PERFORMED: "codecall:search:performed";
27
+ /** Tool described */
28
+ readonly DESCRIBE_PERFORMED: "codecall:describe:performed";
29
+ /** Direct invoke performed */
30
+ readonly INVOKE_PERFORMED: "codecall:invoke:performed";
31
+ };
32
+ export type AuditEventType = (typeof AUDIT_EVENT_TYPES)[keyof typeof AUDIT_EVENT_TYPES];
33
+ /**
34
+ * Base audit event structure.
35
+ */
36
+ export interface AuditEvent {
37
+ /** Event type */
38
+ type: AuditEventType;
39
+ /** ISO timestamp */
40
+ timestamp: string;
41
+ /** Unique execution ID for correlation */
42
+ executionId: string;
43
+ /** Duration in milliseconds (if applicable) */
44
+ durationMs?: number;
45
+ /** Additional event-specific data */
46
+ data?: Record<string, unknown>;
47
+ }
48
+ /**
49
+ * Execution audit event with script details.
50
+ */
51
+ export interface ExecutionAuditEvent extends AuditEvent {
52
+ type: typeof AUDIT_EVENT_TYPES.EXECUTION_START | typeof AUDIT_EVENT_TYPES.EXECUTION_SUCCESS | typeof AUDIT_EVENT_TYPES.EXECUTION_FAILURE | typeof AUDIT_EVENT_TYPES.EXECUTION_TIMEOUT;
53
+ data: {
54
+ /** Script hash (NOT the full script - security!) */
55
+ scriptHash: string;
56
+ /** Script length in characters */
57
+ scriptLength: number;
58
+ /** Number of tool calls made */
59
+ toolCallCount?: number;
60
+ /** Error message (sanitized) if failed */
61
+ error?: string;
62
+ };
63
+ }
64
+ /**
65
+ * Tool call audit event.
66
+ */
67
+ export interface ToolCallAuditEvent extends AuditEvent {
68
+ type: typeof AUDIT_EVENT_TYPES.TOOL_CALL_START | typeof AUDIT_EVENT_TYPES.TOOL_CALL_SUCCESS | typeof AUDIT_EVENT_TYPES.TOOL_CALL_FAILURE;
69
+ data: {
70
+ /** Tool name */
71
+ toolName: string;
72
+ /** Call depth (nested calls) */
73
+ callDepth: number;
74
+ /** Error code if failed */
75
+ errorCode?: string;
76
+ };
77
+ }
78
+ /**
79
+ * Security audit event.
80
+ */
81
+ export interface SecurityAuditEvent extends AuditEvent {
82
+ type: typeof AUDIT_EVENT_TYPES.SECURITY_SELF_REFERENCE | typeof AUDIT_EVENT_TYPES.SECURITY_ACCESS_DENIED | typeof AUDIT_EVENT_TYPES.SECURITY_AST_BLOCKED;
83
+ data: {
84
+ /** What was blocked */
85
+ blocked: string;
86
+ /** Reason for blocking */
87
+ reason: string;
88
+ };
89
+ }
90
+ /**
91
+ * Audit event listener function type.
92
+ */
93
+ export type AuditEventListener = (event: AuditEvent) => void;
94
+ /**
95
+ * Audit Logger Service
96
+ *
97
+ * Provides centralized audit logging for all CodeCall operations.
98
+ * Uses the SDK event emitter pattern for integration with external systems.
99
+ *
100
+ * Security considerations:
101
+ * - NEVER logs full scripts (only hashes)
102
+ * - NEVER logs tool inputs/outputs (only metadata)
103
+ * - NEVER logs sensitive error details (only sanitized messages)
104
+ * - All events include execution ID for correlation
105
+ */
106
+ export declare class AuditLoggerService {
107
+ private listeners;
108
+ private executionCounter;
109
+ /**
110
+ * Subscribe to audit events.
111
+ *
112
+ * @param listener - Function to call when events occur
113
+ * @returns Unsubscribe function
114
+ */
115
+ subscribe(listener: AuditEventListener): () => void;
116
+ /**
117
+ * Generate a unique execution ID.
118
+ */
119
+ generateExecutionId(): string;
120
+ /**
121
+ * Log execution start.
122
+ */
123
+ logExecutionStart(executionId: string, script: string): void;
124
+ /**
125
+ * Log execution success.
126
+ */
127
+ logExecutionSuccess(executionId: string, script: string, durationMs: number, toolCallCount: number): void;
128
+ /**
129
+ * Log execution failure.
130
+ */
131
+ logExecutionFailure(executionId: string, script: string, durationMs: number, error: string): void;
132
+ /**
133
+ * Log execution timeout.
134
+ */
135
+ logExecutionTimeout(executionId: string, script: string, durationMs: number): void;
136
+ /**
137
+ * Log tool call start.
138
+ */
139
+ logToolCallStart(executionId: string, toolName: string, callDepth: number): void;
140
+ /**
141
+ * Log tool call success.
142
+ */
143
+ logToolCallSuccess(executionId: string, toolName: string, callDepth: number, durationMs: number): void;
144
+ /**
145
+ * Log tool call failure.
146
+ */
147
+ logToolCallFailure(executionId: string, toolName: string, callDepth: number, durationMs: number, errorCode: string): void;
148
+ /**
149
+ * Log security event: self-reference blocked.
150
+ */
151
+ logSecuritySelfReference(executionId: string, toolName: string): void;
152
+ /**
153
+ * Log security event: access denied.
154
+ */
155
+ logSecurityAccessDenied(executionId: string, toolName: string, reason: string): void;
156
+ /**
157
+ * Log security event: AST validation blocked.
158
+ */
159
+ logSecurityAstBlocked(executionId: string, pattern: string, reason: string): void;
160
+ /**
161
+ * Log search operation.
162
+ */
163
+ logSearch(executionId: string, query: string, resultCount: number, durationMs: number): void;
164
+ /**
165
+ * Log describe operation.
166
+ */
167
+ logDescribe(executionId: string, toolNames: string[], durationMs: number): void;
168
+ /**
169
+ * Log invoke operation.
170
+ */
171
+ logInvoke(executionId: string, toolName: string, success: boolean, durationMs: number): void;
172
+ /**
173
+ * Emit an audit event to all listeners.
174
+ */
175
+ private emit;
176
+ /**
177
+ * Create a simple hash of the script for identification.
178
+ * Uses a fast, non-cryptographic hash for performance.
179
+ */
180
+ private hashScript;
181
+ /**
182
+ * Sanitize error messages to remove sensitive information.
183
+ */
184
+ private sanitizeError;
185
+ }
186
+ export default AuditLoggerService;
187
+ //# sourceMappingURL=audit-logger.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-logger.service.d.ts","sourceRoot":"","sources":["../../src/services/audit-logger.service.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,eAAO,MAAM,iBAAiB;IAC5B,+BAA+B;;IAE/B,8CAA8C;;IAE9C,8BAA8B;;IAE9B,iCAAiC;;IAGjC,sCAAsC;;IAEtC,uCAAuC;;IAEvC,uBAAuB;;IAGvB,oCAAoC;;IAEpC,yBAAyB;;IAEzB,mDAAmD;;IAGnD,uBAAuB;;IAEvB,qBAAqB;;IAErB,8BAA8B;;CAEtB,CAAC;AAEX,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,OAAO,iBAAiB,CAAC,CAAC;AAExF;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,iBAAiB;IACjB,IAAI,EAAE,cAAc,CAAC;IACrB,oBAAoB;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,0CAA0C;IAC1C,WAAW,EAAE,MAAM,CAAC;IACpB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED;;GAEG;AACH,MAAM,WAAW,mBAAoB,SAAQ,UAAU;IACrD,IAAI,EACA,OAAO,iBAAiB,CAAC,eAAe,GACxC,OAAO,iBAAiB,CAAC,iBAAiB,GAC1C,OAAO,iBAAiB,CAAC,iBAAiB,GAC1C,OAAO,iBAAiB,CAAC,iBAAiB,CAAC;IAC/C,IAAI,EAAE;QACJ,oDAAoD;QACpD,UAAU,EAAE,MAAM,CAAC;QACnB,kCAAkC;QAClC,YAAY,EAAE,MAAM,CAAC;QACrB,gCAAgC;QAChC,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,0CAA0C;QAC1C,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,IAAI,EACA,OAAO,iBAAiB,CAAC,eAAe,GACxC,OAAO,iBAAiB,CAAC,iBAAiB,GAC1C,OAAO,iBAAiB,CAAC,iBAAiB,CAAC;IAC/C,IAAI,EAAE;QACJ,gBAAgB;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,gCAAgC;QAChC,SAAS,EAAE,MAAM,CAAC;QAClB,2BAA2B;QAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAmB,SAAQ,UAAU;IACpD,IAAI,EACA,OAAO,iBAAiB,CAAC,uBAAuB,GAChD,OAAO,iBAAiB,CAAC,sBAAsB,GAC/C,OAAO,iBAAiB,CAAC,oBAAoB,CAAC;IAClD,IAAI,EAAE;QACJ,uBAAuB;QACvB,OAAO,EAAE,MAAM,CAAC;QAChB,0BAA0B;QAC1B,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,GAAG,CAAC,KAAK,EAAE,UAAU,KAAK,IAAI,CAAC;AAE7D;;;;;;;;;;;GAWG;AACH,qBAIa,kBAAkB;IAC7B,OAAO,CAAC,SAAS,CAAsC;IACvD,OAAO,CAAC,gBAAgB,CAAK;IAE7B;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,kBAAkB,GAAG,MAAM,IAAI;IAOnD;;OAEG;IACH,mBAAmB,IAAI,MAAM;IAO7B;;OAEG;IACH,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAY5D;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI;IAczG;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;IAcjG;;OAEG;IACH,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAalF;;OAEG;IACH,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAYhF;;OAEG;IACH,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAatG;;OAEG;IACH,kBAAkB,CAChB,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,MAAM,EAClB,SAAS,EAAE,MAAM,GAChB,IAAI;IAcP;;OAEG;IACH,wBAAwB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI;IAYrE;;OAEG;IACH,uBAAuB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYpF;;OAEG;IACH,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI;IAYjF;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAa5F;;OAEG;IACH,WAAW,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAa/E;;OAEG;IACH,SAAS,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI;IAa5F;;OAEG;IACH,OAAO,CAAC,IAAI;IAaZ;;;OAGG;IACH,OAAO,CAAC,UAAU;IAUlB;;OAEG;IACH,OAAO,CAAC,aAAa;CAmBtB;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,63 @@
1
+ import type CodeCallConfig from '../providers/code-call.config';
2
+ import type { CodeCallVmEnvironment } from '../codecall.symbol';
3
+ /**
4
+ * Result from enclave execution - maps to existing VmExecutionResult interface
5
+ */
6
+ export interface EnclaveExecutionResult {
7
+ success: boolean;
8
+ result?: unknown;
9
+ error?: {
10
+ message: string;
11
+ name: string;
12
+ stack?: string;
13
+ code?: string;
14
+ toolName?: string;
15
+ toolInput?: unknown;
16
+ details?: unknown;
17
+ [key: string]: unknown;
18
+ };
19
+ logs: string[];
20
+ timedOut: boolean;
21
+ stats?: {
22
+ duration: number;
23
+ toolCallCount: number;
24
+ iterationCount: number;
25
+ };
26
+ }
27
+ /**
28
+ * Service for executing AgentScript code using enclave-vm
29
+ *
30
+ * This service wraps the Enclave class and provides:
31
+ * - Safe AgentScript execution with AST validation
32
+ * - Automatic code transformation (callTool -> __safe_callTool)
33
+ * - Runtime limits (timeout, iterations, tool calls)
34
+ * - Tool call integration with FrontMCP pipeline
35
+ */
36
+ /**
37
+ * Error thrown when script exceeds maximum length and sidecar is disabled
38
+ */
39
+ export declare class ScriptTooLargeError extends Error {
40
+ readonly code = "SCRIPT_TOO_LARGE";
41
+ readonly scriptLength: number;
42
+ readonly maxLength: number;
43
+ constructor(scriptLength: number, maxLength: number);
44
+ }
45
+ export default class EnclaveService {
46
+ private readonly vmOptions;
47
+ private readonly sidecarOptions;
48
+ constructor(config: CodeCallConfig);
49
+ /**
50
+ * Execute AgentScript code in the enclave
51
+ *
52
+ * @param code - The AgentScript code to execute (raw, not transformed)
53
+ * @param environment - The VM environment with callTool, getTool, etc.
54
+ * @returns Execution result with success/error and logs
55
+ * @throws ScriptTooLargeError if script exceeds max length and sidecar is disabled
56
+ */
57
+ execute(code: string, environment: CodeCallVmEnvironment): Promise<EnclaveExecutionResult>;
58
+ /**
59
+ * Map Enclave ExecutionResult to EnclaveExecutionResult
60
+ */
61
+ private mapEnclaveResult;
62
+ }
63
+ //# sourceMappingURL=enclave.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"enclave.service.d.ts","sourceRoot":"","sources":["../../src/services/enclave.service.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAC;AAChE,OAAO,KAAK,EAAE,qBAAqB,EAA6B,MAAM,oBAAoB,CAAC;AAG3F;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE;QACN,OAAO,EAAE,MAAM,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KACxB,CAAC;IACF,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,QAAQ,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE;QACN,QAAQ,EAAE,MAAM,CAAC;QACjB,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAED;;;;;;;;GAQG;AACH;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,KAAK;IAC5C,QAAQ,CAAC,IAAI,sBAAsB;IACnC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAEf,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CASpD;AAOD,MAAM,CAAC,OAAO,OAAO,cAAc;IACjC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA4B;IACtD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAyB;gBAE5C,MAAM,EAAE,cAAc;IAOlC;;;;;;;OAOG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC;IA8EhG;;OAEG;IACH,OAAO,CAAC,gBAAgB;CAuEzB"}
@@ -0,0 +1,95 @@
1
+ /**
2
+ * Error categories for classification.
3
+ */
4
+ export declare const ERROR_CATEGORIES: {
5
+ /** Script syntax or parsing error */
6
+ readonly SYNTAX: "syntax";
7
+ /** AST validation blocked dangerous code */
8
+ readonly SECURITY: "security";
9
+ /** Script exceeded timeout */
10
+ readonly TIMEOUT: "timeout";
11
+ /** Tool not found */
12
+ readonly TOOL_NOT_FOUND: "tool_not_found";
13
+ /** Tool access denied */
14
+ readonly TOOL_ACCESS_DENIED: "tool_access_denied";
15
+ /** Tool validation error */
16
+ readonly TOOL_VALIDATION: "tool_validation";
17
+ /** Tool execution error */
18
+ readonly TOOL_EXECUTION: "tool_execution";
19
+ /** Runtime error in script */
20
+ readonly RUNTIME: "runtime";
21
+ /** Unknown error */
22
+ readonly UNKNOWN: "unknown";
23
+ };
24
+ export type ErrorCategory = (typeof ERROR_CATEGORIES)[keyof typeof ERROR_CATEGORIES];
25
+ /**
26
+ * Enriched error with actionable suggestions.
27
+ */
28
+ export interface EnrichedError {
29
+ /** Error category */
30
+ category: ErrorCategory;
31
+ /** User-friendly error message */
32
+ message: string;
33
+ /** Actionable suggestions for fixing the error */
34
+ suggestions: string[];
35
+ /** Related documentation links */
36
+ docs?: string[];
37
+ /** Example of correct usage (if applicable) */
38
+ example?: string;
39
+ /** Original error code (if available) */
40
+ code?: string;
41
+ /** Whether the error is recoverable */
42
+ recoverable: boolean;
43
+ }
44
+ /**
45
+ * Error Enrichment Service
46
+ *
47
+ * Transforms raw errors into user-friendly, actionable error messages.
48
+ * Provides suggestions for fixing common errors and links to documentation.
49
+ *
50
+ * Security: Never exposes internal details, only provides helpful guidance.
51
+ */
52
+ export declare class ErrorEnrichmentService {
53
+ /**
54
+ * Enrich an error with category, suggestions, and examples.
55
+ *
56
+ * @param error - The error to enrich (Error object, string, or unknown)
57
+ * @param context - Optional context for more specific suggestions
58
+ * @returns Enriched error with actionable information
59
+ */
60
+ enrich(error: unknown, context?: {
61
+ toolName?: string;
62
+ scriptSnippet?: string;
63
+ }): EnrichedError;
64
+ /**
65
+ * Enrich a tool-specific error.
66
+ */
67
+ enrichToolError(toolName: string, errorCode: string, rawMessage?: string): EnrichedError;
68
+ /**
69
+ * Create a brief error summary for logging.
70
+ */
71
+ summarize(error: unknown): string;
72
+ /**
73
+ * Extract error message from various error types.
74
+ */
75
+ private extractMessage;
76
+ /**
77
+ * Extract error code if available.
78
+ */
79
+ private extractCode;
80
+ /**
81
+ * Format error message for user consumption.
82
+ * Removes technical details while keeping useful information.
83
+ */
84
+ private formatMessage;
85
+ /**
86
+ * Get a human-readable prefix for error category.
87
+ */
88
+ private getCategoryPrefix;
89
+ /**
90
+ * Contextualize suggestions based on context.
91
+ */
92
+ private contextualizeSuggestions;
93
+ }
94
+ export default ErrorEnrichmentService;
95
+ //# sourceMappingURL=error-enrichment.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-enrichment.service.d.ts","sourceRoot":"","sources":["../../src/services/error-enrichment.service.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,eAAO,MAAM,gBAAgB;IAC3B,qCAAqC;;IAErC,4CAA4C;;IAE5C,8BAA8B;;IAE9B,qBAAqB;;IAErB,yBAAyB;;IAEzB,4BAA4B;;IAE5B,2BAA2B;;IAE3B,8BAA8B;;IAE9B,oBAAoB;;CAEZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,gBAAgB,CAAC,CAAC,MAAM,OAAO,gBAAgB,CAAC,CAAC;AAErF;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,qBAAqB;IACrB,QAAQ,EAAE,aAAa,CAAC;IACxB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,kDAAkD;IAClD,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,kCAAkC;IAClC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,+CAA+C;IAC/C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uCAAuC;IACvC,WAAW,EAAE,OAAO,CAAC;CACtB;AAkKD;;;;;;;GAOG;AACH,qBAIa,sBAAsB;IACjC;;;;;;OAMG;IACH,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,aAAa;IAiC9F;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,aAAa;IA+ExF;;OAEG;IACH,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAKjC;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;OAEG;IACH,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,aAAa;IA6BrB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAuBzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAOjC;AAED,eAAe,sBAAsB,CAAC"}
@@ -0,0 +1,7 @@
1
+ export * from './audit-logger.service';
2
+ export * from './output-sanitizer';
3
+ export * from './error-enrichment.service';
4
+ export * from './tool-search.service';
5
+ export * from './synonym-expansion.service';
6
+ export { default as EnclaveService } from './enclave.service';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/services/index.ts"],"names":[],"mappings":"AAEA,cAAc,wBAAwB,CAAC;AACvC,cAAc,oBAAoB,CAAC;AACnC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,uBAAuB,CAAC;AACtC,cAAc,6BAA6B,CAAC;AAC5C,OAAO,EAAE,OAAO,IAAI,cAAc,EAAE,MAAM,mBAAmB,CAAC"}
@@ -0,0 +1,87 @@
1
+ /**
2
+ * Output Sanitizer for CodeCall
3
+ *
4
+ * Sanitizes script outputs to prevent information leakage through:
5
+ * - Error messages with stack traces or file paths
6
+ * - Large outputs that could contain sensitive data
7
+ * - Recursive structures that could cause DoS
8
+ *
9
+ * Security considerations:
10
+ * - All sanitization is defensive (fail-safe)
11
+ * - Outputs are truncated, not rejected
12
+ * - Circular references are handled
13
+ * - Prototype pollution is prevented
14
+ */
15
+ /**
16
+ * Configuration for output sanitization.
17
+ */
18
+ export interface OutputSanitizerConfig {
19
+ /**
20
+ * Maximum depth for nested objects/arrays.
21
+ * @default 10
22
+ */
23
+ maxDepth: number;
24
+ /**
25
+ * Maximum length for string values.
26
+ * @default 10000
27
+ */
28
+ maxStringLength: number;
29
+ /**
30
+ * Maximum number of keys in an object.
31
+ * @default 100
32
+ */
33
+ maxObjectKeys: number;
34
+ /**
35
+ * Maximum number of items in an array.
36
+ * @default 1000
37
+ */
38
+ maxArrayLength: number;
39
+ /**
40
+ * Maximum total size of serialized output in bytes.
41
+ * @default 1MB
42
+ */
43
+ maxTotalSize: number;
44
+ /**
45
+ * Remove error stack traces.
46
+ * @default true
47
+ */
48
+ removeStackTraces: boolean;
49
+ /**
50
+ * Remove file paths from strings.
51
+ * @default true
52
+ */
53
+ removeFilePaths: boolean;
54
+ }
55
+ /**
56
+ * Default sanitization configuration.
57
+ */
58
+ export declare const DEFAULT_SANITIZER_CONFIG: OutputSanitizerConfig;
59
+ /**
60
+ * Result of sanitization.
61
+ */
62
+ export interface SanitizationResult<T> {
63
+ /** Sanitized value */
64
+ value: T;
65
+ /** Whether any sanitization was applied */
66
+ wasModified: boolean;
67
+ /** Warnings about what was sanitized */
68
+ warnings: string[];
69
+ }
70
+ /**
71
+ * Sanitize output from CodeCall script execution.
72
+ *
73
+ * @param output - Raw output from script
74
+ * @param config - Sanitization configuration
75
+ * @returns Sanitized output with metadata
76
+ */
77
+ export declare function sanitizeOutput<T = unknown>(output: unknown, config?: Partial<OutputSanitizerConfig>): SanitizationResult<T>;
78
+ /**
79
+ * Quick check if a value needs sanitization.
80
+ * Used for optimization - skip sanitization for simple values.
81
+ */
82
+ export declare function needsSanitization(value: unknown): boolean;
83
+ /**
84
+ * Sanitize a log message (less aggressive than output sanitization).
85
+ */
86
+ export declare function sanitizeLogMessage(message: string, maxLength?: number): string;
87
+ //# sourceMappingURL=output-sanitizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-sanitizer.d.ts","sourceRoot":"","sources":["../../src/services/output-sanitizer.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;GAaG;AAEH;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC;;;OAGG;IACH,QAAQ,EAAE,MAAM,CAAC;IAEjB;;;OAGG;IACH,eAAe,EAAE,MAAM,CAAC;IAExB;;;OAGG;IACH,aAAa,EAAE,MAAM,CAAC;IAEtB;;;OAGG;IACH,cAAc,EAAE,MAAM,CAAC;IAEvB;;;OAGG;IACH,YAAY,EAAE,MAAM,CAAC;IAErB;;;OAGG;IACH,iBAAiB,EAAE,OAAO,CAAC;IAE3B;;;OAGG;IACH,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,qBAQrC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,kBAAkB,CAAC,CAAC;IACnC,sBAAsB;IACtB,KAAK,EAAE,CAAC,CAAC;IACT,2CAA2C;IAC3C,WAAW,EAAE,OAAO,CAAC;IACrB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,CAAC,GAAG,OAAO,EACxC,MAAM,EAAE,OAAO,EACf,MAAM,GAAE,OAAO,CAAC,qBAAqB,CAAM,GAC1C,kBAAkB,CAAC,CAAC,CAAC,CAiCvB;AAyND;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAgBzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,SAAM,GAAG,MAAM,CAoB3E"}