@frontmcp/plugins 0.4.1 → 0.5.1

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 (98) hide show
  1. package/package.json +8 -3
  2. package/src/cache/cache.plugin.js +27 -25
  3. package/src/cache/cache.plugin.js.map +1 -1
  4. package/src/cache/providers/cache-memory.provider.js +2 -1
  5. package/src/cache/providers/cache-memory.provider.js.map +1 -1
  6. package/src/cache/providers/cache-redis.provider.js +1 -0
  7. package/src/cache/providers/cache-redis.provider.js.map +1 -1
  8. package/src/codecall/README.md +999 -0
  9. package/src/codecall/codecall.plugin.d.ts +41 -0
  10. package/src/codecall/codecall.plugin.js +152 -0
  11. package/src/codecall/codecall.plugin.js.map +1 -0
  12. package/src/codecall/codecall.symbol.d.ts +106 -0
  13. package/src/codecall/codecall.symbol.js +4 -0
  14. package/src/codecall/codecall.symbol.js.map +1 -0
  15. package/src/codecall/codecall.types.d.ts +289 -0
  16. package/src/codecall/codecall.types.js +258 -0
  17. package/src/codecall/codecall.types.js.map +1 -0
  18. package/src/codecall/errors/index.d.ts +1 -0
  19. package/src/codecall/errors/index.js +6 -0
  20. package/src/codecall/errors/index.js.map +1 -0
  21. package/src/codecall/errors/tool-call.errors.d.ts +79 -0
  22. package/src/codecall/errors/tool-call.errors.js +119 -0
  23. package/src/codecall/errors/tool-call.errors.js.map +1 -0
  24. package/src/codecall/index.d.ts +2 -0
  25. package/src/codecall/index.js +8 -0
  26. package/src/codecall/index.js.map +1 -0
  27. package/src/codecall/providers/code-call.config.d.ts +29 -0
  28. package/src/codecall/providers/code-call.config.js +120 -0
  29. package/src/codecall/providers/code-call.config.js.map +1 -0
  30. package/src/codecall/security/index.d.ts +2 -0
  31. package/src/codecall/security/index.js +7 -0
  32. package/src/codecall/security/index.js.map +1 -0
  33. package/src/codecall/security/self-reference-guard.d.ts +32 -0
  34. package/src/codecall/security/self-reference-guard.js +70 -0
  35. package/src/codecall/security/self-reference-guard.js.map +1 -0
  36. package/src/codecall/security/tool-access-control.service.d.ts +104 -0
  37. package/src/codecall/security/tool-access-control.service.js +170 -0
  38. package/src/codecall/security/tool-access-control.service.js.map +1 -0
  39. package/src/codecall/services/audit-logger.service.d.ts +186 -0
  40. package/src/codecall/services/audit-logger.service.js +322 -0
  41. package/src/codecall/services/audit-logger.service.js.map +1 -0
  42. package/src/codecall/services/enclave.service.d.ts +62 -0
  43. package/src/codecall/services/enclave.service.js +214 -0
  44. package/src/codecall/services/enclave.service.js.map +1 -0
  45. package/src/codecall/services/error-enrichment.service.d.ts +94 -0
  46. package/src/codecall/services/error-enrichment.service.js +387 -0
  47. package/src/codecall/services/error-enrichment.service.js.map +1 -0
  48. package/src/codecall/services/index.d.ts +6 -0
  49. package/src/codecall/services/index.js +13 -0
  50. package/src/codecall/services/index.js.map +1 -0
  51. package/src/codecall/services/output-sanitizer.d.ts +86 -0
  52. package/src/codecall/services/output-sanitizer.js +260 -0
  53. package/src/codecall/services/output-sanitizer.js.map +1 -0
  54. package/src/codecall/services/synonym-expansion.service.d.ts +66 -0
  55. package/src/codecall/services/synonym-expansion.service.js +374 -0
  56. package/src/codecall/services/synonym-expansion.service.js.map +1 -0
  57. package/src/codecall/services/tool-search.service.d.ts +175 -0
  58. package/src/codecall/services/tool-search.service.js +587 -0
  59. package/src/codecall/services/tool-search.service.js.map +1 -0
  60. package/src/codecall/tools/describe.schema.d.ts +28 -0
  61. package/src/codecall/tools/describe.schema.js +67 -0
  62. package/src/codecall/tools/describe.schema.js.map +1 -0
  63. package/src/codecall/tools/describe.tool.d.ts +35 -0
  64. package/src/codecall/tools/describe.tool.js +207 -0
  65. package/src/codecall/tools/describe.tool.js.map +1 -0
  66. package/src/codecall/tools/execute.schema.d.ts +115 -0
  67. package/src/codecall/tools/execute.schema.js +116 -0
  68. package/src/codecall/tools/execute.schema.js.map +1 -0
  69. package/src/codecall/tools/execute.tool.d.ts +5 -0
  70. package/src/codecall/tools/execute.tool.js +238 -0
  71. package/src/codecall/tools/execute.tool.js.map +1 -0
  72. package/src/codecall/tools/index.d.ts +4 -0
  73. package/src/codecall/tools/index.js +13 -0
  74. package/src/codecall/tools/index.js.map +1 -0
  75. package/src/codecall/tools/invoke.schema.d.ts +99 -0
  76. package/src/codecall/tools/invoke.schema.js +27 -0
  77. package/src/codecall/tools/invoke.schema.js.map +1 -0
  78. package/src/codecall/tools/invoke.tool.d.ts +13 -0
  79. package/src/codecall/tools/invoke.tool.js +70 -0
  80. package/src/codecall/tools/invoke.tool.js.map +1 -0
  81. package/src/codecall/tools/search.schema.d.ts +30 -0
  82. package/src/codecall/tools/search.schema.js +60 -0
  83. package/src/codecall/tools/search.schema.js.map +1 -0
  84. package/src/codecall/tools/search.tool.d.ts +5 -0
  85. package/src/codecall/tools/search.tool.js +108 -0
  86. package/src/codecall/tools/search.tool.js.map +1 -0
  87. package/src/codecall/utils/describe.utils.d.ts +86 -0
  88. package/src/codecall/utils/describe.utils.js +531 -0
  89. package/src/codecall/utils/describe.utils.js.map +1 -0
  90. package/src/codecall/utils/index.d.ts +2 -0
  91. package/src/codecall/utils/index.js +7 -0
  92. package/src/codecall/utils/index.js.map +1 -0
  93. package/src/codecall/utils/mcp-result.d.ts +6 -0
  94. package/src/codecall/utils/mcp-result.js +36 -0
  95. package/src/codecall/utils/mcp-result.js.map +1 -0
  96. package/src/index.d.ts +2 -0
  97. package/src/index.js +3 -1
  98. package/src/index.js.map +1 -1
@@ -0,0 +1,41 @@
1
+ import { DynamicPlugin, FlowCtxOf, ProviderType } from '@frontmcp/sdk';
2
+ import { CodeCallPluginOptions, CodeCallPluginOptionsInput } from './codecall.types';
3
+ export default class CodeCallPlugin extends DynamicPlugin<CodeCallPluginOptions, CodeCallPluginOptionsInput> {
4
+ options: CodeCallPluginOptions;
5
+ constructor(options?: CodeCallPluginOptionsInput);
6
+ /**
7
+ * Dynamic providers allow you to configure the plugin with custom options
8
+ * without touching the plugin decorator.
9
+ */
10
+ static dynamicProviders(options: CodeCallPluginOptionsInput): ProviderType[];
11
+ /**
12
+ * Hook into list_tools to enforce CodeCall modes:
13
+ *
14
+ * Modes:
15
+ * - codecall_only: Hide all tools from list_tools except CodeCall meta-tools.
16
+ * All other tools must be discovered via codecall:search.
17
+ * - codecall_opt_in: Show all tools in list_tools. Tools opt-in to CodeCall via metadata.
18
+ * - metadata_driven: Use per-tool metadata.codecall to control visibility in list_tools.
19
+ *
20
+ * CodeCall meta-tools (codecall:search, codecall:describe, codecall:execute, codecall:invoke)
21
+ * are ALWAYS visible regardless of mode.
22
+ */
23
+ adjustListTools(flowCtx: FlowCtxOf<'tools:list-tools'>): Promise<void>;
24
+ /**
25
+ * Determine if a tool should be visible in list_tools based on mode.
26
+ *
27
+ * @param tool - The tool entry to check
28
+ * @param mode - The current CodeCall mode
29
+ * @returns true if tool should be visible
30
+ */
31
+ private shouldShowInListTools;
32
+ /**
33
+ * Check if a tool is a CodeCall meta-tool.
34
+ * CodeCall meta-tools always remain visible.
35
+ */
36
+ private isCodeCallTool;
37
+ /**
38
+ * Extract CodeCall-specific metadata from a tool.
39
+ */
40
+ private getCodeCallMetadata;
41
+ }
@@ -0,0 +1,152 @@
1
+ "use strict";
2
+ // file: libs/plugins/src/codecall/codecall.plugin.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ const tslib_1 = require("tslib");
5
+ const sdk_1 = require("@frontmcp/sdk");
6
+ const codecall_types_1 = require("./codecall.types");
7
+ const services_1 = require("./services");
8
+ const tools_1 = require("./tools");
9
+ const code_call_config_1 = tslib_1.__importDefault(require("./providers/code-call.config"));
10
+ const enclave_service_1 = tslib_1.__importDefault(require("./services/enclave.service"));
11
+ const cache_1 = tslib_1.__importDefault(require("../cache"));
12
+ let CodeCallPlugin = class CodeCallPlugin extends sdk_1.DynamicPlugin {
13
+ options;
14
+ constructor(options = {}) {
15
+ super();
16
+ // Parse options with Zod schema to apply all defaults
17
+ this.options = codecall_types_1.codeCallPluginOptionsSchema.parse(options);
18
+ console.log('[CodeCall] Plugin initialized with mode:', this.options.mode);
19
+ }
20
+ /**
21
+ * Dynamic providers allow you to configure the plugin with custom options
22
+ * without touching the plugin decorator.
23
+ */
24
+ static dynamicProviders(options) {
25
+ // Parse options with Zod schema to apply all defaults
26
+ const parsedOptions = codecall_types_1.codeCallPluginOptionsSchema.parse(options);
27
+ // Create config instance
28
+ const config = new code_call_config_1.default(parsedOptions);
29
+ return [
30
+ {
31
+ name: 'codecall:config',
32
+ provide: code_call_config_1.default,
33
+ useValue: config,
34
+ },
35
+ {
36
+ name: 'codecall:enclave',
37
+ provide: enclave_service_1.default,
38
+ inject: () => [code_call_config_1.default],
39
+ useFactory: async (cfg) => {
40
+ return new enclave_service_1.default(cfg);
41
+ },
42
+ },
43
+ {
44
+ name: 'codecall:tool-search',
45
+ provide: services_1.ToolSearchService,
46
+ inject: () => [sdk_1.ScopeEntry],
47
+ useFactory: async (scope) => {
48
+ return new services_1.ToolSearchService({
49
+ embeddingOptions: parsedOptions.embedding,
50
+ mode: parsedOptions.mode,
51
+ includeTools: parsedOptions['includeTools'],
52
+ }, scope);
53
+ },
54
+ },
55
+ ];
56
+ }
57
+ /**
58
+ * Hook into list_tools to enforce CodeCall modes:
59
+ *
60
+ * Modes:
61
+ * - codecall_only: Hide all tools from list_tools except CodeCall meta-tools.
62
+ * All other tools must be discovered via codecall:search.
63
+ * - codecall_opt_in: Show all tools in list_tools. Tools opt-in to CodeCall via metadata.
64
+ * - metadata_driven: Use per-tool metadata.codecall to control visibility in list_tools.
65
+ *
66
+ * CodeCall meta-tools (codecall:search, codecall:describe, codecall:execute, codecall:invoke)
67
+ * are ALWAYS visible regardless of mode.
68
+ */
69
+ async adjustListTools(flowCtx) {
70
+ const { resolvedTools } = flowCtx.state;
71
+ console.log('[CodeCall] adjustListTools hook called, mode:', this.options.mode);
72
+ console.log('[CodeCall] Tools before filter:', resolvedTools?.length ?? 0);
73
+ if (!resolvedTools || resolvedTools.length === 0) {
74
+ console.log('[CodeCall] No tools to filter, returning early');
75
+ return;
76
+ }
77
+ // Filter tools based on mode
78
+ const filteredTools = resolvedTools.filter(({ tool }) => {
79
+ return this.shouldShowInListTools(tool, this.options.mode);
80
+ });
81
+ console.log('[CodeCall] Tools after filter:', filteredTools.length);
82
+ // Update the state with filtered tools
83
+ flowCtx.state.set('resolvedTools', filteredTools);
84
+ }
85
+ /**
86
+ * Determine if a tool should be visible in list_tools based on mode.
87
+ *
88
+ * @param tool - The tool entry to check
89
+ * @param mode - The current CodeCall mode
90
+ * @returns true if tool should be visible
91
+ */
92
+ shouldShowInListTools(tool, mode) {
93
+ // CodeCall meta-tools are ALWAYS visible
94
+ if (this.isCodeCallTool(tool)) {
95
+ return true;
96
+ }
97
+ // Get tool's CodeCall metadata
98
+ const codecallMeta = this.getCodeCallMetadata(tool);
99
+ switch (mode) {
100
+ case 'codecall_only':
101
+ // In codecall_only mode, only CodeCall meta-tools and tools with
102
+ // explicit visibleInListTools=true are shown
103
+ return codecallMeta?.visibleInListTools === true;
104
+ case 'codecall_opt_in':
105
+ // In opt_in mode, all tools are shown (they opt-in to CodeCall execution via metadata)
106
+ return true;
107
+ case 'metadata_driven':
108
+ // In metadata_driven mode, use per-tool metadata
109
+ // Default: show unless explicitly hidden
110
+ if (codecallMeta?.visibleInListTools === false) {
111
+ return false;
112
+ }
113
+ // If visibleInListTools is true or undefined, show the tool
114
+ return true;
115
+ default:
116
+ // Unknown mode - default to showing the tool (fail-open for UX)
117
+ return true;
118
+ }
119
+ }
120
+ /**
121
+ * Check if a tool is a CodeCall meta-tool.
122
+ * CodeCall meta-tools always remain visible.
123
+ */
124
+ isCodeCallTool(tool) {
125
+ const name = tool.name || tool.fullName;
126
+ return name.startsWith('codecall:');
127
+ }
128
+ /**
129
+ * Extract CodeCall-specific metadata from a tool.
130
+ */
131
+ getCodeCallMetadata(tool) {
132
+ return tool.metadata?.codecall;
133
+ }
134
+ };
135
+ tslib_1.__decorate([
136
+ sdk_1.ListToolsHook.Did('resolveConflicts', { priority: 1000 }),
137
+ tslib_1.__metadata("design:type", Function),
138
+ tslib_1.__metadata("design:paramtypes", [Object]),
139
+ tslib_1.__metadata("design:returntype", Promise)
140
+ ], CodeCallPlugin.prototype, "adjustListTools", null);
141
+ CodeCallPlugin = tslib_1.__decorate([
142
+ (0, sdk_1.Plugin)({
143
+ name: 'codecall',
144
+ description: 'CodeCall plugin: AgentScript-based meta-tools for orchestrating MCP tools',
145
+ providers: [],
146
+ plugins: [cache_1.default],
147
+ tools: [tools_1.SearchTool, tools_1.DescribeTool, tools_1.ExecuteTool, tools_1.InvokeTool],
148
+ }),
149
+ tslib_1.__metadata("design:paramtypes", [Object])
150
+ ], CodeCallPlugin);
151
+ exports.default = CodeCallPlugin;
152
+ //# sourceMappingURL=codecall.plugin.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecall.plugin.js","sourceRoot":"","sources":["../../../src/codecall/codecall.plugin.ts"],"names":[],"mappings":"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","sourcesContent":["// file: libs/plugins/src/codecall/codecall.plugin.ts\n\nimport { DynamicPlugin, FlowCtxOf, ListToolsHook, Plugin, ProviderType, ScopeEntry, ToolEntry } from '@frontmcp/sdk';\n\nimport {\n CodeCallMode,\n CodeCallPluginOptions,\n CodeCallPluginOptionsInput,\n CodeCallToolMetadata,\n codeCallPluginOptionsSchema,\n} from './codecall.types';\nimport { ToolSearchService } from './services';\n\nimport { SearchTool, DescribeTool, ExecuteTool, InvokeTool } from './tools';\n\nimport CodeCallConfig from './providers/code-call.config';\nimport EnclaveService from './services/enclave.service';\nimport CachePlugin from '../cache';\n\n@Plugin({\n name: 'codecall',\n description: 'CodeCall plugin: AgentScript-based meta-tools for orchestrating MCP tools',\n providers: [],\n plugins: [CachePlugin],\n tools: [SearchTool, DescribeTool, ExecuteTool, InvokeTool],\n})\nexport default class CodeCallPlugin extends DynamicPlugin<CodeCallPluginOptions, CodeCallPluginOptionsInput> {\n options: CodeCallPluginOptions;\n\n constructor(options: CodeCallPluginOptionsInput = {}) {\n super();\n // Parse options with Zod schema to apply all defaults\n this.options = codeCallPluginOptionsSchema.parse(options);\n console.log('[CodeCall] Plugin initialized with mode:', this.options.mode);\n }\n\n /**\n * Dynamic providers allow you to configure the plugin with custom options\n * without touching the plugin decorator.\n */\n static override dynamicProviders(options: CodeCallPluginOptionsInput): ProviderType[] {\n // Parse options with Zod schema to apply all defaults\n const parsedOptions = codeCallPluginOptionsSchema.parse(options);\n\n // Create config instance\n const config = new CodeCallConfig(parsedOptions);\n\n return [\n {\n name: 'codecall:config',\n provide: CodeCallConfig,\n useValue: config,\n },\n {\n name: 'codecall:enclave',\n provide: EnclaveService,\n inject: () => [CodeCallConfig],\n useFactory: async (cfg: CodeCallConfig) => {\n return new EnclaveService(cfg);\n },\n },\n {\n name: 'codecall:tool-search',\n provide: ToolSearchService,\n inject: () => [ScopeEntry],\n useFactory: async (scope: ScopeEntry) => {\n return new ToolSearchService(\n {\n embeddingOptions: parsedOptions.embedding,\n mode: parsedOptions.mode,\n includeTools: parsedOptions['includeTools'],\n },\n scope,\n );\n },\n },\n ];\n }\n\n /**\n * Hook into list_tools to enforce CodeCall modes:\n *\n * Modes:\n * - codecall_only: Hide all tools from list_tools except CodeCall meta-tools.\n * All other tools must be discovered via codecall:search.\n * - codecall_opt_in: Show all tools in list_tools. Tools opt-in to CodeCall via metadata.\n * - metadata_driven: Use per-tool metadata.codecall to control visibility in list_tools.\n *\n * CodeCall meta-tools (codecall:search, codecall:describe, codecall:execute, codecall:invoke)\n * are ALWAYS visible regardless of mode.\n */\n @ListToolsHook.Did('resolveConflicts', { priority: 1000 })\n async adjustListTools(flowCtx: FlowCtxOf<'tools:list-tools'>) {\n const { resolvedTools } = flowCtx.state;\n console.log('[CodeCall] adjustListTools hook called, mode:', this.options.mode);\n console.log('[CodeCall] Tools before filter:', resolvedTools?.length ?? 0);\n\n if (!resolvedTools || resolvedTools.length === 0) {\n console.log('[CodeCall] No tools to filter, returning early');\n return;\n }\n\n // Filter tools based on mode\n const filteredTools = resolvedTools.filter(({ tool }) => {\n return this.shouldShowInListTools(tool, this.options.mode);\n });\n\n console.log('[CodeCall] Tools after filter:', filteredTools.length);\n\n // Update the state with filtered tools\n flowCtx.state.set('resolvedTools', filteredTools);\n }\n\n /**\n * Determine if a tool should be visible in list_tools based on mode.\n *\n * @param tool - The tool entry to check\n * @param mode - The current CodeCall mode\n * @returns true if tool should be visible\n */\n private shouldShowInListTools(tool: ToolEntry<any, any, any, any>, mode: CodeCallMode): boolean {\n // CodeCall meta-tools are ALWAYS visible\n if (this.isCodeCallTool(tool)) {\n return true;\n }\n\n // Get tool's CodeCall metadata\n const codecallMeta = this.getCodeCallMetadata(tool);\n\n switch (mode) {\n case 'codecall_only':\n // In codecall_only mode, only CodeCall meta-tools and tools with\n // explicit visibleInListTools=true are shown\n return codecallMeta?.visibleInListTools === true;\n\n case 'codecall_opt_in':\n // In opt_in mode, all tools are shown (they opt-in to CodeCall execution via metadata)\n return true;\n\n case 'metadata_driven':\n // In metadata_driven mode, use per-tool metadata\n // Default: show unless explicitly hidden\n if (codecallMeta?.visibleInListTools === false) {\n return false;\n }\n // If visibleInListTools is true or undefined, show the tool\n return true;\n\n default:\n // Unknown mode - default to showing the tool (fail-open for UX)\n return true;\n }\n }\n\n /**\n * Check if a tool is a CodeCall meta-tool.\n * CodeCall meta-tools always remain visible.\n */\n private isCodeCallTool(tool: ToolEntry<any, any, any, any>): boolean {\n const name = tool.name || tool.fullName;\n return name.startsWith('codecall:');\n }\n\n /**\n * Extract CodeCall-specific metadata from a tool.\n */\n private getCodeCallMetadata(tool: ToolEntry<any, any, any, any>): CodeCallToolMetadata | undefined {\n return (tool.metadata as any)?.codecall as CodeCallToolMetadata | undefined;\n }\n}\n"]}
@@ -0,0 +1,106 @@
1
+ import { CodeCallVmPreset } from './codecall.types';
2
+ import type { ToolCallResult, CallToolOptions } from './errors';
3
+ export interface CodeCallAstValidationIssue {
4
+ kind: 'IllegalBuiltinAccess' | 'DisallowedGlobal' | 'DisallowedLoop' | 'ParseError';
5
+ message: string;
6
+ location?: {
7
+ line: number;
8
+ column: number;
9
+ };
10
+ identifier?: string;
11
+ }
12
+ export interface CodeCallAstValidationResult {
13
+ ok: boolean;
14
+ issues: CodeCallAstValidationIssue[];
15
+ transformedCode?: string;
16
+ }
17
+ /**
18
+ * Interface for the AST validator service
19
+ */
20
+ export interface CodeCallAstValidator {
21
+ /**
22
+ * Validate a JavaScript script before execution
23
+ */
24
+ validate(script: string): Promise<CodeCallAstValidationResult>;
25
+ }
26
+ /**
27
+ * Resolved VM options with all defaults applied.
28
+ * Plugins compute this once and pass into providers.
29
+ */
30
+ export interface ResolvedCodeCallVmOptions {
31
+ preset: CodeCallVmPreset;
32
+ timeoutMs: number;
33
+ allowLoops: boolean;
34
+ maxSteps?: number;
35
+ disabledBuiltins: string[];
36
+ disabledGlobals: string[];
37
+ allowConsole: boolean;
38
+ }
39
+ /**
40
+ * Environment available to code running inside the VM.
41
+ * The plugin is responsible for wiring this to the underlying tool pipeline.
42
+ */
43
+ export interface CodeCallVmEnvironment {
44
+ /**
45
+ * Call a tool from within AgentScript.
46
+ *
47
+ * @param name - Tool name (e.g., 'users:list')
48
+ * @param input - Tool input arguments
49
+ * @param options - Optional behavior configuration
50
+ * @param options.throwOnError - When true (default), throws on error.
51
+ * When false, returns { success, data, error }.
52
+ *
53
+ * SECURITY NOTES:
54
+ * - Cannot call 'codecall:*' tools (self-reference blocked)
55
+ * - Errors are sanitized - no stack traces or internal details exposed
56
+ * - Security guard errors (self-reference, access control) are NEVER catchable
57
+ */
58
+ callTool: <TInput, TResult>(name: string, input: TInput, options?: CallToolOptions) => Promise<TResult | ToolCallResult<TResult>>;
59
+ getTool: (name: string) => {
60
+ name: string;
61
+ description?: string;
62
+ inputSchema: unknown;
63
+ outputSchema?: unknown | null;
64
+ } | undefined;
65
+ console?: Console;
66
+ mcpLog?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, metadata?: Record<string, unknown>) => void;
67
+ mcpNotify?: (event: string, payload: Record<string, unknown>) => void;
68
+ }
69
+ /**
70
+ * Result from a tool search query
71
+ */
72
+ export interface ToolSearchResult {
73
+ toolName: string;
74
+ appId?: string;
75
+ description: string;
76
+ relevanceScore: number;
77
+ }
78
+ /**
79
+ * Options for searching tools
80
+ */
81
+ export interface ToolSearchOptions {
82
+ topK?: number;
83
+ appIds?: string[];
84
+ excludeToolNames?: string[];
85
+ }
86
+ /**
87
+ * Interface for the tool search service
88
+ */
89
+ export interface ToolSearch {
90
+ /**
91
+ * Search for tools matching the query
92
+ */
93
+ search(query: string, options?: ToolSearchOptions): Promise<ToolSearchResult[]>;
94
+ /**
95
+ * Check if a tool exists in the index
96
+ */
97
+ hasTool(toolName: string): boolean;
98
+ /**
99
+ * Get the total number of indexed tools
100
+ */
101
+ getTotalCount(): number;
102
+ /**
103
+ * Initialize the search index with tools
104
+ */
105
+ initialize(): Promise<void>;
106
+ }
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ // file: libs/plugins/src/codecall/codecall.symbol.ts
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ //# sourceMappingURL=codecall.symbol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codecall.symbol.js","sourceRoot":"","sources":["../../../src/codecall/codecall.symbol.ts"],"names":[],"mappings":";AAAA,qDAAqD","sourcesContent":["// file: libs/plugins/src/codecall/codecall.symbol.ts\n\nimport { CodeCallVmPreset } from './codecall.types';\nimport type { ToolCallResult, CallToolOptions } from './errors';\n\nexport interface CodeCallAstValidationIssue {\n kind: 'IllegalBuiltinAccess' | 'DisallowedGlobal' | 'DisallowedLoop' | 'ParseError';\n message: string;\n location?: { line: number; column: number };\n identifier?: string;\n}\n\nexport interface CodeCallAstValidationResult {\n ok: boolean;\n issues: CodeCallAstValidationIssue[];\n transformedCode?: string;\n}\n\n/**\n * Interface for the AST validator service\n */\nexport interface CodeCallAstValidator {\n /**\n * Validate a JavaScript script before execution\n */\n validate(script: string): Promise<CodeCallAstValidationResult>;\n}\n\n/**\n * Resolved VM options with all defaults applied.\n * Plugins compute this once and pass into providers.\n */\nexport interface ResolvedCodeCallVmOptions {\n preset: CodeCallVmPreset;\n timeoutMs: number;\n allowLoops: boolean;\n maxSteps?: number;\n disabledBuiltins: string[];\n disabledGlobals: string[];\n allowConsole: boolean;\n}\n\n/**\n * Environment available to code running inside the VM.\n * The plugin is responsible for wiring this to the underlying tool pipeline.\n */\nexport interface CodeCallVmEnvironment {\n /**\n * Call a tool from within AgentScript.\n *\n * @param name - Tool name (e.g., 'users:list')\n * @param input - Tool input arguments\n * @param options - Optional behavior configuration\n * @param options.throwOnError - When true (default), throws on error.\n * When false, returns { success, data, error }.\n *\n * SECURITY NOTES:\n * - Cannot call 'codecall:*' tools (self-reference blocked)\n * - Errors are sanitized - no stack traces or internal details exposed\n * - Security guard errors (self-reference, access control) are NEVER catchable\n */\n callTool: <TInput, TResult>(\n name: string,\n input: TInput,\n options?: CallToolOptions,\n ) => Promise<TResult | ToolCallResult<TResult>>;\n\n getTool: (name: string) =>\n | {\n name: string;\n description?: string;\n inputSchema: unknown;\n outputSchema?: unknown | null;\n }\n | undefined;\n\n console?: Console;\n\n mcpLog?: (level: 'debug' | 'info' | 'warn' | 'error', message: string, metadata?: Record<string, unknown>) => void;\n\n mcpNotify?: (event: string, payload: Record<string, unknown>) => void;\n}\n\n/**\n * Result from a tool search query\n */\nexport interface ToolSearchResult {\n toolName: string;\n appId?: string;\n description: string;\n relevanceScore: number;\n}\n\n/**\n * Options for searching tools\n */\nexport interface ToolSearchOptions {\n topK?: number;\n appIds?: string[];\n excludeToolNames?: string[];\n}\n\n/**\n * Interface for the tool search service\n */\nexport interface ToolSearch {\n /**\n * Search for tools matching the query\n */\n search(query: string, options?: ToolSearchOptions): Promise<ToolSearchResult[]>;\n\n /**\n * Check if a tool exists in the index\n */\n hasTool(toolName: string): boolean;\n\n /**\n * Get the total number of indexed tools\n */\n getTotalCount(): number;\n\n /**\n * Initialize the search index with tools\n */\n initialize(): Promise<void>;\n}\n"]}
@@ -0,0 +1,289 @@
1
+ import { z } from 'zod';
2
+ /**
3
+ * Tool info passed to the directCalls filter function
4
+ */
5
+ export interface DirectCallsFilterToolInfo {
6
+ name: string;
7
+ appId?: string;
8
+ source?: string;
9
+ tags?: string[];
10
+ }
11
+ /**
12
+ * Tool info passed to the includeTools filter function
13
+ */
14
+ export interface IncludeToolsFilterToolInfo {
15
+ name: string;
16
+ appId?: string;
17
+ source?: string;
18
+ description?: string;
19
+ tags?: string[];
20
+ }
21
+ /**
22
+ * Function type for directCalls filter
23
+ */
24
+ export type DirectCallsFilterFn = (tool: DirectCallsFilterToolInfo) => boolean;
25
+ /**
26
+ * Function type for includeTools filter
27
+ */
28
+ export type IncludeToolsFilterFn = (tool: IncludeToolsFilterToolInfo) => boolean;
29
+ export declare const codeCallModeSchema: z.ZodDefault<z.ZodEnum<{
30
+ codecall_only: "codecall_only";
31
+ codecall_opt_in: "codecall_opt_in";
32
+ metadata_driven: "metadata_driven";
33
+ }>>;
34
+ export declare const codeCallVmPresetSchema: z.ZodDefault<z.ZodEnum<{
35
+ locked_down: "locked_down";
36
+ secure: "secure";
37
+ balanced: "balanced";
38
+ experimental: "experimental";
39
+ }>>;
40
+ export declare const codeCallVmOptionsSchema: z.ZodDefault<z.ZodObject<{
41
+ preset: z.ZodDefault<z.ZodEnum<{
42
+ locked_down: "locked_down";
43
+ secure: "secure";
44
+ balanced: "balanced";
45
+ experimental: "experimental";
46
+ }>>;
47
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
48
+ allowLoops: z.ZodOptional<z.ZodBoolean>;
49
+ maxSteps: z.ZodOptional<z.ZodNumber>;
50
+ disabledBuiltins: z.ZodOptional<z.ZodArray<z.ZodString>>;
51
+ disabledGlobals: z.ZodOptional<z.ZodArray<z.ZodString>>;
52
+ allowConsole: z.ZodOptional<z.ZodBoolean>;
53
+ }, z.core.$strip>>;
54
+ export declare const codeCallDirectCallsOptionsSchema: z.ZodObject<{
55
+ enabled: z.ZodBoolean;
56
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
57
+ filter: z.ZodOptional<z.ZodCustom<DirectCallsFilterFn, DirectCallsFilterFn>>;
58
+ }, z.core.$strip>;
59
+ export declare const embeddingStrategySchema: z.ZodDefault<z.ZodEnum<{
60
+ tfidf: "tfidf";
61
+ ml: "ml";
62
+ }>>;
63
+ export declare const synonymExpansionConfigSchema: z.ZodDefault<z.ZodObject<{
64
+ enabled: z.ZodDefault<z.ZodBoolean>;
65
+ additionalSynonyms: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
66
+ replaceDefaults: z.ZodDefault<z.ZodBoolean>;
67
+ maxExpansionsPerTerm: z.ZodDefault<z.ZodNumber>;
68
+ }, z.core.$strip>>;
69
+ export declare const codeCallEmbeddingOptionsSchema: z.ZodDefault<z.ZodObject<{
70
+ strategy: z.ZodDefault<z.ZodEnum<{
71
+ tfidf: "tfidf";
72
+ ml: "ml";
73
+ }>>;
74
+ modelName: z.ZodDefault<z.ZodString>;
75
+ cacheDir: z.ZodDefault<z.ZodString>;
76
+ useHNSW: z.ZodDefault<z.ZodBoolean>;
77
+ synonymExpansion: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodDefault<z.ZodObject<{
78
+ enabled: z.ZodDefault<z.ZodBoolean>;
79
+ additionalSynonyms: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
80
+ replaceDefaults: z.ZodDefault<z.ZodBoolean>;
81
+ maxExpansionsPerTerm: z.ZodDefault<z.ZodNumber>;
82
+ }, z.core.$strip>>]>>>;
83
+ }, z.core.$strip>>;
84
+ export declare const codeCallSidecarOptionsSchema: z.ZodDefault<z.ZodObject<{
85
+ enabled: z.ZodDefault<z.ZodBoolean>;
86
+ maxTotalSize: z.ZodOptional<z.ZodNumber>;
87
+ maxReferenceSize: z.ZodOptional<z.ZodNumber>;
88
+ extractionThreshold: z.ZodOptional<z.ZodNumber>;
89
+ maxResolvedSize: z.ZodOptional<z.ZodNumber>;
90
+ allowComposites: z.ZodOptional<z.ZodBoolean>;
91
+ maxScriptLengthWhenDisabled: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
92
+ }, z.core.$strip>>;
93
+ declare const codeCallPluginOptionsObjectSchema: z.ZodObject<{
94
+ mode: z.ZodDefault<z.ZodEnum<{
95
+ codecall_only: "codecall_only";
96
+ codecall_opt_in: "codecall_opt_in";
97
+ metadata_driven: "metadata_driven";
98
+ }>>;
99
+ topK: z.ZodDefault<z.ZodNumber>;
100
+ maxDefinitions: z.ZodDefault<z.ZodNumber>;
101
+ includeTools: z.ZodOptional<z.ZodCustom<IncludeToolsFilterFn, IncludeToolsFilterFn>>;
102
+ directCalls: z.ZodOptional<z.ZodObject<{
103
+ enabled: z.ZodBoolean;
104
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
+ filter: z.ZodOptional<z.ZodCustom<DirectCallsFilterFn, DirectCallsFilterFn>>;
106
+ }, z.core.$strip>>;
107
+ vm: z.ZodDefault<z.ZodObject<{
108
+ preset: z.ZodDefault<z.ZodEnum<{
109
+ locked_down: "locked_down";
110
+ secure: "secure";
111
+ balanced: "balanced";
112
+ experimental: "experimental";
113
+ }>>;
114
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
115
+ allowLoops: z.ZodOptional<z.ZodBoolean>;
116
+ maxSteps: z.ZodOptional<z.ZodNumber>;
117
+ disabledBuiltins: z.ZodOptional<z.ZodArray<z.ZodString>>;
118
+ disabledGlobals: z.ZodOptional<z.ZodArray<z.ZodString>>;
119
+ allowConsole: z.ZodOptional<z.ZodBoolean>;
120
+ }, z.core.$strip>>;
121
+ embedding: z.ZodDefault<z.ZodObject<{
122
+ strategy: z.ZodDefault<z.ZodEnum<{
123
+ tfidf: "tfidf";
124
+ ml: "ml";
125
+ }>>;
126
+ modelName: z.ZodDefault<z.ZodString>;
127
+ cacheDir: z.ZodDefault<z.ZodString>;
128
+ useHNSW: z.ZodDefault<z.ZodBoolean>;
129
+ synonymExpansion: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodDefault<z.ZodObject<{
130
+ enabled: z.ZodDefault<z.ZodBoolean>;
131
+ additionalSynonyms: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
132
+ replaceDefaults: z.ZodDefault<z.ZodBoolean>;
133
+ maxExpansionsPerTerm: z.ZodDefault<z.ZodNumber>;
134
+ }, z.core.$strip>>]>>>;
135
+ }, z.core.$strip>>;
136
+ sidecar: z.ZodDefault<z.ZodObject<{
137
+ enabled: z.ZodDefault<z.ZodBoolean>;
138
+ maxTotalSize: z.ZodOptional<z.ZodNumber>;
139
+ maxReferenceSize: z.ZodOptional<z.ZodNumber>;
140
+ extractionThreshold: z.ZodOptional<z.ZodNumber>;
141
+ maxResolvedSize: z.ZodOptional<z.ZodNumber>;
142
+ allowComposites: z.ZodOptional<z.ZodBoolean>;
143
+ maxScriptLengthWhenDisabled: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
144
+ }, z.core.$strip>>;
145
+ }, z.core.$strip>;
146
+ export declare const codeCallPluginOptionsSchema: z.ZodPrefault<z.ZodObject<{
147
+ mode: z.ZodDefault<z.ZodEnum<{
148
+ codecall_only: "codecall_only";
149
+ codecall_opt_in: "codecall_opt_in";
150
+ metadata_driven: "metadata_driven";
151
+ }>>;
152
+ topK: z.ZodDefault<z.ZodNumber>;
153
+ maxDefinitions: z.ZodDefault<z.ZodNumber>;
154
+ includeTools: z.ZodOptional<z.ZodCustom<IncludeToolsFilterFn, IncludeToolsFilterFn>>;
155
+ directCalls: z.ZodOptional<z.ZodObject<{
156
+ enabled: z.ZodBoolean;
157
+ allowedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
158
+ filter: z.ZodOptional<z.ZodCustom<DirectCallsFilterFn, DirectCallsFilterFn>>;
159
+ }, z.core.$strip>>;
160
+ vm: z.ZodDefault<z.ZodObject<{
161
+ preset: z.ZodDefault<z.ZodEnum<{
162
+ locked_down: "locked_down";
163
+ secure: "secure";
164
+ balanced: "balanced";
165
+ experimental: "experimental";
166
+ }>>;
167
+ timeoutMs: z.ZodOptional<z.ZodNumber>;
168
+ allowLoops: z.ZodOptional<z.ZodBoolean>;
169
+ maxSteps: z.ZodOptional<z.ZodNumber>;
170
+ disabledBuiltins: z.ZodOptional<z.ZodArray<z.ZodString>>;
171
+ disabledGlobals: z.ZodOptional<z.ZodArray<z.ZodString>>;
172
+ allowConsole: z.ZodOptional<z.ZodBoolean>;
173
+ }, z.core.$strip>>;
174
+ embedding: z.ZodDefault<z.ZodObject<{
175
+ strategy: z.ZodDefault<z.ZodEnum<{
176
+ tfidf: "tfidf";
177
+ ml: "ml";
178
+ }>>;
179
+ modelName: z.ZodDefault<z.ZodString>;
180
+ cacheDir: z.ZodDefault<z.ZodString>;
181
+ useHNSW: z.ZodDefault<z.ZodBoolean>;
182
+ synonymExpansion: z.ZodDefault<z.ZodOptional<z.ZodUnion<readonly [z.ZodLiteral<false>, z.ZodDefault<z.ZodObject<{
183
+ enabled: z.ZodDefault<z.ZodBoolean>;
184
+ additionalSynonyms: z.ZodOptional<z.ZodArray<z.ZodArray<z.ZodString>>>;
185
+ replaceDefaults: z.ZodDefault<z.ZodBoolean>;
186
+ maxExpansionsPerTerm: z.ZodDefault<z.ZodNumber>;
187
+ }, z.core.$strip>>]>>>;
188
+ }, z.core.$strip>>;
189
+ sidecar: z.ZodDefault<z.ZodObject<{
190
+ enabled: z.ZodDefault<z.ZodBoolean>;
191
+ maxTotalSize: z.ZodOptional<z.ZodNumber>;
192
+ maxReferenceSize: z.ZodOptional<z.ZodNumber>;
193
+ extractionThreshold: z.ZodOptional<z.ZodNumber>;
194
+ maxResolvedSize: z.ZodOptional<z.ZodNumber>;
195
+ allowComposites: z.ZodOptional<z.ZodBoolean>;
196
+ maxScriptLengthWhenDisabled: z.ZodDefault<z.ZodNullable<z.ZodNumber>>;
197
+ }, z.core.$strip>>;
198
+ }, z.core.$strip>>;
199
+ export type CodeCallMode = z.infer<typeof codeCallModeSchema>;
200
+ export type CodeCallVmPreset = z.infer<typeof codeCallVmPresetSchema>;
201
+ export type CodeCallVmOptions = z.infer<typeof codeCallVmOptionsSchema>;
202
+ export type CodeCallDirectCallsOptions = z.infer<typeof codeCallDirectCallsOptionsSchema>;
203
+ export type EmbeddingStrategy = z.infer<typeof embeddingStrategySchema>;
204
+ export type SynonymExpansionConfig = z.infer<typeof synonymExpansionConfigSchema>;
205
+ export type CodeCallSidecarOptions = z.infer<typeof codeCallSidecarOptionsSchema>;
206
+ export type CodeCallEmbeddingOptions = z.infer<typeof codeCallEmbeddingOptionsSchema>;
207
+ export type CodeCallEmbeddingOptionsInput = z.input<typeof codeCallEmbeddingOptionsSchema>;
208
+ /**
209
+ * Resolved options type (after parsing with defaults applied).
210
+ * Use this for internal plugin logic where all defaults are guaranteed.
211
+ */
212
+ export type CodeCallPluginOptions = z.infer<typeof codeCallPluginOptionsSchema>;
213
+ /**
214
+ * Input options type (what users provide to init()).
215
+ * All fields with defaults are optional.
216
+ */
217
+ export type CodeCallPluginOptionsInput = z.input<typeof codeCallPluginOptionsObjectSchema>;
218
+ /**
219
+ * Per-tool metadata used by CodeCall.
220
+ * This maps to `metadata.codecall` on tools.
221
+ */
222
+ export interface CodeCallToolMetadata {
223
+ /**
224
+ * If true, this tool stays visible in `list_tools`
225
+ * even when CodeCall is hiding most tools.
226
+ */
227
+ visibleInListTools?: boolean;
228
+ /**
229
+ * Whether this tool can be used via CodeCall.
230
+ * Semantics depend on CodeCallMode (see README).
231
+ */
232
+ enabledInCodeCall?: boolean;
233
+ /** Optional extra indexing hints */
234
+ appId?: string;
235
+ source?: string;
236
+ tags?: string[];
237
+ }
238
+ export type CodeCallSearchInput = {
239
+ query: string;
240
+ topK?: number;
241
+ filter?: {
242
+ appIds?: string[];
243
+ tags?: string[];
244
+ includeOpenApi?: boolean;
245
+ includeInline?: boolean;
246
+ };
247
+ };
248
+ export type CodeCallSearchResult = {
249
+ tools: {
250
+ name: string;
251
+ description: string;
252
+ appId?: string;
253
+ source?: string;
254
+ score: number;
255
+ }[];
256
+ };
257
+ export type CodeCallDescribeInput = {
258
+ tools: string[];
259
+ max?: number;
260
+ };
261
+ export type CodeCallDescribeResult = {
262
+ tools: {
263
+ name: string;
264
+ description: string;
265
+ inputSchema: unknown;
266
+ outputSchema?: unknown | null;
267
+ examples?: {
268
+ input: unknown;
269
+ output?: unknown;
270
+ }[];
271
+ }[];
272
+ };
273
+ export type CodeCallExecuteInput = {
274
+ script: string;
275
+ /**
276
+ * Arbitrary, readonly context exposed as `codecallContext`.
277
+ */
278
+ context?: Record<string, unknown>;
279
+ };
280
+ declare global {
281
+ interface ExtendFrontMcpToolMetadata {
282
+ /**
283
+ * CodeCall-specific metadata, attached via `@Tool({ metadata: { codecall: ... } })`
284
+ * or whatever your decorator mapping is.
285
+ */
286
+ codecall?: CodeCallToolMetadata;
287
+ }
288
+ }
289
+ export {};