matimo 0.1.0-alpha.1 → 0.1.0-alpha.10

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 (151) hide show
  1. package/README.md +136 -544
  2. package/package.json +24 -24
  3. package/packages/cli/bin/matimo.cjs +26 -0
  4. package/packages/cli/dist/cli.d.ts +6 -0
  5. package/packages/cli/dist/cli.d.ts.map +1 -0
  6. package/packages/cli/dist/cli.js +95 -0
  7. package/packages/cli/dist/cli.js.map +1 -0
  8. package/packages/cli/dist/commands/install.d.ts +6 -0
  9. package/packages/cli/dist/commands/install.d.ts.map +1 -0
  10. package/packages/cli/dist/commands/install.js +48 -0
  11. package/packages/cli/dist/commands/install.js.map +1 -0
  12. package/packages/cli/dist/commands/list.d.ts +9 -0
  13. package/packages/cli/dist/commands/list.d.ts.map +1 -0
  14. package/packages/cli/dist/commands/list.js +70 -0
  15. package/packages/cli/dist/commands/list.js.map +1 -0
  16. package/packages/cli/dist/commands/search.d.ts +2 -0
  17. package/packages/cli/dist/commands/search.d.ts.map +1 -0
  18. package/packages/cli/dist/commands/search.js +148 -0
  19. package/packages/cli/dist/commands/search.js.map +1 -0
  20. package/packages/core/dist/approval/approval-handler.d.ts +74 -0
  21. package/packages/core/dist/approval/approval-handler.d.ts.map +1 -0
  22. package/packages/core/dist/approval/approval-handler.js +210 -0
  23. package/packages/core/dist/approval/approval-handler.js.map +1 -0
  24. package/{dist → packages/core/dist}/core/schema.d.ts +25 -4
  25. package/packages/core/dist/core/schema.d.ts.map +1 -0
  26. package/{dist → packages/core/dist}/core/schema.js +25 -6
  27. package/packages/core/dist/core/schema.js.map +1 -0
  28. package/packages/core/dist/core/tool-loader.d.ts +57 -0
  29. package/packages/core/dist/core/tool-loader.d.ts.map +1 -0
  30. package/packages/core/dist/core/tool-loader.js +250 -0
  31. package/packages/core/dist/core/tool-loader.js.map +1 -0
  32. package/{dist → packages/core/dist}/core/tool-registry.d.ts.map +1 -1
  33. package/{dist → packages/core/dist}/core/tool-registry.js +5 -1
  34. package/packages/core/dist/core/tool-registry.js.map +1 -0
  35. package/{dist → packages/core/dist}/core/types.d.ts +20 -1
  36. package/packages/core/dist/core/types.d.ts.map +1 -0
  37. package/{dist → packages/core/dist}/decorators/tool-decorator.d.ts.map +1 -1
  38. package/{dist → packages/core/dist}/decorators/tool-decorator.js +7 -4
  39. package/packages/core/dist/decorators/tool-decorator.js.map +1 -0
  40. package/{dist → packages/core/dist}/encodings/parameter-encoding.d.ts +1 -1
  41. package/{dist → packages/core/dist}/encodings/parameter-encoding.d.ts.map +1 -1
  42. package/{dist → packages/core/dist}/encodings/parameter-encoding.js +12 -4
  43. package/packages/core/dist/encodings/parameter-encoding.js.map +1 -0
  44. package/{dist → packages/core/dist}/errors/matimo-error.d.ts +8 -1
  45. package/packages/core/dist/errors/matimo-error.d.ts.map +1 -0
  46. package/{dist → packages/core/dist}/errors/matimo-error.js +23 -1
  47. package/packages/core/dist/errors/matimo-error.js.map +1 -0
  48. package/{dist → packages/core/dist}/executors/command-executor.d.ts.map +1 -1
  49. package/{dist → packages/core/dist}/executors/command-executor.js +5 -1
  50. package/packages/core/dist/executors/command-executor.js.map +1 -0
  51. package/packages/core/dist/executors/function-executor.d.ts +23 -0
  52. package/packages/core/dist/executors/function-executor.d.ts.map +1 -0
  53. package/packages/core/dist/executors/function-executor.js +181 -0
  54. package/packages/core/dist/executors/function-executor.js.map +1 -0
  55. package/packages/core/dist/executors/http-executor.d.ts +78 -0
  56. package/packages/core/dist/executors/http-executor.d.ts.map +1 -0
  57. package/packages/core/dist/executors/http-executor.js +279 -0
  58. package/packages/core/dist/executors/http-executor.js.map +1 -0
  59. package/{dist → packages/core/dist}/index.d.ts +9 -1
  60. package/packages/core/dist/index.d.ts.map +1 -0
  61. package/{dist → packages/core/dist}/index.js +10 -0
  62. package/packages/core/dist/index.js.map +1 -0
  63. package/packages/core/dist/integrations/langchain.d.ts +46 -0
  64. package/packages/core/dist/integrations/langchain.d.ts.map +1 -0
  65. package/packages/core/dist/integrations/langchain.js +197 -0
  66. package/packages/core/dist/integrations/langchain.js.map +1 -0
  67. package/packages/core/dist/logging/index.d.ts +3 -0
  68. package/packages/core/dist/logging/index.d.ts.map +1 -0
  69. package/packages/core/dist/logging/index.js +3 -0
  70. package/packages/core/dist/logging/index.js.map +1 -0
  71. package/packages/core/dist/logging/logger.d.ts +96 -0
  72. package/packages/core/dist/logging/logger.d.ts.map +1 -0
  73. package/packages/core/dist/logging/logger.js +53 -0
  74. package/packages/core/dist/logging/logger.js.map +1 -0
  75. package/packages/core/dist/logging/winston-logger.d.ts +29 -0
  76. package/packages/core/dist/logging/winston-logger.d.ts.map +1 -0
  77. package/packages/core/dist/logging/winston-logger.js +73 -0
  78. package/packages/core/dist/logging/winston-logger.js.map +1 -0
  79. package/{dist → packages/core/dist}/matimo-instance.d.ts +46 -4
  80. package/packages/core/dist/matimo-instance.d.ts.map +1 -0
  81. package/{dist → packages/core/dist}/matimo-instance.js +167 -15
  82. package/packages/core/dist/matimo-instance.js.map +1 -0
  83. package/dist/core/schema.d.ts.map +0 -1
  84. package/dist/core/schema.js.map +0 -1
  85. package/dist/core/tool-loader.d.ts +0 -29
  86. package/dist/core/tool-loader.d.ts.map +0 -1
  87. package/dist/core/tool-loader.js +0 -98
  88. package/dist/core/tool-loader.js.map +0 -1
  89. package/dist/core/tool-registry.js.map +0 -1
  90. package/dist/core/types.d.ts.map +0 -1
  91. package/dist/decorators/tool-decorator.js.map +0 -1
  92. package/dist/encodings/parameter-encoding.js.map +0 -1
  93. package/dist/errors/matimo-error.d.ts.map +0 -1
  94. package/dist/errors/matimo-error.js.map +0 -1
  95. package/dist/executors/command-executor.js.map +0 -1
  96. package/dist/executors/http-executor.d.ts +0 -26
  97. package/dist/executors/http-executor.d.ts.map +0 -1
  98. package/dist/executors/http-executor.js +0 -133
  99. package/dist/executors/http-executor.js.map +0 -1
  100. package/dist/index.d.ts.map +0 -1
  101. package/dist/index.js.map +0 -1
  102. package/dist/matimo-instance.d.ts.map +0 -1
  103. package/dist/matimo-instance.js.map +0 -1
  104. package/docs/Gemfile +0 -5
  105. package/docs/RELEASES.md +0 -69
  106. package/docs/ROADMAP.md +0 -138
  107. package/docs/_config.yml +0 -27
  108. package/docs/api-reference/ERRORS.md +0 -445
  109. package/docs/api-reference/SDK.md +0 -582
  110. package/docs/api-reference/TYPES.md +0 -415
  111. package/docs/architecture/OAUTH.md +0 -1366
  112. package/docs/architecture/OVERVIEW.md +0 -564
  113. package/docs/assets/logo.png +0 -0
  114. package/docs/community/COMMIT_GUIDELINES.md +0 -552
  115. package/docs/framework-integrations/LANGCHAIN.md +0 -286
  116. package/docs/getting-started/QUICK_START.md +0 -211
  117. package/docs/getting-started/YOUR_FIRST_TOOL.md +0 -217
  118. package/docs/getting-started/installation.md +0 -124
  119. package/docs/index.md +0 -288
  120. package/docs/tool-development/DECORATOR_GUIDE.md +0 -633
  121. package/docs/tool-development/OAUTH_LINK.md +0 -5
  122. package/docs/tool-development/PROVIDER_CONFIGURATION.md +0 -458
  123. package/docs/tool-development/TESTING.md +0 -412
  124. package/docs/tool-development/TOOL_SPECIFICATION.md +0 -793
  125. package/docs/tool-development/YAML_TOOLS.md +0 -65
  126. package/docs/troubleshooting/FAQ.md +0 -391
  127. package/docs/user-guide/AUTHENTICATION.md +0 -255
  128. package/docs/user-guide/DEVELOPMENT_STANDARDS.md +0 -698
  129. package/docs/user-guide/SDK_PATTERNS.md +0 -316
  130. package/docs/user-guide/TOOL_DISCOVERY.md +0 -209
  131. /package/{dist → packages/core/dist}/auth/oauth2-config.d.ts +0 -0
  132. /package/{dist → packages/core/dist}/auth/oauth2-config.d.ts.map +0 -0
  133. /package/{dist → packages/core/dist}/auth/oauth2-config.js +0 -0
  134. /package/{dist → packages/core/dist}/auth/oauth2-config.js.map +0 -0
  135. /package/{dist → packages/core/dist}/auth/oauth2-handler.d.ts +0 -0
  136. /package/{dist → packages/core/dist}/auth/oauth2-handler.d.ts.map +0 -0
  137. /package/{dist → packages/core/dist}/auth/oauth2-handler.js +0 -0
  138. /package/{dist → packages/core/dist}/auth/oauth2-handler.js.map +0 -0
  139. /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.d.ts +0 -0
  140. /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.d.ts.map +0 -0
  141. /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.js +0 -0
  142. /package/{dist → packages/core/dist}/auth/oauth2-provider-loader.js.map +0 -0
  143. /package/{dist → packages/core/dist}/core/tool-registry.d.ts +0 -0
  144. /package/{dist → packages/core/dist}/core/types.js +0 -0
  145. /package/{dist → packages/core/dist}/core/types.js.map +0 -0
  146. /package/{dist → packages/core/dist}/decorators/index.d.ts +0 -0
  147. /package/{dist → packages/core/dist}/decorators/index.d.ts.map +0 -0
  148. /package/{dist → packages/core/dist}/decorators/index.js +0 -0
  149. /package/{dist → packages/core/dist}/decorators/index.js.map +0 -0
  150. /package/{dist → packages/core/dist}/decorators/tool-decorator.d.ts +0 -0
  151. /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.1",
4
- "description": "Framework-agnostic YAML-driven tool ecosystem for AI agents. Define tools once in YAML, use them everywhere: SDK, MCP, CLI, REST API.",
5
- "main": "dist/index.js",
6
- "types": "dist/index.d.ts",
3
+ "version": "0.1.0-alpha.10",
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
- "@modelcontextprotocol/sdk": "^1.25.3",
57
- "axios": "^1.13.4",
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.10",
59
+ "@matimo/core": "0.1.0-alpha.10"
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": "tsc",
82
- "watch": "tsc --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 src test --ext .ts",
87
- "lint:fix": "eslint src test --ext .ts --fix",
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,6 @@
1
+ export declare function showHelp(): void;
2
+ /**
3
+ * Main CLI handler - parses commands and routes to appropriate handlers
4
+ */
5
+ export declare function main(cliArgs?: string[]): Promise<void>;
6
+ //# sourceMappingURL=cli.d.ts.map
@@ -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,6 @@
1
+ /**
2
+ * Install command - Install a specific tool package
3
+ * matimo install slack gmail stripe
4
+ */
5
+ export declare function installCommand(toolNames: string[]): Promise<void>;
6
+ //# sourceMappingURL=install.d.ts.map
@@ -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,2 @@
1
+ export declare function searchCommand(query: string): Promise<void>;
2
+ //# sourceMappingURL=search.d.ts.map
@@ -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"}