matimo 0.1.0-alpha.1 → 0.1.0-alpha.11
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 +136 -544
- package/package.json +24 -24
- package/packages/cli/bin/matimo.cjs +26 -0
- package/packages/cli/dist/cli.d.ts +6 -0
- package/packages/cli/dist/cli.d.ts.map +1 -0
- package/packages/cli/dist/cli.js +95 -0
- package/packages/cli/dist/cli.js.map +1 -0
- package/packages/cli/dist/commands/install.d.ts +6 -0
- package/packages/cli/dist/commands/install.d.ts.map +1 -0
- package/packages/cli/dist/commands/install.js +48 -0
- package/packages/cli/dist/commands/install.js.map +1 -0
- package/packages/cli/dist/commands/list.d.ts +9 -0
- package/packages/cli/dist/commands/list.d.ts.map +1 -0
- package/packages/cli/dist/commands/list.js +70 -0
- package/packages/cli/dist/commands/list.js.map +1 -0
- package/packages/cli/dist/commands/search.d.ts +2 -0
- package/packages/cli/dist/commands/search.d.ts.map +1 -0
- package/packages/cli/dist/commands/search.js +148 -0
- package/packages/cli/dist/commands/search.js.map +1 -0
- package/packages/core/dist/approval/approval-handler.d.ts +74 -0
- package/packages/core/dist/approval/approval-handler.d.ts.map +1 -0
- package/packages/core/dist/approval/approval-handler.js +210 -0
- package/packages/core/dist/approval/approval-handler.js.map +1 -0
- package/{dist → packages/core/dist}/core/schema.d.ts +29 -4
- package/packages/core/dist/core/schema.d.ts.map +1 -0
- package/{dist → packages/core/dist}/core/schema.js +37 -6
- package/packages/core/dist/core/schema.js.map +1 -0
- package/packages/core/dist/core/tool-loader.d.ts +57 -0
- package/packages/core/dist/core/tool-loader.d.ts.map +1 -0
- package/packages/core/dist/core/tool-loader.js +250 -0
- package/packages/core/dist/core/tool-loader.js.map +1 -0
- package/{dist → packages/core/dist}/core/tool-registry.d.ts.map +1 -1
- package/{dist → packages/core/dist}/core/tool-registry.js +5 -1
- package/packages/core/dist/core/tool-registry.js.map +1 -0
- package/{dist → packages/core/dist}/core/types.d.ts +31 -1
- package/packages/core/dist/core/types.d.ts.map +1 -0
- package/{dist → packages/core/dist}/decorators/tool-decorator.d.ts.map +1 -1
- package/{dist → packages/core/dist}/decorators/tool-decorator.js +7 -4
- package/packages/core/dist/decorators/tool-decorator.js.map +1 -0
- package/{dist → packages/core/dist}/encodings/parameter-encoding.d.ts +1 -1
- package/{dist → packages/core/dist}/encodings/parameter-encoding.d.ts.map +1 -1
- package/{dist → packages/core/dist}/encodings/parameter-encoding.js +12 -4
- package/packages/core/dist/encodings/parameter-encoding.js.map +1 -0
- package/{dist → packages/core/dist}/errors/matimo-error.d.ts +8 -1
- package/packages/core/dist/errors/matimo-error.d.ts.map +1 -0
- package/{dist → packages/core/dist}/errors/matimo-error.js +23 -1
- package/packages/core/dist/errors/matimo-error.js.map +1 -0
- package/{dist → packages/core/dist}/executors/command-executor.d.ts.map +1 -1
- package/{dist → packages/core/dist}/executors/command-executor.js +5 -1
- package/packages/core/dist/executors/command-executor.js.map +1 -0
- package/packages/core/dist/executors/function-executor.d.ts +23 -0
- package/packages/core/dist/executors/function-executor.d.ts.map +1 -0
- package/packages/core/dist/executors/function-executor.js +181 -0
- package/packages/core/dist/executors/function-executor.js.map +1 -0
- package/packages/core/dist/executors/http-executor.d.ts +87 -0
- package/packages/core/dist/executors/http-executor.d.ts.map +1 -0
- package/packages/core/dist/executors/http-executor.js +324 -0
- package/packages/core/dist/executors/http-executor.js.map +1 -0
- package/{dist → packages/core/dist}/index.d.ts +9 -1
- package/packages/core/dist/index.d.ts.map +1 -0
- package/{dist → packages/core/dist}/index.js +10 -0
- package/packages/core/dist/index.js.map +1 -0
- package/packages/core/dist/integrations/langchain.d.ts +46 -0
- package/packages/core/dist/integrations/langchain.d.ts.map +1 -0
- package/packages/core/dist/integrations/langchain.js +197 -0
- package/packages/core/dist/integrations/langchain.js.map +1 -0
- package/packages/core/dist/logging/index.d.ts +3 -0
- package/packages/core/dist/logging/index.d.ts.map +1 -0
- package/packages/core/dist/logging/index.js +3 -0
- package/packages/core/dist/logging/index.js.map +1 -0
- package/packages/core/dist/logging/logger.d.ts +96 -0
- package/packages/core/dist/logging/logger.d.ts.map +1 -0
- package/packages/core/dist/logging/logger.js +53 -0
- package/packages/core/dist/logging/logger.js.map +1 -0
- package/packages/core/dist/logging/winston-logger.d.ts +29 -0
- package/packages/core/dist/logging/winston-logger.d.ts.map +1 -0
- package/packages/core/dist/logging/winston-logger.js +73 -0
- package/packages/core/dist/logging/winston-logger.js.map +1 -0
- package/{dist → packages/core/dist}/matimo-instance.d.ts +46 -4
- package/packages/core/dist/matimo-instance.d.ts.map +1 -0
- package/{dist → packages/core/dist}/matimo-instance.js +167 -15
- package/packages/core/dist/matimo-instance.js.map +1 -0
- package/dist/core/schema.d.ts.map +0 -1
- package/dist/core/schema.js.map +0 -1
- package/dist/core/tool-loader.d.ts +0 -29
- package/dist/core/tool-loader.d.ts.map +0 -1
- package/dist/core/tool-loader.js +0 -98
- package/dist/core/tool-loader.js.map +0 -1
- package/dist/core/tool-registry.js.map +0 -1
- package/dist/core/types.d.ts.map +0 -1
- package/dist/decorators/tool-decorator.js.map +0 -1
- package/dist/encodings/parameter-encoding.js.map +0 -1
- package/dist/errors/matimo-error.d.ts.map +0 -1
- package/dist/errors/matimo-error.js.map +0 -1
- package/dist/executors/command-executor.js.map +0 -1
- package/dist/executors/http-executor.d.ts +0 -26
- package/dist/executors/http-executor.d.ts.map +0 -1
- package/dist/executors/http-executor.js +0 -133
- package/dist/executors/http-executor.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
- package/dist/matimo-instance.d.ts.map +0 -1
- package/dist/matimo-instance.js.map +0 -1
- package/docs/Gemfile +0 -5
- package/docs/RELEASES.md +0 -69
- package/docs/ROADMAP.md +0 -138
- package/docs/_config.yml +0 -27
- package/docs/api-reference/ERRORS.md +0 -445
- package/docs/api-reference/SDK.md +0 -582
- package/docs/api-reference/TYPES.md +0 -415
- package/docs/architecture/OAUTH.md +0 -1366
- package/docs/architecture/OVERVIEW.md +0 -564
- package/docs/assets/logo.png +0 -0
- package/docs/community/COMMIT_GUIDELINES.md +0 -552
- package/docs/framework-integrations/LANGCHAIN.md +0 -286
- package/docs/getting-started/QUICK_START.md +0 -211
- package/docs/getting-started/YOUR_FIRST_TOOL.md +0 -217
- package/docs/getting-started/installation.md +0 -124
- package/docs/index.md +0 -288
- package/docs/tool-development/DECORATOR_GUIDE.md +0 -633
- package/docs/tool-development/OAUTH_LINK.md +0 -5
- package/docs/tool-development/PROVIDER_CONFIGURATION.md +0 -458
- package/docs/tool-development/TESTING.md +0 -412
- package/docs/tool-development/TOOL_SPECIFICATION.md +0 -793
- package/docs/tool-development/YAML_TOOLS.md +0 -65
- package/docs/troubleshooting/FAQ.md +0 -391
- package/docs/user-guide/AUTHENTICATION.md +0 -255
- package/docs/user-guide/DEVELOPMENT_STANDARDS.md +0 -698
- package/docs/user-guide/SDK_PATTERNS.md +0 -316
- package/docs/user-guide/TOOL_DISCOVERY.md +0 -209
- /package/{dist → packages/core/dist}/auth/oauth2-config.d.ts +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-config.d.ts.map +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-config.js +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-config.js.map +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-handler.d.ts +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-handler.d.ts.map +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-handler.js +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-handler.js.map +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.d.ts +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.d.ts.map +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.js +0 -0
- /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.js.map +0 -0
- /package/{dist → packages/core/dist}/core/tool-registry.d.ts +0 -0
- /package/{dist → packages/core/dist}/core/types.js +0 -0
- /package/{dist → packages/core/dist}/core/types.js.map +0 -0
- /package/{dist → packages/core/dist}/decorators/index.d.ts +0 -0
- /package/{dist → packages/core/dist}/decorators/index.d.ts.map +0 -0
- /package/{dist → packages/core/dist}/decorators/index.js +0 -0
- /package/{dist → packages/core/dist}/decorators/index.js.map +0 -0
- /package/{dist → packages/core/dist}/decorators/tool-decorator.d.ts +0 -0
- /package/{dist → packages/core/dist}/executors/command-executor.d.ts +0 -0
package/package.json
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "matimo",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
4
|
-
"description": "Framework-agnostic YAML-driven tool ecosystem for AI agents.
|
|
5
|
-
"main": "dist/index.js",
|
|
6
|
-
"types": "dist/index.d.ts",
|
|
3
|
+
"version": "0.1.0-alpha.11",
|
|
4
|
+
"description": "Universal tool provider SDK: Framework-agnostic YAML-driven tool ecosystem for AI agents. Execute a library of pre-built tools (Slack, Gmail, GitHub, AWS, etc.) or define your own in YAML.",
|
|
5
|
+
"main": "packages/core/dist/index.js",
|
|
6
|
+
"types": "packages/core/dist/index.d.ts",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"packageManager": "pnpm@8.15.0",
|
|
9
|
+
"private": false,
|
|
9
10
|
"exports": {
|
|
10
11
|
".": {
|
|
11
|
-
"types": "./dist/index.d.ts",
|
|
12
|
-
"default": "./dist/index.js"
|
|
12
|
+
"types": "./packages/core/dist/index.d.ts",
|
|
13
|
+
"default": "./packages/core/dist/index.js"
|
|
13
14
|
}
|
|
14
15
|
},
|
|
15
16
|
"engines": {
|
|
@@ -44,25 +45,23 @@
|
|
|
44
45
|
"url": "https://github.com/tallclub/matimo/issues"
|
|
45
46
|
},
|
|
46
47
|
"files": [
|
|
47
|
-
"dist",
|
|
48
|
+
"packages/core/dist",
|
|
49
|
+
"packages/cli/dist",
|
|
50
|
+
"packages/cli/bin",
|
|
48
51
|
"README.md",
|
|
49
|
-
"LICENSE"
|
|
50
|
-
"docs"
|
|
52
|
+
"LICENSE"
|
|
51
53
|
],
|
|
52
54
|
"publishConfig": {
|
|
53
55
|
"access": "public"
|
|
54
56
|
},
|
|
55
57
|
"dependencies": {
|
|
56
|
-
"@
|
|
57
|
-
"
|
|
58
|
-
"dotenv": "^17.2.3",
|
|
59
|
-
"js-yaml": "^4.1.1",
|
|
60
|
-
"yaml": "^2.8.2",
|
|
61
|
-
"zod": "^4.3.6"
|
|
58
|
+
"@matimo/cli": "0.1.0-alpha.11",
|
|
59
|
+
"@matimo/core": "0.1.0-alpha.11"
|
|
62
60
|
},
|
|
63
61
|
"devDependencies": {
|
|
64
62
|
"@commitlint/cli": "^20.3.1",
|
|
65
63
|
"@commitlint/config-conventional": "^20.3.1",
|
|
64
|
+
"@langchain/core": "^1.1.19",
|
|
66
65
|
"@types/jest": "^30.0.0",
|
|
67
66
|
"@types/js-yaml": "^4.0.9",
|
|
68
67
|
"@types/node": "^25.1.0",
|
|
@@ -71,6 +70,7 @@
|
|
|
71
70
|
"eslint": "^9.39.2",
|
|
72
71
|
"husky": "^9.1.7",
|
|
73
72
|
"jest": "^30.2.0",
|
|
73
|
+
"langchain": "^1.2.18",
|
|
74
74
|
"prettier": "^3.8.1",
|
|
75
75
|
"ts-jest": "^29.4.6",
|
|
76
76
|
"ts-node": "^10.9.2",
|
|
@@ -78,19 +78,19 @@
|
|
|
78
78
|
"typescript": "^5.9.3"
|
|
79
79
|
},
|
|
80
80
|
"scripts": {
|
|
81
|
-
"build": "
|
|
82
|
-
"watch": "
|
|
81
|
+
"build": "pnpm --filter='./packages/**' build",
|
|
82
|
+
"watch": "pnpm --filter='./packages/**' watch",
|
|
83
83
|
"test": "jest",
|
|
84
84
|
"test:watch": "jest --watch",
|
|
85
85
|
"test:coverage": "jest --coverage",
|
|
86
|
-
"lint": "eslint
|
|
87
|
-
"lint:fix": "eslint
|
|
88
|
-
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\" \"*.json\" \"*.md\"",
|
|
89
|
-
"format:check": "prettier --check \"src/**/*.ts\" \"test/**/*.ts\"",
|
|
86
|
+
"lint": "eslint packages --ext .ts",
|
|
87
|
+
"lint:fix": "eslint packages --ext .ts --fix",
|
|
88
|
+
"format": "prettier --write \"packages/*/src/**/*.ts\" \"packages/*/test/**/*.ts\" \"examples/**/*.ts\" \"*.json\" \"*.md\"",
|
|
89
|
+
"format:check": "prettier --check \"packages/*/src/**/*.ts\" \"packages/*/test/**/*.ts\" \"examples/**/*.ts\"",
|
|
90
90
|
"commitlint": "commitlint --from HEAD~1 --to HEAD",
|
|
91
91
|
"validate-tools": "tsx scripts/validate-tool.ts",
|
|
92
|
-
"test-tools": "jest test/fixtures/tools",
|
|
93
|
-
"dev": "tsx src/index.ts",
|
|
94
|
-
"clean": "rm -rf dist coverage"
|
|
92
|
+
"test-tools": "jest packages/core/test/fixtures/tools",
|
|
93
|
+
"dev": "tsx packages/core/src/index.ts",
|
|
94
|
+
"clean": "rm -rf dist coverage && find packages -type f \\( -name '*.js' -o -name '*.d.ts' -o -name '*.js.map' -o -name '*.d.ts.map' \\) -not -path '*/dist/*' -not -path '*/node_modules/*' -delete"
|
|
95
95
|
}
|
|
96
96
|
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// Simple CommonJS entry point - avoids ESM/test issues
|
|
4
|
+
const path = require('path');
|
|
5
|
+
|
|
6
|
+
// Check for version flag
|
|
7
|
+
const versionFlags = ['-v', '-V', '--version'];
|
|
8
|
+
if (versionFlags.includes(process.argv[process.argv.length - 1])) {
|
|
9
|
+
try {
|
|
10
|
+
const pkg = require(path.join(__dirname, '../package.json'));
|
|
11
|
+
console.log(`matimo-cli v${pkg.version}`);
|
|
12
|
+
process.exit(0);
|
|
13
|
+
} catch {
|
|
14
|
+
console.log('matimo-cli v unknown');
|
|
15
|
+
process.exit(0);
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
// Import and run the ESM main function
|
|
20
|
+
(async () => {
|
|
21
|
+
const { main } = await import(path.join(__dirname, '../dist/cli.js'));
|
|
22
|
+
await main();
|
|
23
|
+
})().catch((error) => {
|
|
24
|
+
console.error('❌ Fatal error:', error);
|
|
25
|
+
process.exit(1);
|
|
26
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAgBA,wBAAgB,QAAQ,IAAI,IAAI,CAmC/B;AAED;;GAEG;AACH,wBAAsB,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAwC5D"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { readFileSync } from 'fs';
|
|
2
|
+
import { join } from 'path';
|
|
3
|
+
import { installCommand } from './commands/install.js';
|
|
4
|
+
import { listCommand } from './commands/list.js';
|
|
5
|
+
import { searchCommand } from './commands/search.js';
|
|
6
|
+
function getPackageVersion() {
|
|
7
|
+
try {
|
|
8
|
+
const pkgPath = join(process.cwd(), 'package.json');
|
|
9
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
10
|
+
return pkg.version;
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
return 'unknown';
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
export function showHelp() {
|
|
17
|
+
console.info(`
|
|
18
|
+
🔨 Matimo CLI - Tool Package Manager
|
|
19
|
+
|
|
20
|
+
Usage: matimo [command] [options]
|
|
21
|
+
|
|
22
|
+
Commands:
|
|
23
|
+
install <tools...> Install tool packages
|
|
24
|
+
Example: matimo install slack gmail
|
|
25
|
+
|
|
26
|
+
list List installed Matimo tools
|
|
27
|
+
Example: matimo list
|
|
28
|
+
|
|
29
|
+
search <query> Search for available tools
|
|
30
|
+
Example: matimo search slack
|
|
31
|
+
|
|
32
|
+
help Show this help message
|
|
33
|
+
|
|
34
|
+
version Show version information
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
# Install new tools
|
|
38
|
+
$ matimo install slack
|
|
39
|
+
$ matimo install gmail stripe
|
|
40
|
+
|
|
41
|
+
# List all installed tools
|
|
42
|
+
$ matimo list
|
|
43
|
+
|
|
44
|
+
# Search for tools
|
|
45
|
+
$ matimo search email
|
|
46
|
+
$ matimo search database
|
|
47
|
+
|
|
48
|
+
Documentation: https://github.com/tallclub/matimo#readme
|
|
49
|
+
Issues: https://github.com/tallclub/matimo/issues
|
|
50
|
+
`);
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Main CLI handler - parses commands and routes to appropriate handlers
|
|
54
|
+
*/
|
|
55
|
+
export async function main(cliArgs) {
|
|
56
|
+
const args = cliArgs || process.argv.slice(2);
|
|
57
|
+
const command = args[0];
|
|
58
|
+
const params = args.slice(1);
|
|
59
|
+
if (!command) {
|
|
60
|
+
showHelp();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
try {
|
|
64
|
+
switch (command.toLowerCase()) {
|
|
65
|
+
case 'install':
|
|
66
|
+
await installCommand(params);
|
|
67
|
+
break;
|
|
68
|
+
case 'list':
|
|
69
|
+
await listCommand();
|
|
70
|
+
break;
|
|
71
|
+
case 'search':
|
|
72
|
+
await searchCommand(params[0] || '');
|
|
73
|
+
break;
|
|
74
|
+
case 'help':
|
|
75
|
+
case '-h':
|
|
76
|
+
case '--help':
|
|
77
|
+
showHelp();
|
|
78
|
+
break;
|
|
79
|
+
case 'version':
|
|
80
|
+
case '-v':
|
|
81
|
+
case '--version':
|
|
82
|
+
console.info(`matimo-cli v${getPackageVersion()}`);
|
|
83
|
+
break;
|
|
84
|
+
default:
|
|
85
|
+
console.error(`❌ Unknown command: ${command}`);
|
|
86
|
+
console.info('\nRun "matimo help" for available commands');
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error('❌ Error:', error instanceof Error ? error.message : String(error));
|
|
92
|
+
process.exit(1);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,SAAS,iBAAiB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC,CAAC;QACpD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;QACtD,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAC;IACnB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCd,CAAC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,OAAkB;IAC3C,MAAM,IAAI,GAAG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAC9C,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACxB,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,QAAQ,EAAE,CAAC;QACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,QAAQ,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC;YAC9B,KAAK,SAAS;gBACZ,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7B,MAAM;YACR,KAAK,MAAM;gBACT,MAAM,WAAW,EAAE,CAAC;gBACpB,MAAM;YACR,KAAK,QAAQ;gBACX,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrC,MAAM;YACR,KAAK,MAAM,CAAC;YACZ,KAAK,IAAI,CAAC;YACV,KAAK,QAAQ;gBACX,QAAQ,EAAE,CAAC;gBACX,MAAM;YACR,KAAK,SAAS,CAAC;YACf,KAAK,IAAI,CAAC;YACV,KAAK,WAAW;gBACd,OAAO,CAAC,IAAI,CAAC,eAAe,iBAAiB,EAAE,EAAE,CAAC,CAAC;gBACnD,MAAM;YACR;gBACE,OAAO,CAAC,KAAK,CAAC,sBAAsB,OAAO,EAAE,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;gBAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QAClF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+CvE"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { execFileSync } from 'child_process';
|
|
2
|
+
/**
|
|
3
|
+
* Install command - Install a specific tool package
|
|
4
|
+
* matimo install slack gmail stripe
|
|
5
|
+
*/
|
|
6
|
+
export async function installCommand(toolNames) {
|
|
7
|
+
if (!toolNames || toolNames.length === 0) {
|
|
8
|
+
console.error('❌ Error: Please specify at least one tool to install');
|
|
9
|
+
console.info('\nUsage: matimo install [tool1] [tool2] [tool3]...');
|
|
10
|
+
console.info('Example: matimo install slack gmail stripe');
|
|
11
|
+
process.exit(1);
|
|
12
|
+
}
|
|
13
|
+
const packages = toolNames.map((name) => `@matimo/${name}`);
|
|
14
|
+
try {
|
|
15
|
+
console.info(`📦 Installing ${packages.join(', ')}...`);
|
|
16
|
+
// Run npm install for the packages without invoking a shell
|
|
17
|
+
execFileSync('npm', ['install', ...packages], { stdio: 'inherit' });
|
|
18
|
+
console.info('\n✅ Installation complete!');
|
|
19
|
+
console.info('\nNext steps:');
|
|
20
|
+
console.info('1. Import and initialize Matimo with auto-discovery (Recommended):');
|
|
21
|
+
console.info(' const matimo = await MatimoInstance.init({ autoDiscover: true });');
|
|
22
|
+
console.info('\n2. Or explicitly load the tools (ESM):');
|
|
23
|
+
console.info(` import { createRequire } from 'module';
|
|
24
|
+
const require = createRequire(import.meta.url);
|
|
25
|
+
const matimo = await MatimoInstance.init({
|
|
26
|
+
toolPaths: [
|
|
27
|
+
require.resolve('@matimo/slack/tools'),
|
|
28
|
+
require.resolve('@matimo/gmail/tools'),
|
|
29
|
+
]
|
|
30
|
+
});`);
|
|
31
|
+
console.info('\n3. Or use file URLs (Alternative ESM approach):');
|
|
32
|
+
console.info(` import { fileURLToPath } from 'url';
|
|
33
|
+
import path from 'path';
|
|
34
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
35
|
+
const matimo = await MatimoInstance.init({
|
|
36
|
+
toolPaths: [
|
|
37
|
+
path.join(__dirname, 'node_modules/@matimo/slack/tools'),
|
|
38
|
+
path.join(__dirname, 'node_modules/@matimo/gmail/tools'),
|
|
39
|
+
]
|
|
40
|
+
});`);
|
|
41
|
+
console.info('\n📖 For more info: https://github.com/tallclub/matimo#readme');
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error('❌ Installation failed:', error instanceof Error ? error.message : String(error));
|
|
45
|
+
process.exit(1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=install.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,SAAmB;IACtD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzC,OAAO,CAAC,KAAK,CAAC,sDAAsD,CAAC,CAAC;QACtE,OAAO,CAAC,IAAI,CAAC,oDAAoD,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;QAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,WAAW,IAAI,EAAE,CAAC,CAAC;IAE5D,IAAI,CAAC;QACH,OAAO,CAAC,IAAI,CAAC,iBAAiB,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAExD,4DAA4D;QAC5D,YAAY,CAAC,KAAK,EAAE,CAAC,SAAS,EAAE,GAAG,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;QAEpE,OAAO,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAC;QAC3C,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9B,OAAO,CAAC,IAAI,CAAC,oEAAoE,CAAC,CAAC;QACnF,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAC;QACzD,OAAO,CAAC,IAAI,CAAC;;;;;;;OAOV,CAAC,CAAC;QACL,OAAO,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC;;;;;;;;OAQV,CAAC,CAAC;QACL,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAC;IAChF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CACX,wBAAwB,EACxB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* List command - List all installed Matimo tools
|
|
3
|
+
* matimo list
|
|
4
|
+
*/
|
|
5
|
+
export declare function listCommand(): Promise<void>;
|
|
6
|
+
declare function getNodeModulesPath(): string | null;
|
|
7
|
+
export declare const getNodeModulesPathForTesting: typeof getNodeModulesPath;
|
|
8
|
+
export {};
|
|
9
|
+
//# sourceMappingURL=list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAGA;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAuDjD;AAED,iBAAS,kBAAkB,IAAI,MAAM,GAAG,IAAI,CAqB3C;AAGD,eAAO,MAAM,4BAA4B,2BAAqB,CAAC"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import * as fs from 'fs';
|
|
2
|
+
import * as path from 'path';
|
|
3
|
+
/**
|
|
4
|
+
* List command - List all installed Matimo tools
|
|
5
|
+
* matimo list
|
|
6
|
+
*/
|
|
7
|
+
export async function listCommand() {
|
|
8
|
+
try {
|
|
9
|
+
const nodeModulesPath = getNodeModulesPath();
|
|
10
|
+
if (!nodeModulesPath) {
|
|
11
|
+
console.info('❌ Error: node_modules not found');
|
|
12
|
+
process.exit(1);
|
|
13
|
+
}
|
|
14
|
+
const matimoScope = path.join(nodeModulesPath, '@matimo');
|
|
15
|
+
if (!fs.existsSync(matimoScope)) {
|
|
16
|
+
console.info('⚠️ No Matimo tools installed yet');
|
|
17
|
+
console.info('\nInstall some tools:');
|
|
18
|
+
console.info(' matimo install slack gmail stripe');
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
const packages = fs.readdirSync(matimoScope).filter((dir) => !dir.startsWith('.'));
|
|
22
|
+
if (packages.length === 0) {
|
|
23
|
+
console.info('⚠️ No Matimo tools installed yet');
|
|
24
|
+
return;
|
|
25
|
+
}
|
|
26
|
+
console.info('📦 Installed Matimo Packages:\n');
|
|
27
|
+
for (const pkg of packages) {
|
|
28
|
+
const pkgJsonPath = path.join(matimoScope, pkg, 'package.json');
|
|
29
|
+
if (fs.existsSync(pkgJsonPath)) {
|
|
30
|
+
const pkgJson = JSON.parse(fs.readFileSync(pkgJsonPath, 'utf-8'));
|
|
31
|
+
const matimo = pkgJson.matimo || {};
|
|
32
|
+
console.info(` 📍 @matimo/${pkg}`);
|
|
33
|
+
if (pkgJson.description) {
|
|
34
|
+
console.info(` ${pkgJson.description}`);
|
|
35
|
+
}
|
|
36
|
+
if (matimo.tools && Array.isArray(matimo.tools)) {
|
|
37
|
+
console.info(` Tools: ${matimo.tools.slice(0, 3).join(', ')}${matimo.tools.length > 3 ? ', ...' : ''}`);
|
|
38
|
+
}
|
|
39
|
+
console.info('');
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
console.info(`Total: ${packages.length} package${packages.length > 1 ? 's' : ''} installed`);
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error('❌ Error listing tools:', error instanceof Error ? error.message : String(error));
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function getNodeModulesPath() {
|
|
50
|
+
// Walk up from current working directory to find node_modules
|
|
51
|
+
// This is the appropriate approach for a CLI tool
|
|
52
|
+
let currentPath = process.cwd();
|
|
53
|
+
const maxLevels = 20; // Prevent infinite loops
|
|
54
|
+
for (let i = 0; i < maxLevels; i++) {
|
|
55
|
+
const nodeModules = path.join(currentPath, 'node_modules');
|
|
56
|
+
if (fs.existsSync(nodeModules) && fs.statSync(nodeModules).isDirectory()) {
|
|
57
|
+
return nodeModules;
|
|
58
|
+
}
|
|
59
|
+
const parent = path.dirname(currentPath);
|
|
60
|
+
if (parent === currentPath) {
|
|
61
|
+
// Reached filesystem root
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
currentPath = parent;
|
|
65
|
+
}
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
// Export for testing
|
|
69
|
+
export const getNodeModulesPathForTesting = getNodeModulesPath;
|
|
70
|
+
//# sourceMappingURL=list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.d.ts","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAQA,wBAAsB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAmJhE"}
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Search command - Search for available Matimo packages
|
|
3
|
+
* Works for both end-users (searches installed packages) and contributors (searches repo packages)
|
|
4
|
+
* matimo search slack
|
|
5
|
+
*/
|
|
6
|
+
import fs from 'fs';
|
|
7
|
+
import path from 'path';
|
|
8
|
+
export async function searchCommand(query) {
|
|
9
|
+
if (!query) {
|
|
10
|
+
console.error('❌ Error: Please specify a search query');
|
|
11
|
+
console.info('\nUsage: matimo search <query>');
|
|
12
|
+
console.info('Example: matimo search slack');
|
|
13
|
+
process.exit(1);
|
|
14
|
+
}
|
|
15
|
+
const availablePackages = [];
|
|
16
|
+
// Determine search context: contributor (repo) or end-user (installed)
|
|
17
|
+
// First, check if node_modules/@matimo exists (user project)
|
|
18
|
+
const installedPackagesDir = path.resolve(process.cwd(), 'node_modules/@matimo');
|
|
19
|
+
const hasInstalledPackages = fs.existsSync(installedPackagesDir);
|
|
20
|
+
// Then check if we're in the Matimo repo by looking for pnpm-workspace.yaml
|
|
21
|
+
const repoRoot = findRepoRoot(process.cwd());
|
|
22
|
+
const isInRepo = repoRoot !== null;
|
|
23
|
+
const repoPackagesDir = isInRepo ? path.resolve(repoRoot, 'packages') : null;
|
|
24
|
+
let searchDir;
|
|
25
|
+
let searchContext;
|
|
26
|
+
let skipDirs = [];
|
|
27
|
+
// Priority: if in repo, search repo; else if installed packages exist, search those
|
|
28
|
+
if (isInRepo && repoPackagesDir) {
|
|
29
|
+
searchDir = repoPackagesDir;
|
|
30
|
+
searchContext = 'repository';
|
|
31
|
+
skipDirs = ['core', 'cli'];
|
|
32
|
+
}
|
|
33
|
+
else if (hasInstalledPackages) {
|
|
34
|
+
searchDir = installedPackagesDir;
|
|
35
|
+
searchContext = 'installed';
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
console.error('❌ Error: No Matimo packages found');
|
|
39
|
+
console.info('Either run this in the Matimo repository or install packages: npm install @matimo/slack');
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
const entries = fs.readdirSync(searchDir);
|
|
44
|
+
for (const entry of entries) {
|
|
45
|
+
// Skip internal packages in repo context
|
|
46
|
+
if (skipDirs.includes(entry))
|
|
47
|
+
continue;
|
|
48
|
+
const packagePath = path.join(searchDir, entry);
|
|
49
|
+
const packageJsonPath = path.join(packagePath, 'package.json');
|
|
50
|
+
if (!fs.existsSync(packageJsonPath))
|
|
51
|
+
continue;
|
|
52
|
+
try {
|
|
53
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8'));
|
|
54
|
+
// Count tools in the tools directory
|
|
55
|
+
const toolsDir = path.join(packagePath, 'tools');
|
|
56
|
+
let toolCount = 0;
|
|
57
|
+
if (fs.existsSync(toolsDir)) {
|
|
58
|
+
toolCount = fs.readdirSync(toolsDir).filter((f) => {
|
|
59
|
+
const stat = fs.statSync(path.join(toolsDir, f));
|
|
60
|
+
return stat.isDirectory();
|
|
61
|
+
}).length;
|
|
62
|
+
}
|
|
63
|
+
// Extract package name (remove @matimo/ prefix)
|
|
64
|
+
const pkgName = packageJson.name.replace('@matimo/', '');
|
|
65
|
+
availablePackages.push({
|
|
66
|
+
name: pkgName,
|
|
67
|
+
description: packageJson.description || 'No description available',
|
|
68
|
+
tools: toolCount,
|
|
69
|
+
status: 'available',
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
// Skip packages with invalid package.json
|
|
74
|
+
continue;
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
if (searchContext === 'installed') {
|
|
80
|
+
console.error('❌ Error: Could not discover installed packages');
|
|
81
|
+
console.info('Make sure you have installed Matimo packages in node_modules/@matimo/');
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
console.error('❌ Error: Could not discover packages in repository');
|
|
85
|
+
console.info('Make sure you have provider packages in packages/ directory');
|
|
86
|
+
}
|
|
87
|
+
process.exit(1);
|
|
88
|
+
}
|
|
89
|
+
// Sort packages by name
|
|
90
|
+
availablePackages.sort((a, b) => a.name.localeCompare(b.name));
|
|
91
|
+
if (availablePackages.length === 0) {
|
|
92
|
+
if (searchContext === 'installed') {
|
|
93
|
+
console.error('❌ Error: No packages found in node_modules/@matimo/');
|
|
94
|
+
console.info('Install Matimo packages first: npm install @matimo/slack @matimo/gmail');
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
console.error('❌ Error: No packages found in repository');
|
|
98
|
+
console.info('Make sure you have provider packages in packages/ directory');
|
|
99
|
+
}
|
|
100
|
+
process.exit(1);
|
|
101
|
+
}
|
|
102
|
+
const q = query.toLowerCase();
|
|
103
|
+
const results = availablePackages.filter((pkg) => pkg.name.includes(q) || pkg.description.toLowerCase().includes(q));
|
|
104
|
+
if (results.length === 0) {
|
|
105
|
+
console.info(`❌ No packages found matching "${query}"`);
|
|
106
|
+
console.info(`\n📦 Available Packages (from ${searchContext}):`);
|
|
107
|
+
availablePackages.forEach((pkg) => {
|
|
108
|
+
console.info(` • @matimo/${pkg.name} (${pkg.tools} tools)`);
|
|
109
|
+
});
|
|
110
|
+
return;
|
|
111
|
+
}
|
|
112
|
+
console.info(`🔍 Search results for "${query}" (${searchContext}):\n`);
|
|
113
|
+
for (const pkg of results) {
|
|
114
|
+
const statusEmoji = pkg.status === 'available' ? '✅' : '🔜';
|
|
115
|
+
const statusText = pkg.status === 'available' ? 'Available' : 'Coming Soon';
|
|
116
|
+
console.info(`${statusEmoji} @matimo/${pkg.name} (${statusText})`);
|
|
117
|
+
console.info(` ${pkg.description}`);
|
|
118
|
+
console.info(` Tools: ${pkg.tools}`);
|
|
119
|
+
if (pkg.status === 'available') {
|
|
120
|
+
if (searchContext === 'installed') {
|
|
121
|
+
console.info(` Already installed in your project`);
|
|
122
|
+
}
|
|
123
|
+
else {
|
|
124
|
+
console.info(` Install: matimo install ${pkg.name}`);
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
console.info(` Install: Not yet available`);
|
|
129
|
+
}
|
|
130
|
+
console.info('');
|
|
131
|
+
}
|
|
132
|
+
console.info(`Total: ${results.length} package${results.length > 1 ? 's' : ''} found`);
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Find the Matimo repository root by looking for pnpm-workspace.yaml
|
|
136
|
+
*/
|
|
137
|
+
function findRepoRoot(startPath) {
|
|
138
|
+
let current = startPath;
|
|
139
|
+
// Safety: don't go above filesystem root
|
|
140
|
+
while (current !== path.dirname(current)) {
|
|
141
|
+
if (fs.existsSync(path.join(current, 'pnpm-workspace.yaml'))) {
|
|
142
|
+
return current;
|
|
143
|
+
}
|
|
144
|
+
current = path.dirname(current);
|
|
145
|
+
}
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Approval request for any tool operation
|
|
3
|
+
*/
|
|
4
|
+
export interface ApprovalRequest {
|
|
5
|
+
toolName: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
params: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Generic approval callback - simple and scalable
|
|
11
|
+
* Returns true if approved, false if rejected or user declines
|
|
12
|
+
*/
|
|
13
|
+
export type ApprovalCallback = (request: ApprovalRequest) => Promise<boolean>;
|
|
14
|
+
/**
|
|
15
|
+
* Generic, simple approval handler for all tools
|
|
16
|
+
*
|
|
17
|
+
* Design: Single, scalable approval flow for any number of tools
|
|
18
|
+
* - Tools declare requires_approval in YAML OR contain destructive keywords
|
|
19
|
+
* - Check MATIMO_AUTO_APPROVE env var (approve all)
|
|
20
|
+
* - Check MATIMO_APPROVED_PATTERNS env var (pre-approved patterns)
|
|
21
|
+
* - If not pre-approved, invoke single generic callback
|
|
22
|
+
* - No per-provider validators or custom logic needed
|
|
23
|
+
*/
|
|
24
|
+
export declare class ApprovalHandler {
|
|
25
|
+
private autoApprove;
|
|
26
|
+
private approvedPatterns;
|
|
27
|
+
private approvalCallback;
|
|
28
|
+
private destructiveKeywords;
|
|
29
|
+
constructor();
|
|
30
|
+
/**
|
|
31
|
+
* Load destructive keywords from YAML configuration file
|
|
32
|
+
* Searches for destructive-keywords.yaml in:
|
|
33
|
+
* 1. packages/core/ (development/workspace)
|
|
34
|
+
* 2. node_modules/@matimo/core/ (installed package)
|
|
35
|
+
* 3. Relative to current working directory
|
|
36
|
+
*/
|
|
37
|
+
private loadDestructiveKeywords;
|
|
38
|
+
/**
|
|
39
|
+
* Set default destructive keywords
|
|
40
|
+
*/
|
|
41
|
+
private useDefaultKeywords;
|
|
42
|
+
/**
|
|
43
|
+
* Set approval callback for interactive/custom approval
|
|
44
|
+
*/
|
|
45
|
+
setApprovalCallback(callback: ApprovalCallback): void;
|
|
46
|
+
/**
|
|
47
|
+
* Check if a tool requires approval based on YAML definition or supplied content.
|
|
48
|
+
* @param requiresApproval In Yaml - From tool definition `requires_approval` field
|
|
49
|
+
* @param content - Optional content (SQL, shell command, etc.) to check for destructive keywords
|
|
50
|
+
*
|
|
51
|
+
* Notes:
|
|
52
|
+
* - We now accept any textual content so keyword detection also applies to command/shell and sql
|
|
53
|
+
* based tools (e.g. `params.command`).
|
|
54
|
+
*/
|
|
55
|
+
requiresApproval(requiresApprovalInYaml: boolean | undefined, content?: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* Check if operation is pre-approved via env vars
|
|
58
|
+
*/
|
|
59
|
+
isPreApproved(toolName: string): boolean;
|
|
60
|
+
/**
|
|
61
|
+
* Request approval for an operation
|
|
62
|
+
* Throws if not approved and no callback available
|
|
63
|
+
*/
|
|
64
|
+
requestApproval(request: ApprovalRequest): Promise<void>;
|
|
65
|
+
/**
|
|
66
|
+
* Simple pattern matching (supports wildcards)
|
|
67
|
+
*/
|
|
68
|
+
private matchesPattern;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Get or create global approval handler
|
|
72
|
+
*/
|
|
73
|
+
export declare function getGlobalApprovalHandler(): ApprovalHandler;
|
|
74
|
+
//# sourceMappingURL=approval-handler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"approval-handler.d.ts","sourceRoot":"","sources":["../../src/approval/approval-handler.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED;;;GAGG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9E;;;;;;;;;GASG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,WAAW,CAAkB;IACrC,OAAO,CAAC,gBAAgB,CAA0B;IAClD,OAAO,CAAC,gBAAgB,CAAiC;IACzD,OAAO,CAAC,mBAAmB,CAAgB;;IAsB3C;;;;;;OAMG;IACH,OAAO,CAAC,uBAAuB;IAqD/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAyB1B;;OAEG;IACH,mBAAmB,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAIrD;;;;;;;;OAQG;IACH,gBAAgB,CAAC,sBAAsB,EAAE,OAAO,GAAG,SAAS,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO;IAexF;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAgBxC;;;OAGG;IACG,eAAe,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IA2B9D;;OAEG;IACH,OAAO,CAAC,cAAc;CAavB;AAKD;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,eAAe,CAK1D"}
|