@matimo/cli 0.1.0-alpha.4
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/LICENSE +21 -0
- package/README.md +290 -0
- package/bin/matimo.cjs +26 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +95 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/install.d.ts +6 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +48 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/list.d.ts +9 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +70 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/search.d.ts +2 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +148 -0
- package/dist/commands/search.js.map +1 -0
- package/package.json +28 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 tallclub
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
# Matimo CLI
|
|
2
|
+
|
|
3
|
+
Command-line tool for managing Matimo tool packages and discovering available tools.
|
|
4
|
+
|
|
5
|
+
## Installation
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
npm install -g @matimo/cli
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Or use directly with npx:
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
npx @matimo/cli@latest list
|
|
15
|
+
npx @matimo/cli@latest search
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Commands
|
|
19
|
+
|
|
20
|
+
### `matimo list`
|
|
21
|
+
|
|
22
|
+
List all installed Matimo tool packages.
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
matimo list
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
Output:
|
|
29
|
+
```
|
|
30
|
+
š¦ Installed Matimo Packages:
|
|
31
|
+
|
|
32
|
+
š @matimo/slack
|
|
33
|
+
Slack workspace tools
|
|
34
|
+
Tools: slack-send-message, slack-list-channels, slack-get-messages, ...
|
|
35
|
+
|
|
36
|
+
š @matimo/github
|
|
37
|
+
GitHub repository and issue management tools
|
|
38
|
+
Tools: github-create-issue, github-list-repos, github-get-issue, ...
|
|
39
|
+
|
|
40
|
+
š @matimo/gmail
|
|
41
|
+
Gmail email tools
|
|
42
|
+
Tools: gmail-send-email, gmail-list-messages, gmail-create-draft, ...
|
|
43
|
+
|
|
44
|
+
Total: 3 packages installed
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
**Use when:** You want to see all installed tool packages and a preview of available tools.
|
|
48
|
+
|
|
49
|
+
### `matimo install [package...]`
|
|
50
|
+
|
|
51
|
+
Install one or more tool packages from npm.
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
# Install a single package
|
|
55
|
+
matimo install slack
|
|
56
|
+
|
|
57
|
+
# Install multiple packages
|
|
58
|
+
matimo install github stripe notion
|
|
59
|
+
|
|
60
|
+
# Install specific version
|
|
61
|
+
matimo install slack@1.2.0
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
The CLI automatically resolves `{package}` to `@matimo/{package}` and installs from npm.
|
|
65
|
+
|
|
66
|
+
**Examples:**
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
# Install Slack tools
|
|
70
|
+
matimo install slack
|
|
71
|
+
# ā Installs @matimo/slack
|
|
72
|
+
|
|
73
|
+
# Install GitHub and Stripe
|
|
74
|
+
matimo install github stripe
|
|
75
|
+
# ā Installs @matimo/github and @matimo/stripe
|
|
76
|
+
|
|
77
|
+
# See what's available
|
|
78
|
+
matimo search email
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
**Next Steps:**
|
|
82
|
+
|
|
83
|
+
After installation, you can use auto-discovery in your code:
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { MatimoInstance } from 'matimo';
|
|
87
|
+
|
|
88
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
89
|
+
|
|
90
|
+
// New tools are automatically available!
|
|
91
|
+
const result = await matimo.execute('slack-send-message', {
|
|
92
|
+
channel: '#general',
|
|
93
|
+
text: 'Hello from Matimo!'
|
|
94
|
+
});
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### `matimo search [query]`
|
|
98
|
+
|
|
99
|
+
Search for tools or packages by name.
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
# Search for email tools
|
|
103
|
+
matimo search email
|
|
104
|
+
|
|
105
|
+
# Search for a specific package
|
|
106
|
+
matimo search github
|
|
107
|
+
|
|
108
|
+
# Search for Slack tools
|
|
109
|
+
matimo search slack
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Output:
|
|
113
|
+
```
|
|
114
|
+
Results for "email":
|
|
115
|
+
|
|
116
|
+
š @matimo/gmail
|
|
117
|
+
Gmail email tools
|
|
118
|
+
Tools: gmail-send-email, gmail-list-messages, gmail-create-draft, ...
|
|
119
|
+
|
|
120
|
+
š @matimo/sendgrid
|
|
121
|
+
SendGrid email tools
|
|
122
|
+
Tools: sendgrid-send-email, sendgrid-list-templates, ...
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Use when:** You want to find tools before installing them, or discover what's available for a specific service.
|
|
126
|
+
|
|
127
|
+
## Auto-Discovery
|
|
128
|
+
|
|
129
|
+
After installing packages with the CLI, use auto-discovery to automatically load them:
|
|
130
|
+
|
|
131
|
+
```typescript
|
|
132
|
+
import { MatimoInstance } from 'matimo';
|
|
133
|
+
|
|
134
|
+
// Discovers all installed @matimo/* packages
|
|
135
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
136
|
+
|
|
137
|
+
// List all available tools
|
|
138
|
+
const tools = matimo.listTools();
|
|
139
|
+
|
|
140
|
+
// Execute any tool
|
|
141
|
+
const result = await matimo.execute('github-create-issue', {
|
|
142
|
+
owner: 'tallclub',
|
|
143
|
+
repo: 'matimo',
|
|
144
|
+
title: 'My issue'
|
|
145
|
+
});
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
**How it works:**
|
|
149
|
+
|
|
150
|
+
1. CLI installs packages to `node_modules/@matimo/{provider}`
|
|
151
|
+
2. `MatimoInstance.init({ autoDiscover: true })` scans that directory
|
|
152
|
+
3. All tool definitions are loaded and registered automatically
|
|
153
|
+
4. Tools are ready to use via `matimo.execute()`
|
|
154
|
+
|
|
155
|
+
## Package Ecosystem
|
|
156
|
+
|
|
157
|
+
Matimo packages are published to npm with the `@matimo` scope:
|
|
158
|
+
|
|
159
|
+
- `@matimo/slack` - Slack workspace tools
|
|
160
|
+
- `@matimo/github` - GitHub repository tools
|
|
161
|
+
- `@matimo/gmail` - Gmail email tools
|
|
162
|
+
- `@matimo/stripe` - Stripe payment tools (coming soon)
|
|
163
|
+
- `@matimo/twilio` - Twilio SMS/voice tools (coming soon)
|
|
164
|
+
|
|
165
|
+
[Browse all Matimo packages](https://www.npmjs.com/search?q=%40matimo)
|
|
166
|
+
|
|
167
|
+
## Creating Tool Packages
|
|
168
|
+
|
|
169
|
+
Want to create your own tools? See the [Adding Tools to Matimo](../../docs/tool-development/ADDING_TOOLS.md) guide.
|
|
170
|
+
|
|
171
|
+
**Summary:** Create a package with YAML tool definitions and publish it to npm as `@matimo/{provider}`.
|
|
172
|
+
|
|
173
|
+
## Development
|
|
174
|
+
|
|
175
|
+
Build and test the CLI:
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
# Install deps
|
|
179
|
+
pnpm install
|
|
180
|
+
|
|
181
|
+
# Build
|
|
182
|
+
pnpm build
|
|
183
|
+
|
|
184
|
+
# Test
|
|
185
|
+
pnpm test
|
|
186
|
+
|
|
187
|
+
# Link locally for testing
|
|
188
|
+
pnpm link --global packages/cli
|
|
189
|
+
matimo list # Test the command
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
## Help
|
|
193
|
+
|
|
194
|
+
Get help for any command:
|
|
195
|
+
|
|
196
|
+
```bash
|
|
197
|
+
matimo --help
|
|
198
|
+
matimo list --help
|
|
199
|
+
matimo search --help
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
## Examples
|
|
203
|
+
|
|
204
|
+
### Install and Use Slack Tools
|
|
205
|
+
|
|
206
|
+
```bash
|
|
207
|
+
# 1. Install
|
|
208
|
+
matimo install slack
|
|
209
|
+
|
|
210
|
+
# 2. Use in code
|
|
211
|
+
const { MatimoInstance } = require('matimo');
|
|
212
|
+
|
|
213
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
214
|
+
|
|
215
|
+
const result = await matimo.execute('slack-send-message', {
|
|
216
|
+
channel: '#general',
|
|
217
|
+
text: 'Hello Slack!'
|
|
218
|
+
});
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Search and Install GitHub Tools
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# 1. Search for GitHub tools
|
|
225
|
+
matimo search github
|
|
226
|
+
|
|
227
|
+
# 2. Install
|
|
228
|
+
matimo install github
|
|
229
|
+
|
|
230
|
+
# 3. Use
|
|
231
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
232
|
+
|
|
233
|
+
const issue = await matimo.execute('github-create-issue', {
|
|
234
|
+
owner: 'tallclub',
|
|
235
|
+
repo: 'matimo',
|
|
236
|
+
title: 'New feature'
|
|
237
|
+
});
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### Install Multiple Packages
|
|
241
|
+
|
|
242
|
+
```bash
|
|
243
|
+
matimo install slack github gmail
|
|
244
|
+
|
|
245
|
+
# All three are now installed and auto-discoverable
|
|
246
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
247
|
+
|
|
248
|
+
// Use any tool from any package
|
|
249
|
+
await matimo.execute('slack-send-message', {...});
|
|
250
|
+
await matimo.execute('github-create-issue', {...});
|
|
251
|
+
await matimo.execute('gmail-send-email', {...});
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
## Troubleshooting
|
|
255
|
+
|
|
256
|
+
### "Package not found" error
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Verify the package name (should be valid npm package)
|
|
260
|
+
npm search @matimo/slack
|
|
261
|
+
|
|
262
|
+
# Try installing with full name
|
|
263
|
+
npm install @matimo/slack
|
|
264
|
+
```
|
|
265
|
+
|
|
266
|
+
### Tools not showing in list
|
|
267
|
+
|
|
268
|
+
```bash
|
|
269
|
+
# Reinstall packages in current project
|
|
270
|
+
npm install @matimo/slack
|
|
271
|
+
|
|
272
|
+
# Verify they're installed
|
|
273
|
+
npm ls @matimo/slack
|
|
274
|
+
|
|
275
|
+
# Use auto-discovery in code
|
|
276
|
+
const matimo = await MatimoInstance.init({ autoDiscover: true });
|
|
277
|
+
```
|
|
278
|
+
|
|
279
|
+
### Need specific version?
|
|
280
|
+
|
|
281
|
+
```bash
|
|
282
|
+
matimo install slack@1.2.0
|
|
283
|
+
npm install @matimo/slack@1.2.0
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
## Support
|
|
287
|
+
|
|
288
|
+
- š [Matimo Documentation](../../docs/index.md)
|
|
289
|
+
- š ļø [Tool Development Guide](../../docs/tool-development/ADDING_TOOLS.md)
|
|
290
|
+
- š¬ [GitHub Issues](https://github.com/tallclub/matimo/issues)
|
package/bin/matimo.cjs
ADDED
|
@@ -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
|
+
});
|
package/dist/cli.d.ts
ADDED
|
@@ -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"}
|
package/dist/cli.js
ADDED
|
@@ -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
|
package/dist/cli.js.map
ADDED
|
@@ -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":"AAAA;;;;GAIG;AACH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,wCAAwC,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAC;QAC/C,OAAO,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IASD,MAAM,iBAAiB,GAAkB,EAAE,CAAC;IAE5C,uEAAuE;IACvE,6DAA6D;IAC7D,MAAM,oBAAoB,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,sBAAsB,CAAC,CAAC;IACjF,MAAM,oBAAoB,GAAG,EAAE,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;IAEjE,4EAA4E;IAC5E,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAC7C,MAAM,QAAQ,GAAG,QAAQ,KAAK,IAAI,CAAC;IACnC,MAAM,eAAe,GAAG,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,IAAI,SAAiB,CAAC;IACtB,IAAI,aAAyC,CAAC;IAC9C,IAAI,QAAQ,GAAa,EAAE,CAAC;IAE5B,oFAAoF;IACpF,IAAI,QAAQ,IAAI,eAAe,EAAE,CAAC;QAChC,SAAS,GAAG,eAAe,CAAC;QAC5B,aAAa,GAAG,YAAY,CAAC;QAC7B,QAAQ,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC7B,CAAC;SAAM,IAAI,oBAAoB,EAAE,CAAC;QAChC,SAAS,GAAG,oBAAoB,CAAC;QACjC,aAAa,GAAG,WAAW,CAAC;IAC9B,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CACV,yFAAyF,CAC1F,CAAC;QACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAE1C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,yCAAyC;YACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YAChD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;YAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,eAAe,CAAC;gBAAE,SAAS;YAE9C,IAAI,CAAC;gBACH,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,OAAO,CAAC,CAAC,CAAC;gBAE1E,qCAAqC;gBACrC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;gBACjD,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,IAAI,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBAC5B,SAAS,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE;wBAChD,MAAM,IAAI,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;wBACjD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;oBAC5B,CAAC,CAAC,CAAC,MAAM,CAAC;gBACZ,CAAC;gBAED,gDAAgD;gBAChD,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;gBAEzD,iBAAiB,CAAC,IAAI,CAAC;oBACrB,IAAI,EAAE,OAAO;oBACb,WAAW,EAAE,WAAW,CAAC,WAAW,IAAI,0BAA0B;oBAClE,KAAK,EAAE,SAAS;oBAChB,MAAM,EAAE,WAAW;iBACpB,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,0CAA0C;gBAC1C,SAAS;YACX,CAAC;QACH,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;YAChE,OAAO,CAAC,IAAI,CAAC,uEAAuE,CAAC,CAAC;QACxF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,oDAAoD,CAAC,CAAC;YACpE,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,wBAAwB;IACxB,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAE/D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACnC,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;YAClC,OAAO,CAAC,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACrE,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;QACzF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;YAC1D,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAC;QAC9E,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,CAAC,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IAC9B,MAAM,OAAO,GAAG,iBAAiB,CAAC,MAAM,CACtC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAC,CAC3E,CAAC;IAEF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,IAAI,CAAC,iCAAiC,KAAK,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,IAAI,CAAC,iCAAiC,aAAa,IAAI,CAAC,CAAC;QACjE,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE;YAChC,OAAO,CAAC,IAAI,CAAC,eAAe,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,SAAS,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,0BAA0B,KAAK,MAAM,aAAa,MAAM,CAAC,CAAC;IAEvE,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE,CAAC;QAC1B,MAAM,WAAW,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC;QAC5D,MAAM,UAAU,GAAG,GAAG,CAAC,MAAM,KAAK,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,aAAa,CAAC;QAC5E,OAAO,CAAC,IAAI,CAAC,GAAG,WAAW,YAAY,GAAG,CAAC,IAAI,KAAK,UAAU,GAAG,CAAC,CAAC;QACnE,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACtC,OAAO,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,KAAK,EAAE,CAAC,CAAC;QAEvC,IAAI,GAAG,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;YAC/B,IAAI,aAAa,KAAK,WAAW,EAAE,CAAC;gBAClC,OAAO,CAAC,IAAI,CAAC,sCAAsC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,8BAA8B,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YACzD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAChD,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,UAAU,OAAO,CAAC,MAAM,WAAW,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;AACzF,CAAC;AAED;;GAEG;AACH,SAAS,YAAY,CAAC,SAAiB;IACrC,IAAI,OAAO,GAAG,SAAS,CAAC;IAExB,yCAAyC;IACzC,OAAO,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,qBAAqB,CAAC,CAAC,EAAE,CAAC;YAC7D,OAAO,OAAO,CAAC;QACjB,CAAC;QACD,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAClC,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
|
package/package.json
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@matimo/cli",
|
|
3
|
+
"version": "0.1.0-alpha.4",
|
|
4
|
+
"description": "CLI tools for managing Matimo tool installations",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"bin": {
|
|
9
|
+
"matimo": "bin/matimo.cjs"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"bin",
|
|
13
|
+
"dist",
|
|
14
|
+
"README.md"
|
|
15
|
+
],
|
|
16
|
+
"dependencies": {
|
|
17
|
+
"@matimo/core": "0.1.0-alpha.4"
|
|
18
|
+
},
|
|
19
|
+
"devDependencies": {
|
|
20
|
+
"@types/node": "^25.1.0",
|
|
21
|
+
"typescript": "^5.9.3",
|
|
22
|
+
"tsx": "^4.21.0"
|
|
23
|
+
},
|
|
24
|
+
"scripts": {
|
|
25
|
+
"build": "tsc",
|
|
26
|
+
"watch": "tsc --watch"
|
|
27
|
+
}
|
|
28
|
+
}
|