@matimo/core 0.1.0-alpha.9 → 0.1.2
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.
- package/README.md +341 -14
- package/dist/approval/approval-handler.d.ts +5 -1
- package/dist/approval/approval-handler.d.ts.map +1 -1
- package/dist/approval/approval-handler.js +7 -1
- package/dist/approval/approval-handler.js.map +1 -1
- package/dist/auth/oauth2-handler.d.ts +2 -2
- package/dist/auth/oauth2-handler.d.ts.map +1 -1
- package/dist/auth/oauth2-handler.js +2 -2
- package/dist/auth/oauth2-handler.js.map +1 -1
- package/dist/auth/oauth2-provider-loader.d.ts +2 -2
- package/dist/auth/oauth2-provider-loader.d.ts.map +1 -1
- package/dist/auth/oauth2-provider-loader.js +2 -2
- package/dist/auth/oauth2-provider-loader.js.map +1 -1
- package/dist/core/schema.d.ts +42 -11
- package/dist/core/schema.d.ts.map +1 -1
- package/dist/core/schema.js +42 -6
- package/dist/core/schema.js.map +1 -1
- package/dist/core/skill-content-parser.d.ts +91 -0
- package/dist/core/skill-content-parser.d.ts.map +1 -0
- package/dist/core/skill-content-parser.js +248 -0
- package/dist/core/skill-content-parser.js.map +1 -0
- package/dist/core/skill-loader.d.ts +46 -0
- package/dist/core/skill-loader.d.ts.map +1 -0
- package/dist/core/skill-loader.js +311 -0
- package/dist/core/skill-loader.js.map +1 -0
- package/dist/core/skill-registry.d.ts +131 -0
- package/dist/core/skill-registry.d.ts.map +1 -0
- package/dist/core/skill-registry.js +316 -0
- package/dist/core/skill-registry.js.map +1 -0
- package/dist/core/tfidf-embedding.d.ts +45 -0
- package/dist/core/tfidf-embedding.d.ts.map +1 -0
- package/dist/core/tfidf-embedding.js +199 -0
- package/dist/core/tfidf-embedding.js.map +1 -0
- package/dist/core/tool-loader.d.ts +4 -2
- package/dist/core/tool-loader.d.ts.map +1 -1
- package/dist/core/tool-loader.js +35 -12
- package/dist/core/tool-loader.js.map +1 -1
- package/dist/core/tool-registry.d.ts +1 -1
- package/dist/core/tool-registry.d.ts.map +1 -1
- package/dist/core/tool-registry.js +1 -1
- package/dist/core/tool-registry.js.map +1 -1
- package/dist/core/types.d.ts +204 -7
- package/dist/core/types.d.ts.map +1 -1
- package/dist/decorators/index.d.ts +1 -1
- package/dist/decorators/index.d.ts.map +1 -1
- package/dist/decorators/index.js +1 -1
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/tool-decorator.js +1 -1
- package/dist/decorators/tool-decorator.js.map +1 -1
- package/dist/encodings/parameter-encoding.d.ts +1 -1
- package/dist/encodings/parameter-encoding.d.ts.map +1 -1
- package/dist/encodings/parameter-encoding.js +10 -5
- package/dist/encodings/parameter-encoding.js.map +1 -1
- package/dist/errors/matimo-error.d.ts +11 -2
- package/dist/errors/matimo-error.d.ts.map +1 -1
- package/dist/errors/matimo-error.js +25 -1
- package/dist/errors/matimo-error.js.map +1 -1
- package/dist/executors/command-executor.d.ts +10 -3
- package/dist/executors/command-executor.d.ts.map +1 -1
- package/dist/executors/command-executor.js +30 -6
- package/dist/executors/command-executor.js.map +1 -1
- package/dist/executors/function-executor.d.ts +11 -4
- package/dist/executors/function-executor.d.ts.map +1 -1
- package/dist/executors/function-executor.js +46 -26
- package/dist/executors/function-executor.js.map +1 -1
- package/dist/executors/http-executor.d.ts +80 -5
- package/dist/executors/http-executor.d.ts.map +1 -1
- package/dist/executors/http-executor.js +233 -29
- package/dist/executors/http-executor.js.map +1 -1
- package/dist/index.d.ts +45 -23
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +34 -16
- package/dist/index.js.map +1 -1
- package/dist/integrations/langchain.d.ts +57 -2
- package/dist/integrations/langchain.d.ts.map +1 -1
- package/dist/integrations/langchain.js +71 -4
- package/dist/integrations/langchain.js.map +1 -1
- package/dist/logging/winston-logger.d.ts.map +1 -1
- package/dist/logging/winston-logger.js +9 -1
- package/dist/logging/winston-logger.js.map +1 -1
- package/dist/matimo-instance.d.ts +231 -19
- package/dist/matimo-instance.d.ts.map +1 -1
- package/dist/matimo-instance.js +747 -48
- package/dist/matimo-instance.js.map +1 -1
- package/dist/mcp/index.d.ts +18 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +24 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +141 -0
- package/dist/mcp/mcp-server.d.ts.map +1 -0
- package/dist/mcp/mcp-server.js +754 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/mcp/secrets/aws-resolver.d.ts +41 -0
- package/dist/mcp/secrets/aws-resolver.d.ts.map +1 -0
- package/dist/mcp/secrets/aws-resolver.js +141 -0
- package/dist/mcp/secrets/aws-resolver.js.map +1 -0
- package/dist/mcp/secrets/dotenv-resolver.d.ts +23 -0
- package/dist/mcp/secrets/dotenv-resolver.d.ts.map +1 -0
- package/dist/mcp/secrets/dotenv-resolver.js +94 -0
- package/dist/mcp/secrets/dotenv-resolver.js.map +1 -0
- package/dist/mcp/secrets/env-resolver.d.ts +14 -0
- package/dist/mcp/secrets/env-resolver.d.ts.map +1 -0
- package/dist/mcp/secrets/env-resolver.js +27 -0
- package/dist/mcp/secrets/env-resolver.js.map +1 -0
- package/dist/mcp/secrets/index.d.ts +14 -0
- package/dist/mcp/secrets/index.d.ts.map +1 -0
- package/dist/mcp/secrets/index.js +13 -0
- package/dist/mcp/secrets/index.js.map +1 -0
- package/dist/mcp/secrets/resolver-chain.d.ts +34 -0
- package/dist/mcp/secrets/resolver-chain.d.ts.map +1 -0
- package/dist/mcp/secrets/resolver-chain.js +141 -0
- package/dist/mcp/secrets/resolver-chain.js.map +1 -0
- package/dist/mcp/secrets/types.d.ts +73 -0
- package/dist/mcp/secrets/types.d.ts.map +1 -0
- package/dist/mcp/secrets/types.js +8 -0
- package/dist/mcp/secrets/types.js.map +1 -0
- package/dist/mcp/secrets/vault-resolver.d.ts +43 -0
- package/dist/mcp/secrets/vault-resolver.d.ts.map +1 -0
- package/dist/mcp/secrets/vault-resolver.js +127 -0
- package/dist/mcp/secrets/vault-resolver.js.map +1 -0
- package/dist/mcp/tool-converter.d.ts +40 -0
- package/dist/mcp/tool-converter.d.ts.map +1 -0
- package/dist/mcp/tool-converter.js +185 -0
- package/dist/mcp/tool-converter.js.map +1 -0
- package/dist/policy/approval-manifest.d.ts +76 -0
- package/dist/policy/approval-manifest.d.ts.map +1 -0
- package/dist/policy/approval-manifest.js +197 -0
- package/dist/policy/approval-manifest.js.map +1 -0
- package/dist/policy/content-validator.d.ts +19 -0
- package/dist/policy/content-validator.d.ts.map +1 -0
- package/dist/policy/content-validator.js +196 -0
- package/dist/policy/content-validator.js.map +1 -0
- package/dist/policy/default-policy.d.ts +46 -0
- package/dist/policy/default-policy.d.ts.map +1 -0
- package/dist/policy/default-policy.js +241 -0
- package/dist/policy/default-policy.js.map +1 -0
- package/dist/policy/events.d.ts +71 -0
- package/dist/policy/events.d.ts.map +1 -0
- package/dist/policy/events.js +8 -0
- package/dist/policy/events.js.map +1 -0
- package/dist/policy/index.d.ts +13 -0
- package/dist/policy/index.d.ts.map +1 -0
- package/dist/policy/index.js +9 -0
- package/dist/policy/index.js.map +1 -0
- package/dist/policy/integrity-tracker.d.ts +62 -0
- package/dist/policy/integrity-tracker.d.ts.map +1 -0
- package/dist/policy/integrity-tracker.js +79 -0
- package/dist/policy/integrity-tracker.js.map +1 -0
- package/dist/policy/policy-loader.d.ts +58 -0
- package/dist/policy/policy-loader.d.ts.map +1 -0
- package/dist/policy/policy-loader.js +156 -0
- package/dist/policy/policy-loader.js.map +1 -0
- package/dist/policy/risk-classifier.d.ts +18 -0
- package/dist/policy/risk-classifier.d.ts.map +1 -0
- package/dist/policy/risk-classifier.js +47 -0
- package/dist/policy/risk-classifier.js.map +1 -0
- package/dist/policy/types.d.ts +131 -0
- package/dist/policy/types.d.ts.map +1 -0
- package/dist/policy/types.js +8 -0
- package/dist/policy/types.js.map +1 -0
- package/package.json +22 -6
- package/tools/matimo_approve_tool/definition.yaml +36 -0
- package/tools/matimo_approve_tool/matimo_approve_tool.ts +90 -0
- package/tools/matimo_create_skill/definition.yaml +46 -0
- package/tools/matimo_create_skill/matimo_create_skill.ts +75 -0
- package/tools/matimo_create_tool/definition.yaml +48 -0
- package/tools/matimo_create_tool/matimo_create_tool.ts +137 -0
- package/tools/matimo_get_skill/definition.yaml +60 -0
- package/tools/matimo_get_skill/matimo_get_skill.ts +182 -0
- package/tools/matimo_get_tool/definition.yaml +36 -0
- package/tools/matimo_get_tool/matimo_get_tool.ts +56 -0
- package/tools/matimo_get_tool_status/definition.yaml +42 -0
- package/tools/matimo_get_tool_status/matimo_get_tool_status.ts +101 -0
- package/tools/matimo_list_skills/definition.yaml +52 -0
- package/tools/matimo_list_skills/matimo_list_skills.ts +138 -0
- package/tools/matimo_list_user_tools/definition.yaml +32 -0
- package/tools/matimo_list_user_tools/matimo_list_user_tools.ts +74 -0
- package/tools/matimo_reload_tools/definition.yaml +35 -0
- package/tools/matimo_reload_tools/matimo_reload_tools.ts +29 -0
- package/tools/matimo_search_tools/definition.yaml +32 -0
- package/tools/matimo_search_tools/matimo_search_tools.ts +82 -0
- package/tools/matimo_validate_skill/definition.yaml +43 -0
- package/tools/matimo_validate_skill/matimo_validate_skill.ts +137 -0
- package/tools/matimo_validate_tool/definition.yaml +34 -0
- package/tools/matimo_validate_tool/matimo_validate_tool.ts +168 -0
- package/tools/shared/skill-validation.ts +335 -0
- package/LICENSE +0 -21
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"matimo-error.js","sourceRoot":"","sources":["../../src/errors/matimo-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,
|
|
1
|
+
{"version":3,"file":"matimo-error.js","sourceRoot":"","sources":["../../src/errors/matimo-error.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,CAAN,IAAY,SAcX;AAdD,WAAY,SAAS;IACnB,8CAAiC,CAAA;IACjC,kDAAqC,CAAA;IACrC,wCAA2B,CAAA;IAC3B,8CAAiC,CAAA;IACjC,8CAAiC,CAAA;IACjC,oDAAuC,CAAA;IACvC,wDAA2C,CAAA;IAC3C,gCAAmB,CAAA;IACnB,4CAA+B,CAAA;IAC/B,oDAAuC,CAAA;IACvC,4CAA+B,CAAA;IAC/B,4CAA+B,CAAA;IAC/B,wDAA2C,CAAA;AAC7C,CAAC,EAdW,SAAS,KAAT,SAAS,QAcpB;AAED;;GAEG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAGpC,YACE,OAAe,EACR,IAAe,EACf,OAAiC,EACxC,KAAuB;QAEvB,KAAK,CAAC,OAAO,CAAC,CAAC;QAJR,SAAI,GAAJ,IAAI,CAAW;QACf,YAAO,GAAP,OAAO,CAA0B;QAIxC,IAAI,CAAC,IAAI,GAAG,aAAa,CAAC;QAC1B,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,MAAM;QACJ,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,KAAK,EACH,IAAI,CAAC,KAAK,YAAY,KAAK;gBACzB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBACxD,CAAC,CAAC,IAAI,CAAC,KAAK;SACjB,CAAC;IACJ,CAAC;CACF;AAED;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAAC,KAAc,EAAE,OAAO,GAAG,qBAAqB;IAC3E,8CAA8C;IAC9C,MAAM,KAAK,GAAG,KAA4C,CAAC;IAC3D,MAAM,QAAQ,GAAG,KAAK,EAAE,QAA+C,CAAC;IACxE,MAAM,UAAU,GAAI,QAAQ,EAAE,MAA6B,IAAI,GAAG,CAAC;IACnE,MAAM,OAAO,GAAG,QAAQ,EAAE,IAA2C,CAAC;IACtE,MAAM,IAAI,GAA4B,EAAE,UAAU,EAAE,CAAC;IACrD,IAAI,OAAO,KAAK,SAAS;QAAE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IAClD,oFAAoF;IACpF,IAAI,CAAC,aAAa,GAAG,KAAK,EAAE,OAAO,IAAI,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC;IAC3D,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,gBAAgB,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAe,EACf,OAAiC;IAEjC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,iBAAiB,EAAE,OAAO,CAAC,CAAC;AACxE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAe,EACf,OAAiC;IAEjC,OAAO,IAAI,WAAW,CAAC,OAAO,EAAE,SAAS,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AACvE,CAAC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ToolDefinition } from '../core/schema';
|
|
1
|
+
import { ToolDefinition } from '../core/schema.js';
|
|
2
2
|
/**
|
|
3
3
|
* CommandExecutor - Executes shell commands
|
|
4
4
|
* Handles parameter templating, timeouts, and error capture
|
|
@@ -7,9 +7,16 @@ export declare class CommandExecutor {
|
|
|
7
7
|
private cwd?;
|
|
8
8
|
constructor(cwd?: string);
|
|
9
9
|
/**
|
|
10
|
-
* Execute a tool that runs a shell command
|
|
10
|
+
* Execute a tool that runs a shell command.
|
|
11
|
+
*
|
|
12
|
+
* @param tool - Tool definition
|
|
13
|
+
* @param params - Tool parameters
|
|
14
|
+
* @param credentials - Optional per-call credential overrides. Keys must match the env-var
|
|
15
|
+
* names used by the tool (e.g. `SLACK_BOT_TOKEN`). When provided they are merged on top of
|
|
16
|
+
* `process.env` inside the child process so the spawned script sees them as normal env vars.
|
|
17
|
+
* Values are never logged. Falls back to the current environment when not provided.
|
|
11
18
|
*/
|
|
12
|
-
execute(tool: ToolDefinition, params: Record<string, unknown>): Promise<unknown>;
|
|
19
|
+
execute(tool: ToolDefinition, params: Record<string, unknown>, credentials?: Record<string, string>): Promise<unknown>;
|
|
13
20
|
/**
|
|
14
21
|
* Replace parameter placeholders in a string
|
|
15
22
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../src/executors/command-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"command-executor.d.ts","sourceRoot":"","sources":["../../src/executors/command-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAGnD;;;GAGG;AAEH,qBAAa,eAAe;IAC1B,OAAO,CAAC,GAAG,CAAC,CAAS;gBAET,GAAG,CAAC,EAAE,MAAM;IAIxB;;;;;;;;;OASG;IACG,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,OAAO,CAAC;IA4GnB;;OAEG;IACH,OAAO,CAAC,cAAc;CASvB;AAED,eAAe,eAAe,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { spawn } from 'child_process';
|
|
2
|
-
import { MatimoError, ErrorCode } from '../errors/matimo-error';
|
|
2
|
+
import { MatimoError, ErrorCode } from '../errors/matimo-error.js';
|
|
3
3
|
/**
|
|
4
4
|
* CommandExecutor - Executes shell commands
|
|
5
5
|
* Handles parameter templating, timeouts, and error capture
|
|
@@ -9,9 +9,16 @@ export class CommandExecutor {
|
|
|
9
9
|
this.cwd = cwd;
|
|
10
10
|
}
|
|
11
11
|
/**
|
|
12
|
-
* Execute a tool that runs a shell command
|
|
12
|
+
* Execute a tool that runs a shell command.
|
|
13
|
+
*
|
|
14
|
+
* @param tool - Tool definition
|
|
15
|
+
* @param params - Tool parameters
|
|
16
|
+
* @param credentials - Optional per-call credential overrides. Keys must match the env-var
|
|
17
|
+
* names used by the tool (e.g. `SLACK_BOT_TOKEN`). When provided they are merged on top of
|
|
18
|
+
* `process.env` inside the child process so the spawned script sees them as normal env vars.
|
|
19
|
+
* Values are never logged. Falls back to the current environment when not provided.
|
|
13
20
|
*/
|
|
14
|
-
async execute(tool, params) {
|
|
21
|
+
async execute(tool, params, credentials) {
|
|
15
22
|
if (tool.execution.type !== 'command') {
|
|
16
23
|
throw new MatimoError('Tool execution type is not command', ErrorCode.EXECUTION_FAILED, {
|
|
17
24
|
expectedType: 'command',
|
|
@@ -20,13 +27,29 @@ export class CommandExecutor {
|
|
|
20
27
|
}
|
|
21
28
|
const { command, args = [], timeout = 30000 } = tool.execution;
|
|
22
29
|
const startTime = Date.now();
|
|
23
|
-
//
|
|
24
|
-
|
|
30
|
+
// SECURITY: command must be a fixed executable — never a templated value.
|
|
31
|
+
// Only 'args' may contain {placeholder} tokens.
|
|
32
|
+
// ReDoS protection: commands are typically <256 chars; limit regex testing to 1024 chars
|
|
33
|
+
// to prevent polynomial backtracking on malicious inputs (e.g. repeated opening braces).
|
|
34
|
+
if (command.length <= 1024 && /\{[^}]+\}/u.test(command)) {
|
|
35
|
+
throw new MatimoError(`execution.command must not contain parameter placeholders — only 'args' may be templated. ` +
|
|
36
|
+
`Found: '${command}'. Move the dynamic part into 'args'.`, ErrorCode.EXECUTION_FAILED, { toolName: tool.name });
|
|
37
|
+
}
|
|
38
|
+
else if (command.length > 1024) {
|
|
39
|
+
throw new MatimoError(`execution.command exceeds maximum length (1024 chars): ${command.length} chars. ` +
|
|
40
|
+
'Command must be a simple executable path.', ErrorCode.EXECUTION_FAILED, { toolName: tool.name, length: command.length });
|
|
41
|
+
}
|
|
42
|
+
const templatedCommand = command; // Never template the executable
|
|
25
43
|
const templatedArgs = args.map((arg) => this.templateString(arg, params));
|
|
26
44
|
return new Promise((resolve) => {
|
|
27
45
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
28
46
|
const spawnOptions = {
|
|
29
47
|
stdio: ['pipe', 'pipe', 'pipe'],
|
|
48
|
+
// Merge per-call credentials on top of the current environment so that
|
|
49
|
+
// the spawned process sees them as ordinary env vars. This is safe:
|
|
50
|
+
// values are held only in memory for the duration of the spawn setup
|
|
51
|
+
// and are never written to disk or logged.
|
|
52
|
+
env: credentials ? { ...process.env, ...credentials } : process.env,
|
|
30
53
|
};
|
|
31
54
|
// Set working directory if provided
|
|
32
55
|
if (this.cwd) {
|
|
@@ -89,7 +112,8 @@ export class CommandExecutor {
|
|
|
89
112
|
let result = str;
|
|
90
113
|
for (const [key, value] of Object.entries(params)) {
|
|
91
114
|
const placeholder = `{${key}}`;
|
|
92
|
-
|
|
115
|
+
const replacement = String(value);
|
|
116
|
+
result = result.replace(new RegExp(placeholder, 'g'), () => replacement);
|
|
93
117
|
}
|
|
94
118
|
return result;
|
|
95
119
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/executors/command-executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AAEtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"command-executor.js","sourceRoot":"","sources":["../../src/executors/command-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ToolDefinition } from '../core/schema';
|
|
1
|
+
import { ToolDefinition } from '../core/schema.js';
|
|
2
2
|
/**
|
|
3
3
|
* FunctionExecutor - Executes async functions
|
|
4
4
|
* Supports functions defined in:
|
|
@@ -14,10 +14,17 @@ export declare class FunctionExecutor {
|
|
|
14
14
|
private toolsPath;
|
|
15
15
|
constructor(toolsPath?: string);
|
|
16
16
|
/**
|
|
17
|
-
* Execute a tool that runs an async function
|
|
18
|
-
* Supports both embedded code and external .ts/.js files
|
|
17
|
+
* Execute a tool that runs an async function.
|
|
18
|
+
* Supports both embedded code and external .ts/.js files.
|
|
19
|
+
*
|
|
20
|
+
* @param tool - Tool definition
|
|
21
|
+
* @param params - Tool parameters
|
|
22
|
+
* @param credentials - Optional per-call credential overrides passed as `context.credentials`
|
|
23
|
+
* to the tool function. The function can use them with:
|
|
24
|
+
* `const token = context?.credentials?.MY_TOKEN ?? process.env.MY_TOKEN;`
|
|
25
|
+
* Values are never logged. Falls back to undefined when not provided.
|
|
19
26
|
*/
|
|
20
|
-
execute(tool: ToolDefinition, params: Record<string, unknown>): Promise<unknown>;
|
|
27
|
+
execute(tool: ToolDefinition, params: Record<string, unknown>, credentials?: Record<string, string>): Promise<unknown>;
|
|
21
28
|
}
|
|
22
29
|
export default FunctionExecutor;
|
|
23
30
|
//# sourceMappingURL=function-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-executor.d.ts","sourceRoot":"","sources":["../../src/executors/function-executor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"function-executor.d.ts","sourceRoot":"","sources":["../../src/executors/function-executor.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;;;;;;;;GAUG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAAS;gBAEd,SAAS,CAAC,EAAE,MAAM;IAI9B;;;;;;;;;;OAUG;IACG,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,OAAO,CAAC;CAkMpB;AAED,eAAe,gBAAgB,CAAC"}
|
|
@@ -1,9 +1,7 @@
|
|
|
1
|
-
import fs from 'fs';
|
|
2
1
|
import path from 'path';
|
|
3
2
|
import { pathToFileURL } from 'node:url';
|
|
4
|
-
import
|
|
5
|
-
import {
|
|
6
|
-
import { getGlobalMatimoLogger } from '../logging/logger';
|
|
3
|
+
import { MatimoError, ErrorCode } from '../errors/matimo-error.js';
|
|
4
|
+
import { getGlobalMatimoLogger } from '../logging/index.js';
|
|
7
5
|
/**
|
|
8
6
|
* FunctionExecutor - Executes async functions
|
|
9
7
|
* Supports functions defined in:
|
|
@@ -20,10 +18,17 @@ export class FunctionExecutor {
|
|
|
20
18
|
this.toolsPath = toolsPath || process.cwd();
|
|
21
19
|
}
|
|
22
20
|
/**
|
|
23
|
-
* Execute a tool that runs an async function
|
|
24
|
-
* Supports both embedded code and external .ts/.js files
|
|
21
|
+
* Execute a tool that runs an async function.
|
|
22
|
+
* Supports both embedded code and external .ts/.js files.
|
|
23
|
+
*
|
|
24
|
+
* @param tool - Tool definition
|
|
25
|
+
* @param params - Tool parameters
|
|
26
|
+
* @param credentials - Optional per-call credential overrides passed as `context.credentials`
|
|
27
|
+
* to the tool function. The function can use them with:
|
|
28
|
+
* `const token = context?.credentials?.MY_TOKEN ?? process.env.MY_TOKEN;`
|
|
29
|
+
* Values are never logged. Falls back to undefined when not provided.
|
|
25
30
|
*/
|
|
26
|
-
async execute(tool, params) {
|
|
31
|
+
async execute(tool, params, credentials) {
|
|
27
32
|
if (tool.execution.type !== 'function') {
|
|
28
33
|
throw new MatimoError('Tool execution type is not function', ErrorCode.EXECUTION_FAILED, {
|
|
29
34
|
expectedType: 'function',
|
|
@@ -129,7 +134,7 @@ export class FunctionExecutor {
|
|
|
129
134
|
import(fileUrl)
|
|
130
135
|
.then((module) => {
|
|
131
136
|
const fn = (module.default || module);
|
|
132
|
-
const result = fn(params);
|
|
137
|
+
const result = fn(params, credentials ? { credentials } : undefined);
|
|
133
138
|
// Handle both Promise and non-Promise returns
|
|
134
139
|
if (result instanceof Promise) {
|
|
135
140
|
result.then(handleSuccess).catch(handleError);
|
|
@@ -141,28 +146,43 @@ export class FunctionExecutor {
|
|
|
141
146
|
.catch(handleError);
|
|
142
147
|
}
|
|
143
148
|
else {
|
|
144
|
-
//
|
|
145
|
-
//
|
|
146
|
-
//
|
|
147
|
-
//
|
|
148
|
-
|
|
149
|
-
if (
|
|
150
|
-
throw new MatimoError('
|
|
149
|
+
// ── Embedded code execution ──────────────────────────────────────
|
|
150
|
+
// Requires explicit admin opt-in: MATIMO_ALLOW_EMBEDDED_CODE=true
|
|
151
|
+
// Even when enabled, a static security scan runs before evaluation
|
|
152
|
+
// to block known exploit patterns. No dangerous globals are passed
|
|
153
|
+
// into the sandbox — only `params` is accessible.
|
|
154
|
+
if (process.env.MATIMO_ALLOW_EMBEDDED_CODE !== 'true') {
|
|
155
|
+
throw new MatimoError(`Tool '${tool.name}': embedded code execution is disabled by default. ` +
|
|
156
|
+
'Set MATIMO_ALLOW_EMBEDDED_CODE=true to enable, or use a colocated .ts/.js file instead ' +
|
|
157
|
+
"(set execution.code to its relative path, e.g. './my-tool.ts').", ErrorCode.EXECUTION_FAILED, {
|
|
151
158
|
toolName: tool.name,
|
|
152
|
-
recommendation: 'Create a separate .ts file in the tool directory
|
|
153
|
-
enableFeatureFlag: 'Set MATIMO_ALLOW_EMBEDDED_CODE=true to enable (not recommended)',
|
|
159
|
+
recommendation: 'Create a separate .ts file in the tool directory and set execution.code to its relative path',
|
|
154
160
|
});
|
|
155
161
|
}
|
|
156
|
-
//
|
|
162
|
+
// Static security scan — reject code containing dangerous constructs
|
|
163
|
+
// BEFORE new Function() is ever called.
|
|
164
|
+
const BLOCKED_PATTERNS = [
|
|
165
|
+
{ re: /\brequire\s*\(/u, label: 'require()' },
|
|
166
|
+
{ re: /\bimport\s*\(/u, label: 'dynamic import()' },
|
|
167
|
+
{ re: /\bprocess\b/u, label: 'process object' },
|
|
168
|
+
{ re: /\b__dirname\b|\b__filename\b/u, label: '__dirname / __filename' },
|
|
169
|
+
{ re: /\beval\s*\(/u, label: 'eval()' },
|
|
170
|
+
{ re: /\bnew\s+Function\b/u, label: 'new Function()' },
|
|
171
|
+
{ re: /\bglobalThis\b|\bglobal\b/u, label: 'global / globalThis' },
|
|
172
|
+
];
|
|
173
|
+
for (const { re, label } of BLOCKED_PATTERNS) {
|
|
174
|
+
if (re.test(code)) {
|
|
175
|
+
throw new MatimoError(`Embedded code in tool '${tool.name}' contains a blocked construct: '${label}'. ` +
|
|
176
|
+
'Embedded code may only access the provided params argument.', ErrorCode.EXECUTION_FAILED, { toolName: tool.name, blockedConstruct: label });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
157
179
|
const logger = getGlobalMatimoLogger();
|
|
158
|
-
logger.warn(
|
|
159
|
-
//
|
|
160
|
-
//
|
|
161
|
-
|
|
162
|
-
const fn = new Function(
|
|
163
|
-
|
|
164
|
-
const result = fn(params, {}, fs, path, axios, undefined);
|
|
165
|
-
// Handle both Promise and non-Promise returns
|
|
180
|
+
logger.warn(`Executing embedded code for tool '${tool.name}'. Ensure this tool YAML is from a trusted source.`, { toolName: tool.name });
|
|
181
|
+
// Execute with strict mode and only params in scope.
|
|
182
|
+
// No fs, path, axios, or require are passed — embedded code is
|
|
183
|
+
// intentionally limited to pure data transformation of params.
|
|
184
|
+
const fn = new Function('params', '"use strict";\nreturn (' + code + ')(params);');
|
|
185
|
+
const result = fn(params);
|
|
166
186
|
if (result instanceof Promise) {
|
|
167
187
|
result.then(handleSuccess).catch(handleError);
|
|
168
188
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"function-executor.js","sourceRoot":"","sources":["../../src/executors/function-executor.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"function-executor.js","sourceRoot":"","sources":["../../src/executors/function-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,24 +1,99 @@
|
|
|
1
|
-
import { ToolDefinition } from '../core/schema';
|
|
1
|
+
import { ToolDefinition } from '../core/schema.js';
|
|
2
2
|
/**
|
|
3
3
|
* HttpExecutor - Executes HTTP requests
|
|
4
4
|
* Handles authentication, retries, and response validation
|
|
5
5
|
*/
|
|
6
6
|
export declare class HttpExecutor {
|
|
7
7
|
/**
|
|
8
|
-
* Execute a tool that makes an HTTP request
|
|
8
|
+
* Execute a tool that makes an HTTP request.
|
|
9
|
+
*
|
|
10
|
+
* @param tool - Tool definition
|
|
11
|
+
* @param params - Tool parameters (already env-injected by MatimoInstance)
|
|
12
|
+
* @param credentials - Optional per-call credential overrides. Used for
|
|
13
|
+
* `authentication.type: basic` (username_env / password_env keys) instead of
|
|
14
|
+
* reading from `process.env`. Other auth schemes (bearer, api_key) are handled
|
|
15
|
+
* upstream via parameter templating in MatimoInstance.injectAuthParameters().
|
|
16
|
+
* Values are never logged.
|
|
9
17
|
*/
|
|
10
|
-
execute(tool: ToolDefinition, params: Record<string, unknown>): Promise<unknown>;
|
|
18
|
+
execute(tool: ToolDefinition, params: Record<string, unknown>, credentials?: Record<string, string>): Promise<unknown>;
|
|
19
|
+
/**
|
|
20
|
+
* Automatically inject `Authorization: Basic <base64(username:password)>` when
|
|
21
|
+
* the tool declares `authentication.type: basic` with `username_env` and `password_env`.
|
|
22
|
+
*
|
|
23
|
+
* This is a zero-friction pattern: developers only set two natural env vars
|
|
24
|
+
* (e.g. TWILIO_ACCOUNT_SID + TWILIO_AUTH_TOKEN) and Matimo handles encoding.
|
|
25
|
+
* No pre-computed base64 credential string required.
|
|
26
|
+
*
|
|
27
|
+
* When `credentials` is provided the lookup order is:
|
|
28
|
+
* 1. `credentials[envVarName]` (per-call override — multi-tenant use)
|
|
29
|
+
* 2. `process.env[envVarName]` (singleton / single-tenant fallback)
|
|
30
|
+
*
|
|
31
|
+
* Credential values are never logged or included in error details.
|
|
32
|
+
*/
|
|
33
|
+
private applyBasicAuth;
|
|
11
34
|
/**
|
|
12
35
|
* Replace parameter placeholders in a string
|
|
13
36
|
*/
|
|
14
37
|
private templateString;
|
|
38
|
+
/**
|
|
39
|
+
* Check if a string is an unfilled placeholder
|
|
40
|
+
* Only matches single placeholders like "{param}", not "{...}" or embedded placeholders
|
|
41
|
+
*/
|
|
42
|
+
private isUnfilledPlaceholder;
|
|
43
|
+
/**
|
|
44
|
+
* Validate that all URL parameters are provided
|
|
45
|
+
*/
|
|
46
|
+
private validateUrlParameters;
|
|
15
47
|
/**
|
|
16
48
|
* Build query string from query_params, only including provided values
|
|
17
49
|
*/
|
|
18
50
|
private buildQueryString;
|
|
19
51
|
/**
|
|
20
|
-
* Replace parameter placeholders in an object (headers, body)
|
|
21
|
-
*
|
|
52
|
+
* Replace parameter placeholders in an object (headers, body, query params)
|
|
53
|
+
*
|
|
54
|
+
* CORE PRINCIPLE: "Define once in YAML, embed correctly at execution time"
|
|
55
|
+
*
|
|
56
|
+
* This method intelligently handles different parameter types:
|
|
57
|
+
* - STRING placeholders like "{title}": Always templated as strings
|
|
58
|
+
* - OBJECT placeholders like "{parent}": Embedded directly as JSON objects (not stringified) if paramDefinitions specifies type:object
|
|
59
|
+
* - ARRAY placeholders like "{items}": Embedded directly as JSON arrays (not stringified) if paramDefinitions specifies type:array
|
|
60
|
+
*
|
|
61
|
+
* Key behaviors:
|
|
62
|
+
* - Recursively processes nested objects
|
|
63
|
+
* - Skips keys with unfilled placeholders (e.g., "{sort_by}" when sort_by not provided)
|
|
64
|
+
* - Uses parameter schema type from YAML to determine how to embed values
|
|
65
|
+
* - Preserves JSON structure for complex types (objects/arrays) sent to APIs
|
|
66
|
+
*
|
|
67
|
+
* @example
|
|
68
|
+
* ```
|
|
69
|
+
* // YAML definition:
|
|
70
|
+
* parameters:
|
|
71
|
+
* parent:
|
|
72
|
+
* type: object // <-- Tells executor to embed as-is, not stringify
|
|
73
|
+
* items:
|
|
74
|
+
* type: array // <-- Tells executor to embed as-is, not stringify
|
|
75
|
+
* title:
|
|
76
|
+
* type: string // <-- String templating applies
|
|
77
|
+
*
|
|
78
|
+
* body:
|
|
79
|
+
* parent: "{parent}" // Object embedded as {"id": "123", ...}
|
|
80
|
+
* items: "{items}" // Array embedded as [{"name": "a"}, ...]
|
|
81
|
+
* title: "{title}" // String embedded as "My Title"
|
|
82
|
+
*
|
|
83
|
+
* // JavaScript call:
|
|
84
|
+
* const result = await matimo.execute('notion_create_page', {
|
|
85
|
+
* parent: { database_id: 'abc123' }, // JavaScript object
|
|
86
|
+
* items: [{ type: 'text' }], // JavaScript array
|
|
87
|
+
* title: 'Create This Page' // String
|
|
88
|
+
* });
|
|
89
|
+
*
|
|
90
|
+
* // HTTP body sent to API:
|
|
91
|
+
* {
|
|
92
|
+
* "parent": {"database_id": "abc123"}, // Proper JSON object
|
|
93
|
+
* "items": [{"type": "text"}], // Proper JSON array
|
|
94
|
+
* "title": "Create This Page" // String
|
|
95
|
+
* }
|
|
96
|
+
* ```
|
|
22
97
|
*/
|
|
23
98
|
private templateObject;
|
|
24
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"http-executor.d.ts","sourceRoot":"","sources":["../../src/executors/http-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"http-executor.d.ts","sourceRoot":"","sources":["../../src/executors/http-executor.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAInD;;;GAGG;AAEH,qBAAa,YAAY;IACvB;;;;;;;;;;OAUG;IACG,OAAO,CACX,IAAI,EAAE,cAAc,EACpB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GACnC,OAAO,CAAC,OAAO,CAAC;IAmHnB;;;;;;;;;;;;;OAaG;IACH,OAAO,CAAC,cAAc;IA4BtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAK7B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAyB7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAexB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8CG;IACH,OAAO,CAAC,cAAc;CA+GvB;AAED,eAAe,YAAY,CAAC"}
|