@toolr/seedr 0.1.72 → 0.1.74
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/dist/{chunk-TWSBWCGS.js → chunk-GQOKE2XQ.js} +124 -5
- package/dist/cli.js +95 -189
- package/dist/index.js +1 -1
- package/package.json +1 -1
|
@@ -423,10 +423,113 @@ function parseAgentsArg(agents, allAgents) {
|
|
|
423
423
|
return agents.split(",").map((a) => parseAgentArg(a.trim())).filter((a) => a !== null);
|
|
424
424
|
}
|
|
425
425
|
|
|
426
|
+
// src/utils/ui.ts
|
|
427
|
+
import * as p from "@clack/prompts";
|
|
428
|
+
import chalk from "chalk";
|
|
429
|
+
var brand = chalk.hex("#22c55e");
|
|
430
|
+
var bgBrand = chalk.bgHex("#22c55e").black;
|
|
431
|
+
var LOGO = `
|
|
432
|
+
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
433
|
+
\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
434
|
+
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D
|
|
435
|
+
\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
436
|
+
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
|
|
437
|
+
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D`;
|
|
438
|
+
var URLS = {
|
|
439
|
+
toolr: "https://toolr.dev",
|
|
440
|
+
seedr: "https://seedr.toolr.dev"
|
|
441
|
+
};
|
|
442
|
+
function printLogo() {
|
|
443
|
+
console.log(brand(LOGO));
|
|
444
|
+
console.log(brand(" \u{1F331} Seed your Coding Agents with capabilities"));
|
|
445
|
+
console.log(chalk.gray(` ${URLS.seedr}`));
|
|
446
|
+
console.log();
|
|
447
|
+
}
|
|
448
|
+
async function selectSkill(items) {
|
|
449
|
+
const result = await p.select({
|
|
450
|
+
message: "Select a skill to install",
|
|
451
|
+
options: items.map((item) => ({
|
|
452
|
+
label: item.name,
|
|
453
|
+
value: item,
|
|
454
|
+
hint: item.description
|
|
455
|
+
}))
|
|
456
|
+
});
|
|
457
|
+
return result;
|
|
458
|
+
}
|
|
459
|
+
async function selectAgents(compatible) {
|
|
460
|
+
const allOption = await p.select({
|
|
461
|
+
message: "Which coding agents do you want to install for?",
|
|
462
|
+
options: [
|
|
463
|
+
{ label: `All (${compatible.length} agents)`, value: "all" },
|
|
464
|
+
{ label: "Select specific agents...", value: "select" }
|
|
465
|
+
]
|
|
466
|
+
});
|
|
467
|
+
if (p.isCancel(allOption)) return allOption;
|
|
468
|
+
if (allOption === "all") return compatible;
|
|
469
|
+
const result = await p.multiselect({
|
|
470
|
+
message: "Select agents",
|
|
471
|
+
options: compatible.map((agent) => ({
|
|
472
|
+
label: CODING_AGENTS[agent].name,
|
|
473
|
+
value: agent,
|
|
474
|
+
hint: CODING_AGENTS[agent].projectRoot
|
|
475
|
+
})),
|
|
476
|
+
initialValues: ["claude"],
|
|
477
|
+
required: true
|
|
478
|
+
});
|
|
479
|
+
return result;
|
|
480
|
+
}
|
|
481
|
+
async function selectScope(includeLocal = false) {
|
|
482
|
+
const options = [
|
|
483
|
+
{ label: "Project", value: "project", hint: includeLocal ? "current directory, settings.json" : "current directory" },
|
|
484
|
+
{ label: "User", value: "user", hint: "home directory" },
|
|
485
|
+
...includeLocal ? [{ label: "Local", value: "local", hint: "current directory, settings.local.json" }] : []
|
|
486
|
+
];
|
|
487
|
+
const result = await p.select({ message: "Installation scope", options });
|
|
488
|
+
return result;
|
|
489
|
+
}
|
|
490
|
+
async function selectMethod(symlinkPath) {
|
|
491
|
+
const result = await p.select({
|
|
492
|
+
message: "Installation method",
|
|
493
|
+
options: [
|
|
494
|
+
{ label: "Symlink", value: "symlink", hint: `shared at ${symlinkPath}` },
|
|
495
|
+
{ label: "Copy", value: "copy", hint: "standalone copy per agent" }
|
|
496
|
+
]
|
|
497
|
+
});
|
|
498
|
+
return result;
|
|
499
|
+
}
|
|
500
|
+
async function confirm2(message) {
|
|
501
|
+
return p.confirm({ message });
|
|
502
|
+
}
|
|
503
|
+
function cancelled() {
|
|
504
|
+
p.cancel("Operation cancelled");
|
|
505
|
+
process.exit(0);
|
|
506
|
+
}
|
|
507
|
+
function intro2(message) {
|
|
508
|
+
p.intro(bgBrand(` ${message} `));
|
|
509
|
+
}
|
|
510
|
+
function outro2(message) {
|
|
511
|
+
p.outro(brand(message));
|
|
512
|
+
}
|
|
513
|
+
function step(message) {
|
|
514
|
+
p.log.step(message);
|
|
515
|
+
}
|
|
516
|
+
function info(message) {
|
|
517
|
+
p.log.info(message);
|
|
518
|
+
}
|
|
519
|
+
function success(message) {
|
|
520
|
+
p.log.success(message);
|
|
521
|
+
}
|
|
522
|
+
function warn(message) {
|
|
523
|
+
p.log.warn(message);
|
|
524
|
+
}
|
|
525
|
+
function error(message) {
|
|
526
|
+
p.log.error(message);
|
|
527
|
+
}
|
|
528
|
+
|
|
426
529
|
// src/handlers/skill.ts
|
|
427
530
|
import { join as join4, relative as relative2, dirname as dirname3 } from "path";
|
|
428
531
|
import { readdir as readdir2, symlink as symlink2, rm as rm2 } from "fs/promises";
|
|
429
|
-
import
|
|
532
|
+
import chalk2 from "chalk";
|
|
430
533
|
import ora from "ora";
|
|
431
534
|
async function installToCentralLocation(item, sourcePath, cwd) {
|
|
432
535
|
const centralPath = getAgentsPath("skill", item.slug, cwd);
|
|
@@ -463,13 +566,13 @@ async function installSkillForAgent(item, agent, scope, method, cwd, centralPath
|
|
|
463
566
|
await fetchItemToDestination(item, destPath);
|
|
464
567
|
}
|
|
465
568
|
spinner.succeed(
|
|
466
|
-
|
|
569
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
467
570
|
);
|
|
468
571
|
return { agent, success: true, path: destPath };
|
|
469
|
-
} catch (
|
|
470
|
-
const errorMsg =
|
|
572
|
+
} catch (error2) {
|
|
573
|
+
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
471
574
|
spinner.fail(
|
|
472
|
-
|
|
575
|
+
chalk2.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
473
576
|
);
|
|
474
577
|
return { agent, success: false, path: "", error: errorMsg };
|
|
475
578
|
}
|
|
@@ -556,6 +659,22 @@ export {
|
|
|
556
659
|
detectProjectAgents,
|
|
557
660
|
isAgentInstalled,
|
|
558
661
|
parseAgentsArg,
|
|
662
|
+
p,
|
|
663
|
+
brand,
|
|
664
|
+
printLogo,
|
|
665
|
+
selectSkill,
|
|
666
|
+
selectAgents,
|
|
667
|
+
selectScope,
|
|
668
|
+
selectMethod,
|
|
669
|
+
confirm2 as confirm,
|
|
670
|
+
cancelled,
|
|
671
|
+
intro2 as intro,
|
|
672
|
+
outro2 as outro,
|
|
673
|
+
step,
|
|
674
|
+
info,
|
|
675
|
+
success,
|
|
676
|
+
warn,
|
|
677
|
+
error,
|
|
559
678
|
installSkill,
|
|
560
679
|
uninstallSkill,
|
|
561
680
|
getInstalledSkills,
|
package/dist/cli.js
CHANGED
|
@@ -2,7 +2,11 @@
|
|
|
2
2
|
import {
|
|
3
3
|
ALL_AGENTS,
|
|
4
4
|
CODING_AGENTS,
|
|
5
|
+
brand,
|
|
6
|
+
cancelled,
|
|
7
|
+
confirm,
|
|
5
8
|
ensureDir,
|
|
9
|
+
error,
|
|
6
10
|
exists,
|
|
7
11
|
fetchItemToDestination,
|
|
8
12
|
getAgentPath,
|
|
@@ -14,123 +18,34 @@ import {
|
|
|
14
18
|
getItemSourcePath,
|
|
15
19
|
getMcpPath,
|
|
16
20
|
getSettingsPath,
|
|
21
|
+
info,
|
|
17
22
|
installDirectory,
|
|
18
23
|
installFile,
|
|
24
|
+
intro,
|
|
19
25
|
listItems,
|
|
26
|
+
outro,
|
|
27
|
+
p,
|
|
20
28
|
parseAgentsArg,
|
|
29
|
+
printLogo,
|
|
21
30
|
removeFile,
|
|
22
31
|
searchItems,
|
|
32
|
+
selectAgents,
|
|
33
|
+
selectMethod,
|
|
34
|
+
selectScope,
|
|
35
|
+
selectSkill,
|
|
23
36
|
skillHandler,
|
|
37
|
+
step,
|
|
38
|
+
success,
|
|
39
|
+
warn,
|
|
24
40
|
writeTextFile
|
|
25
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-GQOKE2XQ.js";
|
|
26
42
|
|
|
27
43
|
// src/cli.ts
|
|
28
44
|
import { Command as Command5 } from "commander";
|
|
29
|
-
import chalk12 from "chalk";
|
|
30
45
|
|
|
31
46
|
// src/commands/add.ts
|
|
32
47
|
import { Command } from "commander";
|
|
33
|
-
import
|
|
34
|
-
|
|
35
|
-
// src/utils/ui.ts
|
|
36
|
-
import * as p from "@clack/prompts";
|
|
37
|
-
import chalk from "chalk";
|
|
38
|
-
var LOGO = `
|
|
39
|
-
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557
|
|
40
|
-
\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
41
|
-
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D
|
|
42
|
-
\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557
|
|
43
|
-
\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551
|
|
44
|
-
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D`;
|
|
45
|
-
var URLS = {
|
|
46
|
-
toolr: "https://toolr.dev",
|
|
47
|
-
seedr: "https://seedr.toolr.dev"
|
|
48
|
-
};
|
|
49
|
-
function printLogo() {
|
|
50
|
-
console.log(chalk.cyan(LOGO));
|
|
51
|
-
console.log(chalk.gray(` ${URLS.seedr} \xB7 ${URLS.toolr}`));
|
|
52
|
-
console.log();
|
|
53
|
-
}
|
|
54
|
-
async function selectSkill(items) {
|
|
55
|
-
const result = await p.select({
|
|
56
|
-
message: "Select a skill to install",
|
|
57
|
-
options: items.map((item) => ({
|
|
58
|
-
label: item.name,
|
|
59
|
-
value: item,
|
|
60
|
-
hint: item.description
|
|
61
|
-
}))
|
|
62
|
-
});
|
|
63
|
-
return result;
|
|
64
|
-
}
|
|
65
|
-
async function selectAgents(compatible) {
|
|
66
|
-
const allOption = await p.select({
|
|
67
|
-
message: "Which coding agents do you want to install for?",
|
|
68
|
-
options: [
|
|
69
|
-
{ label: `All (${compatible.length} agents)`, value: "all" },
|
|
70
|
-
{ label: "Select specific agents...", value: "select" }
|
|
71
|
-
]
|
|
72
|
-
});
|
|
73
|
-
if (p.isCancel(allOption)) return allOption;
|
|
74
|
-
if (allOption === "all") return compatible;
|
|
75
|
-
const result = await p.multiselect({
|
|
76
|
-
message: "Select agents",
|
|
77
|
-
options: compatible.map((agent) => ({
|
|
78
|
-
label: CODING_AGENTS[agent].name,
|
|
79
|
-
value: agent,
|
|
80
|
-
hint: CODING_AGENTS[agent].projectRoot
|
|
81
|
-
})),
|
|
82
|
-
initialValues: ["claude"],
|
|
83
|
-
required: true
|
|
84
|
-
});
|
|
85
|
-
return result;
|
|
86
|
-
}
|
|
87
|
-
async function selectScope(includeLocal = false) {
|
|
88
|
-
const options = [
|
|
89
|
-
{ label: "Project", value: "project", hint: includeLocal ? "current directory, settings.json" : "current directory" },
|
|
90
|
-
{ label: "User", value: "user", hint: "home directory" },
|
|
91
|
-
...includeLocal ? [{ label: "Local", value: "local", hint: "current directory, settings.local.json" }] : []
|
|
92
|
-
];
|
|
93
|
-
const result = await p.select({ message: "Installation scope", options });
|
|
94
|
-
return result;
|
|
95
|
-
}
|
|
96
|
-
async function selectMethod(symlinkPath) {
|
|
97
|
-
const result = await p.select({
|
|
98
|
-
message: "Installation method",
|
|
99
|
-
options: [
|
|
100
|
-
{ label: "Symlink", value: "symlink", hint: `shared at ${symlinkPath}` },
|
|
101
|
-
{ label: "Copy", value: "copy", hint: "standalone copy per agent" }
|
|
102
|
-
]
|
|
103
|
-
});
|
|
104
|
-
return result;
|
|
105
|
-
}
|
|
106
|
-
async function confirm2(message) {
|
|
107
|
-
return p.confirm({ message });
|
|
108
|
-
}
|
|
109
|
-
function cancelled() {
|
|
110
|
-
p.cancel("Operation cancelled");
|
|
111
|
-
process.exit(0);
|
|
112
|
-
}
|
|
113
|
-
function intro2(message) {
|
|
114
|
-
p.intro(chalk.bgCyan.black(` ${message} `));
|
|
115
|
-
}
|
|
116
|
-
function outro2(message) {
|
|
117
|
-
p.outro(chalk.green(message));
|
|
118
|
-
}
|
|
119
|
-
function step(message) {
|
|
120
|
-
p.log.step(message);
|
|
121
|
-
}
|
|
122
|
-
function info(message) {
|
|
123
|
-
p.log.info(message);
|
|
124
|
-
}
|
|
125
|
-
function success(message) {
|
|
126
|
-
p.log.success(message);
|
|
127
|
-
}
|
|
128
|
-
function warn(message) {
|
|
129
|
-
p.log.warn(message);
|
|
130
|
-
}
|
|
131
|
-
function error(message) {
|
|
132
|
-
p.log.error(message);
|
|
133
|
-
}
|
|
48
|
+
import chalk7 from "chalk";
|
|
134
49
|
|
|
135
50
|
// src/handlers/registry.ts
|
|
136
51
|
var handlers = /* @__PURE__ */ new Map();
|
|
@@ -142,10 +57,10 @@ function getHandler(type) {
|
|
|
142
57
|
}
|
|
143
58
|
|
|
144
59
|
// src/utils/errors.ts
|
|
145
|
-
import
|
|
60
|
+
import chalk from "chalk";
|
|
146
61
|
function handleCommandError(error2) {
|
|
147
62
|
console.error(
|
|
148
|
-
|
|
63
|
+
chalk.red(`Error: ${error2 instanceof Error ? error2.message : "Unknown error"}`)
|
|
149
64
|
);
|
|
150
65
|
process.exit(1);
|
|
151
66
|
}
|
|
@@ -164,7 +79,7 @@ function trackInstalls(slug, type, results, scope) {
|
|
|
164
79
|
type,
|
|
165
80
|
agent: result.agent,
|
|
166
81
|
scope,
|
|
167
|
-
version: "0.1.
|
|
82
|
+
version: "0.1.74"
|
|
168
83
|
}),
|
|
169
84
|
signal: AbortSignal.timeout(4e3)
|
|
170
85
|
}).catch(() => {
|
|
@@ -190,7 +105,7 @@ function filterCompatibleAgents(type, agents) {
|
|
|
190
105
|
// src/handlers/agent.ts
|
|
191
106
|
import { join } from "path";
|
|
192
107
|
import { readdir } from "fs/promises";
|
|
193
|
-
import
|
|
108
|
+
import chalk2 from "chalk";
|
|
194
109
|
import ora from "ora";
|
|
195
110
|
async function installAgentForCodingAgent(item, agent, scope, method, cwd) {
|
|
196
111
|
const spinner = ora(
|
|
@@ -218,13 +133,13 @@ async function installAgentForCodingAgent(item, agent, scope, method, cwd) {
|
|
|
218
133
|
await writeTextFile(destPath, content);
|
|
219
134
|
}
|
|
220
135
|
spinner.succeed(
|
|
221
|
-
|
|
136
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
222
137
|
);
|
|
223
138
|
return { agent, success: true, path: destPath };
|
|
224
139
|
} catch (error2) {
|
|
225
140
|
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
226
141
|
spinner.fail(
|
|
227
|
-
|
|
142
|
+
chalk2.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
228
143
|
);
|
|
229
144
|
return { agent, success: false, path: "", error: errorMsg };
|
|
230
145
|
}
|
|
@@ -271,7 +186,7 @@ var agentHandler = {
|
|
|
271
186
|
import { join as join2, basename } from "path";
|
|
272
187
|
import { homedir } from "os";
|
|
273
188
|
import { mkdir, copyFile, chmod, rm } from "fs/promises";
|
|
274
|
-
import
|
|
189
|
+
import chalk3 from "chalk";
|
|
275
190
|
import ora2 from "ora";
|
|
276
191
|
|
|
277
192
|
// src/utils/json.ts
|
|
@@ -401,13 +316,13 @@ async function installHookForAgent(item, agent, scope, _method, cwd) {
|
|
|
401
316
|
}
|
|
402
317
|
await writeJson(settingsPath, settings);
|
|
403
318
|
spinner.succeed(
|
|
404
|
-
|
|
319
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
405
320
|
);
|
|
406
321
|
return { agent, success: true, path: destScriptPath };
|
|
407
322
|
} catch (error2) {
|
|
408
323
|
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
409
324
|
spinner.fail(
|
|
410
|
-
|
|
325
|
+
chalk3.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
411
326
|
);
|
|
412
327
|
return { agent, success: false, path: "", error: errorMsg };
|
|
413
328
|
}
|
|
@@ -500,7 +415,7 @@ var hookHandler = {
|
|
|
500
415
|
};
|
|
501
416
|
|
|
502
417
|
// src/handlers/mcp.ts
|
|
503
|
-
import
|
|
418
|
+
import chalk4 from "chalk";
|
|
504
419
|
import ora3 from "ora";
|
|
505
420
|
function parseMcpDefinition(content) {
|
|
506
421
|
try {
|
|
@@ -522,13 +437,13 @@ async function installMcpForAgent(item, agent, scope, _method, cwd) {
|
|
|
522
437
|
config.mcpServers[mcpDef.name] = mcpDef.config;
|
|
523
438
|
await writeJson(configPath, config);
|
|
524
439
|
spinner.succeed(
|
|
525
|
-
|
|
440
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
526
441
|
);
|
|
527
442
|
return { agent, success: true, path: configPath };
|
|
528
443
|
} catch (error2) {
|
|
529
444
|
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
530
445
|
spinner.fail(
|
|
531
|
-
|
|
446
|
+
chalk4.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
532
447
|
);
|
|
533
448
|
return { agent, success: false, path: "", error: errorMsg };
|
|
534
449
|
}
|
|
@@ -572,7 +487,7 @@ var mcpHandler = {
|
|
|
572
487
|
};
|
|
573
488
|
|
|
574
489
|
// src/handlers/settings.ts
|
|
575
|
-
import
|
|
490
|
+
import chalk5 from "chalk";
|
|
576
491
|
import ora4 from "ora";
|
|
577
492
|
function parseSettings(content) {
|
|
578
493
|
try {
|
|
@@ -596,13 +511,13 @@ async function installSettingsForAgent(item, agent, scope, _method, cwd) {
|
|
|
596
511
|
const merged = deepMerge(existingSettings, newSettings);
|
|
597
512
|
await writeJson(settingsPath, merged);
|
|
598
513
|
spinner.succeed(
|
|
599
|
-
|
|
514
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
600
515
|
);
|
|
601
516
|
return { agent, success: true, path: settingsPath };
|
|
602
517
|
} catch (error2) {
|
|
603
518
|
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
604
519
|
spinner.fail(
|
|
605
|
-
|
|
520
|
+
chalk5.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
606
521
|
);
|
|
607
522
|
return { agent, success: false, path: "", error: errorMsg };
|
|
608
523
|
}
|
|
@@ -687,7 +602,7 @@ import { join as join3 } from "path";
|
|
|
687
602
|
import { mkdir as mkdir2, rm as rm2 } from "fs/promises";
|
|
688
603
|
import { execFile } from "child_process";
|
|
689
604
|
import { promisify } from "util";
|
|
690
|
-
import
|
|
605
|
+
import chalk6 from "chalk";
|
|
691
606
|
import ora5 from "ora";
|
|
692
607
|
var home = homedir2();
|
|
693
608
|
var PLUGINS_CACHE_DIR = join3(home, ".claude/plugins/cache");
|
|
@@ -779,13 +694,13 @@ async function installPluginForAgent(item, agent, scope, method, cwd) {
|
|
|
779
694
|
settings.enabledPlugins[pluginId] = true;
|
|
780
695
|
await writeJson(settingsPath, settings);
|
|
781
696
|
spinner.succeed(
|
|
782
|
-
|
|
697
|
+
brand(`Installed ${item.name} for ${CODING_AGENTS[agent].name}`)
|
|
783
698
|
);
|
|
784
699
|
return { agent, success: true, path: cachePath };
|
|
785
700
|
} catch (error2) {
|
|
786
701
|
const errorMsg = error2 instanceof Error ? error2.message : "Unknown error";
|
|
787
702
|
spinner.fail(
|
|
788
|
-
|
|
703
|
+
chalk6.red(`Failed to install for ${CODING_AGENTS[agent].name}: ${errorMsg}`)
|
|
789
704
|
);
|
|
790
705
|
return { agent, success: false, path: "", error: errorMsg };
|
|
791
706
|
}
|
|
@@ -918,29 +833,29 @@ function resolveAgents(agentsArg, item) {
|
|
|
918
833
|
}
|
|
919
834
|
function printDryRunSummary(item, agents, scope, method, cwd) {
|
|
920
835
|
info("Dry run - no files will be written\n");
|
|
921
|
-
console.log(
|
|
922
|
-
console.log(` ${item.type}: ${
|
|
923
|
-
console.log(` Scope: ${
|
|
924
|
-
console.log(` Method: ${
|
|
836
|
+
console.log(brand(" Would install:"));
|
|
837
|
+
console.log(` ${item.type}: ${chalk7.white(item.name)}`);
|
|
838
|
+
console.log(` Scope: ${chalk7.white(scope)}`);
|
|
839
|
+
console.log(` Method: ${chalk7.white(method)}`);
|
|
925
840
|
console.log();
|
|
926
841
|
if (method === "symlink" && item.type === "skill") {
|
|
927
842
|
const centralPath = getAgentsPath("skill", item.slug, cwd);
|
|
928
|
-
console.log(
|
|
929
|
-
console.log(` ${
|
|
843
|
+
console.log(brand(" Central storage:"));
|
|
844
|
+
console.log(` ${chalk7.gray("\u2192")} ${chalk7.gray(centralPath)}`);
|
|
930
845
|
console.log();
|
|
931
|
-
console.log(
|
|
846
|
+
console.log(brand(" Symlinks from agent folders:"));
|
|
932
847
|
} else {
|
|
933
|
-
console.log(
|
|
848
|
+
console.log(brand(" Target locations:"));
|
|
934
849
|
}
|
|
935
850
|
for (const agent of agents) {
|
|
936
851
|
const config = CODING_AGENTS[agent];
|
|
937
852
|
const contentPath = getContentPath(agent, item.type, scope, cwd);
|
|
938
853
|
if (!contentPath) {
|
|
939
|
-
console.log(` ${
|
|
854
|
+
console.log(` ${chalk7.gray("\u2192")} ${chalk7.white(config.name)}: ${chalk7.red("not supported")}`);
|
|
940
855
|
continue;
|
|
941
856
|
}
|
|
942
857
|
const targetPath = `${contentPath}/${item.slug}`;
|
|
943
|
-
console.log(` ${
|
|
858
|
+
console.log(` ${chalk7.gray("\u2192")} ${chalk7.white(config.name)}: ${chalk7.gray(targetPath)}`);
|
|
944
859
|
}
|
|
945
860
|
console.log();
|
|
946
861
|
}
|
|
@@ -950,13 +865,13 @@ function printInstallSummary(results) {
|
|
|
950
865
|
if (successful.length > 0) {
|
|
951
866
|
success(`Installed for ${successful.length} agent(s)`);
|
|
952
867
|
for (const r of successful) {
|
|
953
|
-
console.log(
|
|
868
|
+
console.log(chalk7.gray(` \u2192 ${r.path}`));
|
|
954
869
|
}
|
|
955
870
|
}
|
|
956
871
|
if (failed.length > 0) {
|
|
957
872
|
error(`Failed for ${failed.length} agent(s)`);
|
|
958
873
|
for (const r of failed) {
|
|
959
|
-
console.log(
|
|
874
|
+
console.log(chalk7.red(` \xD7 ${r.agent}: ${r.error}`));
|
|
960
875
|
}
|
|
961
876
|
process.exit(1);
|
|
962
877
|
}
|
|
@@ -967,12 +882,12 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
967
882
|
).option("-s, --scope <scope>", "Installation scope: project, user, or local").option("-m, --method <method>", "Installation method: symlink or copy").option("-y, --yes", "Skip confirmation prompts").option("-f, --force", "Overwrite existing files").option("-n, --dry-run", "Show what would be installed without making changes").action(async (name, options) => {
|
|
968
883
|
try {
|
|
969
884
|
printLogo();
|
|
970
|
-
|
|
885
|
+
intro("Seedr");
|
|
971
886
|
const itemName = name;
|
|
972
887
|
const contentType = options.type;
|
|
973
888
|
const item = await resolveItem(itemName, contentType);
|
|
974
889
|
if (!item) process.exit(1);
|
|
975
|
-
step(`Selected: ${
|
|
890
|
+
step(`Selected: ${brand(item.name)} ${chalk7.gray(`(${item.type})`)} ${chalk7.gray(`- ${item.description}`)}`);
|
|
976
891
|
const handler = getHandler(item.type);
|
|
977
892
|
if (!handler) {
|
|
978
893
|
error(`No handler found for type "${item.type}"`);
|
|
@@ -996,7 +911,7 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
996
911
|
error("No valid agents selected");
|
|
997
912
|
process.exit(1);
|
|
998
913
|
}
|
|
999
|
-
step(`Agents: ${
|
|
914
|
+
step(`Agents: ${brand(agents.join(", "))}`);
|
|
1000
915
|
let scope;
|
|
1001
916
|
if (options.scope) {
|
|
1002
917
|
scope = options.scope;
|
|
@@ -1009,7 +924,7 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
1009
924
|
}
|
|
1010
925
|
scope = selected;
|
|
1011
926
|
}
|
|
1012
|
-
step(`Scope: ${
|
|
927
|
+
step(`Scope: ${brand(scope)}`);
|
|
1013
928
|
let method;
|
|
1014
929
|
if (options.method) {
|
|
1015
930
|
method = options.method;
|
|
@@ -1024,16 +939,16 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
1024
939
|
}
|
|
1025
940
|
method = selected;
|
|
1026
941
|
}
|
|
1027
|
-
step(`Method: ${
|
|
942
|
+
step(`Method: ${brand(method)}`);
|
|
1028
943
|
if (options.dryRun) {
|
|
1029
944
|
console.log();
|
|
1030
945
|
printDryRunSummary(item, agents, scope, method, process.cwd());
|
|
1031
|
-
|
|
946
|
+
outro("Dry run complete");
|
|
1032
947
|
return;
|
|
1033
948
|
}
|
|
1034
949
|
if (!options.yes) {
|
|
1035
950
|
console.log();
|
|
1036
|
-
const confirmed = await
|
|
951
|
+
const confirmed = await confirm("Proceed with installation?");
|
|
1037
952
|
if (p.isCancel(confirmed) || !confirmed) {
|
|
1038
953
|
cancelled();
|
|
1039
954
|
return;
|
|
@@ -1043,7 +958,7 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
1043
958
|
const results = await handler.install(item, agents, scope, method, process.cwd());
|
|
1044
959
|
trackInstalls(item.slug, item.type, results, scope);
|
|
1045
960
|
printInstallSummary(results);
|
|
1046
|
-
|
|
961
|
+
outro("Installation complete");
|
|
1047
962
|
} catch (error2) {
|
|
1048
963
|
handleCommandError(error2);
|
|
1049
964
|
}
|
|
@@ -1051,17 +966,17 @@ var addCommand = new Command("add").description("Install a skill, agent, hook, o
|
|
|
1051
966
|
|
|
1052
967
|
// src/commands/list.ts
|
|
1053
968
|
import { Command as Command2 } from "commander";
|
|
1054
|
-
import
|
|
969
|
+
import chalk8 from "chalk";
|
|
1055
970
|
var SEPARATOR_WIDTH = 40;
|
|
1056
971
|
var SLUG_COLUMN_WIDTH = 24;
|
|
1057
972
|
var TYPE_COLORS = {
|
|
1058
|
-
skill:
|
|
1059
|
-
hook:
|
|
1060
|
-
agent:
|
|
1061
|
-
plugin:
|
|
1062
|
-
command:
|
|
1063
|
-
settings:
|
|
1064
|
-
mcp:
|
|
973
|
+
skill: chalk8.magenta,
|
|
974
|
+
hook: chalk8.hex("#a855f7"),
|
|
975
|
+
agent: chalk8.blue,
|
|
976
|
+
plugin: chalk8.hex("#6366f1"),
|
|
977
|
+
command: chalk8.hex("#f59e0b"),
|
|
978
|
+
settings: chalk8.hex("#f97316"),
|
|
979
|
+
mcp: chalk8.hex("#2dd4bf")
|
|
1065
980
|
};
|
|
1066
981
|
var listCommand = new Command2("list").alias("ls").description("List available or installed skills").option("-t, --type <type>", "Filter by type (skill, hook, agent, plugin)").option("-i, --installed", "Show only installed items").option("--scope <scope>", "Scope for installed check (project, user)", "project").action(async (options) => {
|
|
1067
982
|
try {
|
|
@@ -1077,31 +992,31 @@ var listCommand = new Command2("list").alias("ls").description("List available o
|
|
|
1077
992
|
async function listAvailable(type) {
|
|
1078
993
|
const items = await listItems(type);
|
|
1079
994
|
if (items.length === 0) {
|
|
1080
|
-
console.log(
|
|
995
|
+
console.log(chalk8.yellow("No items found in registry"));
|
|
1081
996
|
return;
|
|
1082
997
|
}
|
|
1083
998
|
const grouped = groupByType(items);
|
|
1084
999
|
for (const [itemType, typeItems] of Object.entries(grouped)) {
|
|
1085
|
-
const colorFn = TYPE_COLORS[itemType] ??
|
|
1000
|
+
const colorFn = TYPE_COLORS[itemType] ?? chalk8.white;
|
|
1086
1001
|
console.log(colorFn(`
|
|
1087
1002
|
${itemType.toUpperCase()}S`));
|
|
1088
|
-
console.log(
|
|
1003
|
+
console.log(chalk8.gray("\u2500".repeat(SEPARATOR_WIDTH)));
|
|
1089
1004
|
for (const item of typeItems) {
|
|
1090
1005
|
const compatIcons = item.compatibility.map((a) => CODING_AGENTS[a].shortName).join(" ");
|
|
1091
|
-
const featured = item.featured ?
|
|
1006
|
+
const featured = item.featured ? chalk8.yellow("\u2605 ") : " ";
|
|
1092
1007
|
console.log(
|
|
1093
|
-
`${featured}${
|
|
1008
|
+
`${featured}${chalk8.white(item.slug.padEnd(SLUG_COLUMN_WIDTH))} ${chalk8.gray(compatIcons)}`
|
|
1094
1009
|
);
|
|
1095
|
-
console.log(` ${
|
|
1010
|
+
console.log(` ${chalk8.gray(item.description)}`);
|
|
1096
1011
|
}
|
|
1097
1012
|
}
|
|
1098
1013
|
console.log("");
|
|
1099
1014
|
console.log(
|
|
1100
|
-
|
|
1015
|
+
chalk8.gray(`Total: ${items.length} items. Use 'npx @toolr/seedr add <name>' to install.`)
|
|
1101
1016
|
);
|
|
1102
1017
|
}
|
|
1103
1018
|
async function listInstalled(scope) {
|
|
1104
|
-
console.log(
|
|
1019
|
+
console.log(brand(`
|
|
1105
1020
|
Installed skills (${scope} scope):
|
|
1106
1021
|
`));
|
|
1107
1022
|
let total = 0;
|
|
@@ -1111,18 +1026,18 @@ Installed skills (${scope} scope):
|
|
|
1111
1026
|
scope
|
|
1112
1027
|
);
|
|
1113
1028
|
if (installed.length > 0) {
|
|
1114
|
-
console.log(
|
|
1029
|
+
console.log(chalk8.blue(CODING_AGENTS[agent].name));
|
|
1115
1030
|
for (const skill of installed) {
|
|
1116
|
-
console.log(` ${
|
|
1031
|
+
console.log(` ${chalk8.white(skill)}`);
|
|
1117
1032
|
total++;
|
|
1118
1033
|
}
|
|
1119
1034
|
console.log("");
|
|
1120
1035
|
}
|
|
1121
1036
|
}
|
|
1122
1037
|
if (total === 0) {
|
|
1123
|
-
console.log(
|
|
1038
|
+
console.log(chalk8.yellow("No skills installed"));
|
|
1124
1039
|
} else {
|
|
1125
|
-
console.log(
|
|
1040
|
+
console.log(chalk8.gray(`Total: ${total} installed`));
|
|
1126
1041
|
}
|
|
1127
1042
|
}
|
|
1128
1043
|
function groupByType(items) {
|
|
@@ -1140,7 +1055,7 @@ function groupByType(items) {
|
|
|
1140
1055
|
|
|
1141
1056
|
// src/commands/remove.ts
|
|
1142
1057
|
import { Command as Command3 } from "commander";
|
|
1143
|
-
import
|
|
1058
|
+
import chalk9 from "chalk";
|
|
1144
1059
|
import ora6 from "ora";
|
|
1145
1060
|
|
|
1146
1061
|
// src/utils/prompts.ts
|
|
@@ -1178,10 +1093,10 @@ async function removeFromAgents(slug, type, agents, scope) {
|
|
|
1178
1093
|
const spinner = ora6(`Removing from ${CODING_AGENTS[agent].name}...`).start();
|
|
1179
1094
|
const removed = await handler.uninstall(slug, agent, scope);
|
|
1180
1095
|
if (removed) {
|
|
1181
|
-
spinner.succeed(
|
|
1096
|
+
spinner.succeed(brand(`Removed from ${CODING_AGENTS[agent].name}`));
|
|
1182
1097
|
successCount++;
|
|
1183
1098
|
} else {
|
|
1184
|
-
spinner.info(
|
|
1099
|
+
spinner.info(chalk9.gray(`Not found in ${CODING_AGENTS[agent].name}`));
|
|
1185
1100
|
}
|
|
1186
1101
|
}
|
|
1187
1102
|
return successCount;
|
|
@@ -1199,24 +1114,24 @@ var removeCommand = new Command3("remove").alias("rm").description("Remove an in
|
|
|
1199
1114
|
const type = options.type;
|
|
1200
1115
|
if (!type) {
|
|
1201
1116
|
console.log(
|
|
1202
|
-
|
|
1117
|
+
chalk9.yellow(`Please specify the content type with --type (skill, plugin, agent, hook, mcp, settings)`)
|
|
1203
1118
|
);
|
|
1204
1119
|
process.exit(1);
|
|
1205
1120
|
}
|
|
1206
1121
|
const handler = getHandler(type);
|
|
1207
1122
|
if (!handler) {
|
|
1208
|
-
console.log(
|
|
1123
|
+
console.log(chalk9.red(`No handler found for type "${type}"`));
|
|
1209
1124
|
process.exit(1);
|
|
1210
1125
|
}
|
|
1211
1126
|
const agents = options.agents ? parseAgentsArg(options.agents, ALL_AGENTS) : await findInstalledAgents(name, type, scope);
|
|
1212
1127
|
if (agents.length === 0) {
|
|
1213
1128
|
console.log(
|
|
1214
|
-
|
|
1129
|
+
chalk9.yellow(`${type} "${name}" is not installed in ${scope} scope`)
|
|
1215
1130
|
);
|
|
1216
1131
|
process.exit(0);
|
|
1217
1132
|
}
|
|
1218
1133
|
if (!options.yes) {
|
|
1219
|
-
console.log(
|
|
1134
|
+
console.log(brand(`
|
|
1220
1135
|
Will remove ${type} "${name}" from:`));
|
|
1221
1136
|
for (const agent of agents) {
|
|
1222
1137
|
console.log(` - ${CODING_AGENTS[agent].name}`);
|
|
@@ -1224,7 +1139,7 @@ Will remove ${type} "${name}" from:`));
|
|
|
1224
1139
|
console.log("");
|
|
1225
1140
|
const confirmed = await promptConfirm("Proceed with removal?");
|
|
1226
1141
|
if (!confirmed) {
|
|
1227
|
-
console.log(
|
|
1142
|
+
console.log(chalk9.yellow("Removal cancelled"));
|
|
1228
1143
|
process.exit(0);
|
|
1229
1144
|
}
|
|
1230
1145
|
}
|
|
@@ -1232,10 +1147,10 @@ Will remove ${type} "${name}" from:`));
|
|
|
1232
1147
|
console.log("");
|
|
1233
1148
|
if (successCount > 0) {
|
|
1234
1149
|
console.log(
|
|
1235
|
-
|
|
1150
|
+
brand(`Successfully removed from ${successCount} agent(s)`)
|
|
1236
1151
|
);
|
|
1237
1152
|
} else {
|
|
1238
|
-
console.log(
|
|
1153
|
+
console.log(chalk9.yellow("Nothing to remove"));
|
|
1239
1154
|
}
|
|
1240
1155
|
} catch (error2) {
|
|
1241
1156
|
handleCommandError(error2);
|
|
@@ -1244,7 +1159,7 @@ Will remove ${type} "${name}" from:`));
|
|
|
1244
1159
|
|
|
1245
1160
|
// src/commands/init.ts
|
|
1246
1161
|
import { Command as Command4 } from "commander";
|
|
1247
|
-
import
|
|
1162
|
+
import chalk10 from "chalk";
|
|
1248
1163
|
import ora7 from "ora";
|
|
1249
1164
|
import { join as join4 } from "path";
|
|
1250
1165
|
var initCommand = new Command4("init").description("Initialize coding agent configuration directories").option(
|
|
@@ -1255,10 +1170,10 @@ var initCommand = new Command4("init").description("Initialize coding agent conf
|
|
|
1255
1170
|
try {
|
|
1256
1171
|
const agents = parseAgentsArg(options.agents, ALL_AGENTS);
|
|
1257
1172
|
if (agents.length === 0) {
|
|
1258
|
-
console.error(
|
|
1173
|
+
console.error(chalk10.red("No valid agents specified"));
|
|
1259
1174
|
process.exit(1);
|
|
1260
1175
|
}
|
|
1261
|
-
console.log(
|
|
1176
|
+
console.log(brand("\nWill initialize configuration for:"));
|
|
1262
1177
|
for (const agent of agents) {
|
|
1263
1178
|
const path = getAgentPath(agent, "project");
|
|
1264
1179
|
console.log(` - ${CODING_AGENTS[agent].name} \u2192 ${path}`);
|
|
@@ -1267,7 +1182,7 @@ var initCommand = new Command4("init").description("Initialize coding agent conf
|
|
|
1267
1182
|
if (!options.yes) {
|
|
1268
1183
|
const confirmed = await promptConfirm("Proceed?");
|
|
1269
1184
|
if (!confirmed) {
|
|
1270
|
-
console.log(
|
|
1185
|
+
console.log(chalk10.yellow("Cancelled"));
|
|
1271
1186
|
process.exit(0);
|
|
1272
1187
|
}
|
|
1273
1188
|
}
|
|
@@ -1276,7 +1191,7 @@ var initCommand = new Command4("init").description("Initialize coding agent conf
|
|
|
1276
1191
|
const path = getAgentPath(agent, "project");
|
|
1277
1192
|
if (await exists(path)) {
|
|
1278
1193
|
spinner.info(
|
|
1279
|
-
|
|
1194
|
+
chalk10.gray(`${CODING_AGENTS[agent].name} already initialized`)
|
|
1280
1195
|
);
|
|
1281
1196
|
continue;
|
|
1282
1197
|
}
|
|
@@ -1296,11 +1211,11 @@ npx @toolr/seedr add <skill-name> --agents ${agent}
|
|
|
1296
1211
|
Browse available skills at https://seedr.toolr.dev
|
|
1297
1212
|
`
|
|
1298
1213
|
);
|
|
1299
|
-
spinner.succeed(
|
|
1214
|
+
spinner.succeed(brand(`Initialized ${CODING_AGENTS[agent].name}`));
|
|
1300
1215
|
}
|
|
1301
1216
|
console.log("");
|
|
1302
1217
|
console.log(
|
|
1303
|
-
|
|
1218
|
+
brand("Done! Use 'npx @toolr/seedr add <skill>' to install skills.")
|
|
1304
1219
|
);
|
|
1305
1220
|
} catch (error2) {
|
|
1306
1221
|
handleCommandError(error2);
|
|
@@ -1309,18 +1224,9 @@ Browse available skills at https://seedr.toolr.dev
|
|
|
1309
1224
|
|
|
1310
1225
|
// src/cli.ts
|
|
1311
1226
|
var program = new Command5();
|
|
1312
|
-
program.name("seedr").description("Seed your
|
|
1227
|
+
program.name("seedr").description("Seed your Coding Agents with capabilities").version("0.1.0").addCommand(addCommand).addCommand(listCommand).addCommand(removeCommand).addCommand(initCommand);
|
|
1313
1228
|
program.action(() => {
|
|
1314
|
-
|
|
1315
|
-
chalk12.green(`
|
|
1316
|
-
\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|
|
1317
|
-
\u2551 \u2551
|
|
1318
|
-
\u2551 \u{1F331} Seedr \u2551
|
|
1319
|
-
\u2551 Seed your projects with AI configs \u2551
|
|
1320
|
-
\u2551 \u2551
|
|
1321
|
-
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
|
|
1322
|
-
`)
|
|
1323
|
-
);
|
|
1229
|
+
printLogo();
|
|
1324
1230
|
program.help();
|
|
1325
1231
|
});
|
|
1326
1232
|
program.parse();
|
package/dist/index.js
CHANGED