@trikhub/cli 0.2.0

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 (67) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +389 -0
  3. package/dist/cli.d.ts +8 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +105 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/info.d.ts +11 -0
  8. package/dist/commands/info.d.ts.map +1 -0
  9. package/dist/commands/info.js +101 -0
  10. package/dist/commands/info.js.map +1 -0
  11. package/dist/commands/install.d.ts +17 -0
  12. package/dist/commands/install.d.ts.map +1 -0
  13. package/dist/commands/install.js +358 -0
  14. package/dist/commands/install.js.map +1 -0
  15. package/dist/commands/list.d.ts +11 -0
  16. package/dist/commands/list.d.ts.map +1 -0
  17. package/dist/commands/list.js +96 -0
  18. package/dist/commands/list.js.map +1 -0
  19. package/dist/commands/login.d.ts +19 -0
  20. package/dist/commands/login.d.ts.map +1 -0
  21. package/dist/commands/login.js +154 -0
  22. package/dist/commands/login.js.map +1 -0
  23. package/dist/commands/publish.d.ts +13 -0
  24. package/dist/commands/publish.d.ts.map +1 -0
  25. package/dist/commands/publish.js +285 -0
  26. package/dist/commands/publish.js.map +1 -0
  27. package/dist/commands/search.d.ts +12 -0
  28. package/dist/commands/search.d.ts.map +1 -0
  29. package/dist/commands/search.js +60 -0
  30. package/dist/commands/search.js.map +1 -0
  31. package/dist/commands/sync.d.ts +19 -0
  32. package/dist/commands/sync.d.ts.map +1 -0
  33. package/dist/commands/sync.js +193 -0
  34. package/dist/commands/sync.js.map +1 -0
  35. package/dist/commands/uninstall.d.ts +11 -0
  36. package/dist/commands/uninstall.d.ts.map +1 -0
  37. package/dist/commands/uninstall.js +153 -0
  38. package/dist/commands/uninstall.js.map +1 -0
  39. package/dist/commands/upgrade.d.ts +15 -0
  40. package/dist/commands/upgrade.d.ts.map +1 -0
  41. package/dist/commands/upgrade.js +144 -0
  42. package/dist/commands/upgrade.js.map +1 -0
  43. package/dist/index.d.ts +10 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +14 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/lib/config.d.ts +79 -0
  48. package/dist/lib/config.d.ts.map +1 -0
  49. package/dist/lib/config.js +202 -0
  50. package/dist/lib/config.js.map +1 -0
  51. package/dist/lib/registry.d.ts +90 -0
  52. package/dist/lib/registry.d.ts.map +1 -0
  53. package/dist/lib/registry.js +294 -0
  54. package/dist/lib/registry.js.map +1 -0
  55. package/dist/lib/storage.d.ts +82 -0
  56. package/dist/lib/storage.d.ts.map +1 -0
  57. package/dist/lib/storage.js +177 -0
  58. package/dist/lib/storage.js.map +1 -0
  59. package/dist/lib/validator.d.ts +24 -0
  60. package/dist/lib/validator.d.ts.map +1 -0
  61. package/dist/lib/validator.js +181 -0
  62. package/dist/lib/validator.js.map +1 -0
  63. package/dist/types.d.ts +187 -0
  64. package/dist/types.d.ts.map +1 -0
  65. package/dist/types.js +36 -0
  66. package/dist/types.js.map +1 -0
  67. package/package.json +66 -0
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Muffles
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,389 @@
1
+ # TrikHub CLI
2
+
3
+ The official command-line tool for [TrikHub](https://trikhub.com) - install and manage AI skills (triks) for your applications.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install -g @trikhub/cli
9
+ ```
10
+
11
+ ## Quick Start
12
+
13
+ ```bash
14
+ # Search for triks
15
+ trik search article
16
+
17
+ # Install a trik
18
+ trik install @acme/article-search
19
+
20
+ # List installed triks
21
+ trik list
22
+
23
+ # Get trik info
24
+ trik info @acme/article-search
25
+
26
+ # Upgrade a trik
27
+ trik upgrade @acme/article-search
28
+
29
+ # Uninstall a trik
30
+ trik uninstall @acme/article-search
31
+ ```
32
+
33
+ ## Commands
34
+
35
+ ### `trik install <name>`
36
+
37
+ Install a trik from the registry.
38
+
39
+ ```bash
40
+ # Install latest version
41
+ trik install @scope/trik-name
42
+
43
+ # Install specific version
44
+ trik install @scope/trik-name@1.2.3
45
+
46
+ # Or use --version flag
47
+ trik install @scope/trik-name --version 1.2.3
48
+ ```
49
+
50
+ The install process:
51
+ 1. Resolves configuration (see [Local vs Global Configuration](#local-vs-global-configuration))
52
+ 2. Fetches trik metadata from the registry
53
+ 3. Downloads the tarball from GitHub Releases
54
+ 4. Extracts to the configured triks directory
55
+ 5. **Validates** the trik (manifest structure, security rules)
56
+ 6. Updates the lockfile
57
+
58
+ If validation fails, the trik is removed and installation aborts.
59
+
60
+ ### `trik search <query>`
61
+
62
+ Search for triks in the registry.
63
+
64
+ ```bash
65
+ trik search article
66
+ trik search "web scraping"
67
+ ```
68
+
69
+ ### `trik list`
70
+
71
+ List all installed triks.
72
+
73
+ ```bash
74
+ trik list
75
+ trik list --json # Output as JSON
76
+ ```
77
+
78
+ ### `trik info <name>`
79
+
80
+ Show detailed information about a trik.
81
+
82
+ ```bash
83
+ trik info @acme/article-search
84
+ trik info @acme/article-search --json # Output as JSON
85
+ ```
86
+
87
+ ### `trik uninstall <name>`
88
+
89
+ Remove an installed trik.
90
+
91
+ ```bash
92
+ trik uninstall @acme/article-search
93
+ ```
94
+
95
+ ### `trik upgrade [name]`
96
+
97
+ Upgrade installed triks to their latest versions.
98
+
99
+ ```bash
100
+ # Upgrade all triks
101
+ trik upgrade
102
+
103
+ # Upgrade specific trik
104
+ trik upgrade @acme/article-search
105
+
106
+ # Force reinstall even if up to date
107
+ trik upgrade --force
108
+ ```
109
+
110
+ ## Authentication
111
+
112
+ ### `trik login`
113
+
114
+ Authenticate with TrikHub using your GitHub account.
115
+
116
+ ```bash
117
+ trik login
118
+ ```
119
+
120
+ This starts a device authorization flow:
121
+ 1. Opens a browser to GitHub
122
+ 2. Displays a code to enter
123
+ 3. After authorization, your session is saved locally
124
+
125
+ ### `trik logout`
126
+
127
+ Remove saved authentication.
128
+
129
+ ```bash
130
+ trik logout
131
+ ```
132
+
133
+ ### `trik whoami`
134
+
135
+ Show the currently authenticated user.
136
+
137
+ ```bash
138
+ trik whoami
139
+ ```
140
+
141
+ ## Publishing
142
+
143
+ ### `trik publish`
144
+
145
+ Publish a trik to the TrikHub registry.
146
+
147
+ ```bash
148
+ # From inside your trik directory
149
+ trik publish
150
+
151
+ # Or specify a directory
152
+ trik publish --directory /path/to/my-trik
153
+
154
+ # Publish a specific version
155
+ trik publish --tag 1.2.0
156
+
157
+ # Skip GitHub release creation (create it manually)
158
+ trik publish --skip-release
159
+ ```
160
+
161
+ **Prerequisites:**
162
+
163
+ - Logged in with `trik login`
164
+ - GitHub CLI (`gh`) installed and authenticated
165
+ - Write access to the GitHub repository
166
+
167
+ ### Publishing Flow
168
+
169
+ The CLI will:
170
+
171
+ 1. Validate your trik structure (manifest.json, trikhub.json, dist/)
172
+ 2. Create a tarball with required files
173
+ 3. Compute SHA-256 hash for integrity verification
174
+ 4. Create a GitHub Release with the tarball attached
175
+ 5. Register the trik with the TrikHub registry
176
+
177
+ ### Required Files
178
+
179
+ ```
180
+ your-trik/
181
+ ├── manifest.json # Trik manifest (required)
182
+ ├── trikhub.json # Registry metadata (required)
183
+ ├── dist/
184
+ │ └── graph.js # Compiled entry point (required)
185
+ └── README.md # Documentation (recommended)
186
+ ```
187
+
188
+ ### Manifest Requirements
189
+
190
+ Your `manifest.json` must pass validation:
191
+
192
+ - Use `enum`, `const`, or `pattern` to constrain strings in `agentDataSchema`
193
+ - Template mode requires `responseTemplates`
194
+ - Passthrough mode requires `userContentSchema`
195
+
196
+ See the [SAAAS SDK documentation](https://github.com/trikhub/saaas-sdk) for manifest schema details.
197
+
198
+ ## Trik Names
199
+
200
+ Triks use scoped names similar to npm:
201
+
202
+ ```
203
+ @scope/trik-name
204
+ @scope/trik-name@version
205
+ ```
206
+
207
+ - **Scope**: Maps to a GitHub user or organization (e.g., `@acme`)
208
+ - **Name**: The trik name (e.g., `article-search`)
209
+ - **Version**: Optional semver version (e.g., `1.2.3`)
210
+
211
+ **Note:** All trik names are normalized to lowercase. `@Acme/Article-Search` becomes `@acme/article-search`.
212
+
213
+ ## Local vs Global Configuration
214
+
215
+ The CLI supports both **local** (project-level) and **global** (user-level) configurations. This allows you to have project-specific trik installations or share triks across all projects.
216
+
217
+ ### Configuration Resolution
218
+
219
+ When you run a command like `trik install`, the CLI resolves configuration in this order:
220
+
221
+ 1. **Local config**: Checks for `.trikhub/config.json` in the current directory
222
+ 2. **Global config**: Falls back to `~/.trikhub/config.json` in your home directory
223
+ 3. **Setup prompt**: If neither exists, prompts you to choose where to set up
224
+
225
+ ```
226
+ $ trik install @acme/article-search
227
+
228
+ No TrikHub configuration found.
229
+ Triks need a place to be installed.
230
+
231
+ ? Where would you like to set up TrikHub?
232
+ ❯ Global (~/.trikhub) - Available to all projects
233
+ Local (./.trikhub) - Project-specific configuration
234
+ ```
235
+
236
+ ### Global Configuration (Default)
237
+
238
+ Triks are installed in your home directory and available to all projects:
239
+
240
+ ```
241
+ ~/.trikhub/
242
+ ├── config.json # CLI configuration
243
+ ├── triks.lock # Lockfile tracking installed versions
244
+ └── triks/ # Installed triks
245
+ └── @scope/trik-name/
246
+ ```
247
+
248
+ ### Local Configuration
249
+
250
+ Triks are installed in the current project directory. Useful for:
251
+
252
+ - Project-specific trik versions
253
+ - Sharing trik configurations with your team (commit `.trikhub/` to git)
254
+ - Isolated environments
255
+
256
+ ```
257
+ ./your-project/
258
+ └── .trikhub/
259
+ ├── config.json # Project-specific configuration
260
+ ├── triks.lock # Project lockfile
261
+ └── triks/ # Project-specific triks
262
+ └── @scope/trik-name/
263
+ ```
264
+
265
+ ### Switching Between Scopes
266
+
267
+ The CLI automatically detects which scope to use based on the presence of `.trikhub/config.json` in the current directory:
268
+
269
+ ```bash
270
+ # In a project with local config
271
+ $ trik list
272
+ Installed triks (2) (local: /path/to/project/.trikhub):
273
+ ● @acme/article-search v1.0.0
274
+
275
+ # In a directory without local config (uses global)
276
+ $ cd ~
277
+ $ trik list
278
+ Installed triks (5) (global):
279
+ ● @acme/other-trik v2.0.0
280
+ ```
281
+
282
+ ### Initializing a Local Config
283
+
284
+ If you have a global config but want to set up a local one for a project:
285
+
286
+ ```bash
287
+ $ trik install @scope/some-trik
288
+ # When prompted "Use global configuration?", select "No"
289
+ # This will initialize a local .trikhub/ directory
290
+ ```
291
+
292
+ ## File Locations
293
+
294
+ ### Global (Default)
295
+
296
+ | Path | Description |
297
+ |------|-------------|
298
+ | `~/.trikhub/config.json` | CLI configuration |
299
+ | `~/.trikhub/triks.lock` | Lockfile tracking installed versions |
300
+ | `~/.trikhub/triks/` | Installed triks directory |
301
+
302
+ ### Local (Project-Level)
303
+
304
+ | Path | Description |
305
+ |------|-------------|
306
+ | `./.trikhub/config.json` | Project-specific configuration |
307
+ | `./.trikhub/triks.lock` | Project lockfile |
308
+ | `./.trikhub/triks/` | Project-specific triks |
309
+
310
+ ## Validation
311
+
312
+ Every installed trik is validated to ensure security:
313
+
314
+ - **Manifest structure** - Required fields, valid schemas
315
+ - **Privilege separation** - No unconstrained strings in `agentDataSchema`
316
+ - **Entry point** - Compiled code exists at specified path
317
+ - **Response mode compliance** - Template mode has templates, passthrough has userContentSchema
318
+
319
+ Triks that fail validation are rejected to prevent prompt injection vulnerabilities.
320
+
321
+ ## Configuration
322
+
323
+ ### Registry URL
324
+
325
+ By default, the CLI connects to `https://api.trikhub.com`. For development, you can override this:
326
+
327
+ ```bash
328
+ # Environment variable (highest priority)
329
+ export TRIKHUB_REGISTRY=http://localhost:3000
330
+
331
+ # Or edit your config.json (local or global)
332
+ {
333
+ "registry": "http://localhost:3000"
334
+ }
335
+ ```
336
+
337
+ ### Config File
338
+
339
+ The `config.json` file (either local `.trikhub/config.json` or global `~/.trikhub/config.json`) stores:
340
+
341
+ ```json
342
+ {
343
+ "registry": "https://api.trikhub.com",
344
+ "triksDirectory": ".trikhub/triks",
345
+ "analytics": true,
346
+ "authToken": "...",
347
+ "authExpiresAt": "2026-03-09T11:24:12.401Z",
348
+ "publisherUsername": "your-github-username"
349
+ }
350
+ ```
351
+
352
+ | Field | Description |
353
+ | ----- | ----------- |
354
+ | `registry` | TrikHub registry URL |
355
+ | `triksDirectory` | Where triks are installed (relative to config location for local) |
356
+ | `analytics` | Whether to send anonymous download analytics |
357
+ | `authToken` | Authentication token (set by `trik login`) |
358
+ | `authExpiresAt` | Token expiration timestamp |
359
+ | `publisherUsername` | Authenticated GitHub username |
360
+
361
+ ## Development
362
+
363
+ ```bash
364
+ # Clone the repo
365
+ git clone https://github.com/trikhub/cli
366
+ cd cli
367
+
368
+ # Install dependencies
369
+ pnpm install
370
+
371
+ # Build
372
+ pnpm build
373
+
374
+ # Run locally
375
+ node dist/cli.js --help
376
+
377
+ # With local registry
378
+ TRIKHUB_REGISTRY=http://localhost:3000 node dist/cli.js search article
379
+ ```
380
+
381
+ ## Related Projects
382
+
383
+ - **[@trikhub/registry](https://github.com/trikhub/registry)** - The TrikHub registry service
384
+ - **[SAAAS SDK](https://github.com/trikhub/saaas-sdk)** - SDK for building AI skills
385
+ - **[trikhub.com](https://trikhub.com)** - Web interface for browsing triks
386
+
387
+ ## License
388
+
389
+ MIT
package/dist/cli.d.ts ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TrikHub CLI
4
+ *
5
+ * Command-line interface for managing AI triks.
6
+ */
7
+ export {};
8
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;GAIG"}
package/dist/cli.js ADDED
@@ -0,0 +1,105 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * TrikHub CLI
4
+ *
5
+ * Command-line interface for managing AI triks.
6
+ */
7
+ import { Command } from 'commander';
8
+ import { installCommand } from './commands/install.js';
9
+ import { listCommand } from './commands/list.js';
10
+ import { searchCommand } from './commands/search.js';
11
+ import { infoCommand } from './commands/info.js';
12
+ import { uninstallCommand } from './commands/uninstall.js';
13
+ import { loginCommand, logoutCommand, whoamiCommand } from './commands/login.js';
14
+ import { publishCommand } from './commands/publish.js';
15
+ import { upgradeCommand, upgradeAllCommand } from './commands/upgrade.js';
16
+ import { syncCommand } from './commands/sync.js';
17
+ const program = new Command();
18
+ program
19
+ .name('trik')
20
+ .description('TrikHub CLI - Teaching AI new triks')
21
+ .version('0.1.0');
22
+ // Install command
23
+ program
24
+ .command('install <trik>')
25
+ .alias('i')
26
+ .description('Install a trik (e.g., trik install @acme/article-search)')
27
+ .option('-v, --version <version>', 'Install a specific version')
28
+ .action(installCommand);
29
+ // Uninstall command
30
+ program
31
+ .command('uninstall <trik>')
32
+ .alias('rm')
33
+ .alias('remove')
34
+ .description('Uninstall a trik')
35
+ .action(uninstallCommand);
36
+ // List command
37
+ program
38
+ .command('list')
39
+ .alias('ls')
40
+ .description('List installed triks')
41
+ .option('-j, --json', 'Output as JSON')
42
+ .action(listCommand);
43
+ // Search command
44
+ program
45
+ .command('search <query>')
46
+ .alias('s')
47
+ .description('Search for triks in the registry')
48
+ .option('-j, --json', 'Output as JSON')
49
+ .option('-l, --limit <number>', 'Limit results', '10')
50
+ .action(searchCommand);
51
+ // Info command
52
+ program
53
+ .command('info <trik>')
54
+ .description('Show detailed information about a trik')
55
+ .option('-j, --json', 'Output as JSON')
56
+ .action(infoCommand);
57
+ // Login command
58
+ program
59
+ .command('login')
60
+ .description('Authenticate with GitHub')
61
+ .action(loginCommand);
62
+ // Logout command
63
+ program
64
+ .command('logout')
65
+ .description('Remove saved authentication')
66
+ .action(logoutCommand);
67
+ // Whoami command
68
+ program
69
+ .command('whoami')
70
+ .description('Show current authenticated user')
71
+ .action(whoamiCommand);
72
+ // Publish command
73
+ program
74
+ .command('publish')
75
+ .description('Publish a trik to the registry')
76
+ .option('-d, --directory <path>', 'Trik directory to publish', '.')
77
+ .option('-t, --tag <version>', 'Version tag (default: from manifest)')
78
+ .option('--skip-release', 'Skip creating GitHub release (for manual upload)')
79
+ .action(publishCommand);
80
+ // Upgrade command
81
+ program
82
+ .command('upgrade [trik]')
83
+ .alias('up')
84
+ .description('Upgrade an installed trik (or all triks if none specified)')
85
+ .option('-f, --force', 'Force reinstall even if up to date')
86
+ .action(async (trik, options) => {
87
+ if (trik) {
88
+ await upgradeCommand(trik, options);
89
+ }
90
+ else {
91
+ await upgradeAllCommand(options);
92
+ }
93
+ });
94
+ // Sync command (npm-based trik discovery)
95
+ program
96
+ .command('sync')
97
+ .description('Discover triks in node_modules and add to config')
98
+ .option('-n, --dry-run', 'Show what would be synced without modifying config')
99
+ .option('-j, --json', 'Output as JSON')
100
+ .action(syncCommand);
101
+ // TODO: Add more commands
102
+ // program.command('init').description('Initialize a new trik project');
103
+ // program.command('outdated').description('Check for outdated triks');
104
+ program.parse();
105
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * trik info command
3
+ *
4
+ * Shows detailed information about a trik.
5
+ */
6
+ interface InfoOptions {
7
+ json?: boolean;
8
+ }
9
+ export declare function infoCommand(trikInput: string, options: InfoOptions): Promise<void>;
10
+ export {};
11
+ //# sourceMappingURL=info.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,UAAU,WAAW;IACnB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,WAAW,GACnB,OAAO,CAAC,IAAI,CAAC,CAgGf"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * trik info command
3
+ *
4
+ * Shows detailed information about a trik.
5
+ */
6
+ import chalk from 'chalk';
7
+ import ora from 'ora';
8
+ import { parseTrikName } from '../types.js';
9
+ import { registry } from '../lib/registry.js';
10
+ import { isTrikInstalled, getInstalledTrik, getTrikPath } from '../lib/storage.js';
11
+ export async function infoCommand(trikInput, options) {
12
+ const spinner = ora('Fetching trik info...').start();
13
+ try {
14
+ const { fullName } = parseTrikName(trikInput);
15
+ const trik = await registry.getTrik(fullName);
16
+ spinner.stop();
17
+ if (!trik) {
18
+ console.log(chalk.red(`\nTrik ${fullName} not found in registry\n`));
19
+ process.exit(1);
20
+ }
21
+ if (options.json) {
22
+ console.log(JSON.stringify(trik, null, 2));
23
+ return;
24
+ }
25
+ const installed = getInstalledTrik(fullName);
26
+ const isInstalled = isTrikInstalled(fullName);
27
+ // Header
28
+ console.log();
29
+ console.log(chalk.bold.cyan(trik.fullName) +
30
+ (trik.verified ? chalk.blue(' ✓ Verified') : ''));
31
+ console.log(chalk.dim(trik.description));
32
+ console.log();
33
+ // Install status
34
+ if (isInstalled && installed) {
35
+ console.log(chalk.green(`✓ Installed`) +
36
+ chalk.dim(` (v${installed.version})`));
37
+ console.log(chalk.dim(` Path: ${getTrikPath(fullName)}`));
38
+ console.log();
39
+ }
40
+ // Stats
41
+ console.log(chalk.bold('Stats'));
42
+ console.log(` Latest version: ${chalk.cyan(trik.latestVersion)}`);
43
+ console.log(` Downloads: ${formatNumber(trik.downloads)}`);
44
+ console.log(` Stars: ${trik.stars}`);
45
+ console.log();
46
+ // Categories & Keywords
47
+ console.log(chalk.bold('Categories'));
48
+ console.log(` ${trik.categories.join(', ')}`);
49
+ console.log();
50
+ if (trik.keywords.length > 0) {
51
+ console.log(chalk.bold('Keywords'));
52
+ console.log(` ${trik.keywords.join(', ')}`);
53
+ console.log();
54
+ }
55
+ // Links
56
+ console.log(chalk.bold('Links'));
57
+ console.log(` GitHub: https://github.com/${trik.githubRepo}`);
58
+ if (trik.discussionsUrl) {
59
+ console.log(` Discussions: ${trik.discussionsUrl}`);
60
+ }
61
+ console.log();
62
+ // Versions
63
+ console.log(chalk.bold('Versions'));
64
+ const versionsToShow = trik.versions.slice(0, 5);
65
+ for (const version of versionsToShow) {
66
+ const date = new Date(version.publishedAt).toLocaleDateString();
67
+ const current = version.version === trik.latestVersion ? chalk.green(' (latest)') : '';
68
+ console.log(` ${chalk.cyan(version.version)}${current} - ${chalk.dim(date)} - ${formatNumber(version.downloads)} downloads`);
69
+ }
70
+ if (trik.versions.length > 5) {
71
+ console.log(chalk.dim(` ... and ${trik.versions.length - 5} more versions`));
72
+ }
73
+ console.log();
74
+ // Install command
75
+ if (!isInstalled) {
76
+ console.log(chalk.bold('Install'));
77
+ console.log(` ${chalk.cyan(`trik install ${trik.fullName}`)}`);
78
+ console.log();
79
+ }
80
+ }
81
+ catch (error) {
82
+ spinner.fail('Failed to fetch trik info');
83
+ if (error instanceof Error) {
84
+ console.error(chalk.red(error.message));
85
+ }
86
+ process.exit(1);
87
+ }
88
+ }
89
+ /**
90
+ * Format a number with K/M suffixes
91
+ */
92
+ function formatNumber(num) {
93
+ if (num >= 1_000_000) {
94
+ return `${(num / 1_000_000).toFixed(1)}M`;
95
+ }
96
+ if (num >= 1_000) {
97
+ return `${(num / 1_000).toFixed(1)}K`;
98
+ }
99
+ return num.toString();
100
+ }
101
+ //# sourceMappingURL=info.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"info.js","sourceRoot":"","sources":["../../src/commands/info.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ /**
2
+ * trik install command
3
+ *
4
+ * Installs a trik as an npm dependency and registers it in .trikhub/config.json.
5
+ *
6
+ * Workflow:
7
+ * 1. Try npm registry first
8
+ * 2. If not found, fall back to TrikHub registry (GitHub releases)
9
+ * 3. Download and install
10
+ * 4. Update .trikhub/config.json with the trik
11
+ */
12
+ interface InstallOptions {
13
+ version?: string;
14
+ }
15
+ export declare function installCommand(trikInput: string, options: InstallOptions): Promise<void>;
16
+ export {};
17
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAgBH,UAAU,cAAc;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAyUD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,IAAI,CAAC,CA0Ff"}