@heurist-network/skills 0.1.1 → 0.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/cli.js +185 -59
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -160,7 +160,7 @@ These features are unique to the Heurist marketplace and not present in other sk
|
|
|
160
160
|
|
|
161
161
|
| Variable | Description |
|
|
162
162
|
|----------|-------------|
|
|
163
|
-
| `HEURIST_SKILLS_API` | Override marketplace API URL (default: `https://mesh.heurist.
|
|
163
|
+
| `HEURIST_SKILLS_API` | Override marketplace API URL (default: `https://mesh.heurist.xyz`) |
|
|
164
164
|
|
|
165
165
|
## Lock File Compatibility
|
|
166
166
|
|
package/dist/cli.js
CHANGED
|
@@ -75,7 +75,7 @@ var DEFAULT_API_URL;
|
|
|
75
75
|
var init_api = __esm({
|
|
76
76
|
"src/api.ts"() {
|
|
77
77
|
"use strict";
|
|
78
|
-
DEFAULT_API_URL = "https://mesh.heurist.
|
|
78
|
+
DEFAULT_API_URL = "https://mesh.heurist.xyz";
|
|
79
79
|
}
|
|
80
80
|
});
|
|
81
81
|
|
|
@@ -588,25 +588,25 @@ async function addCommand(args) {
|
|
|
588
588
|
slug = await interactiveSearch();
|
|
589
589
|
if (!slug) return;
|
|
590
590
|
}
|
|
591
|
-
const
|
|
592
|
-
|
|
591
|
+
const spinner6 = p.spinner();
|
|
592
|
+
spinner6.start(`Fetching skill info for ${pc.cyan(slug)}`);
|
|
593
593
|
let detail;
|
|
594
594
|
try {
|
|
595
595
|
detail = await getSkill(slug);
|
|
596
596
|
} catch (err) {
|
|
597
|
-
|
|
597
|
+
spinner6.stop("Skill lookup failed.");
|
|
598
598
|
if (err instanceof Error && err.message.includes("API error 404")) {
|
|
599
599
|
throw new Error(`Skill ${slug} not found.`);
|
|
600
600
|
}
|
|
601
601
|
throw err;
|
|
602
602
|
}
|
|
603
603
|
if (detail.verification_status !== "verified") {
|
|
604
|
-
|
|
604
|
+
spinner6.stop(
|
|
605
605
|
`Skill ${pc.red(slug)} is ${pc.yellow(detail.verification_status)} and cannot be installed.`
|
|
606
606
|
);
|
|
607
607
|
throw new Error("Only verified skills can be installed.");
|
|
608
608
|
}
|
|
609
|
-
|
|
609
|
+
spinner6.stop(`Found: ${pc.cyan(detail.name)} \u2014 ${detail.description}`);
|
|
610
610
|
const warnings = getCapabilityWarnings(detail.capabilities);
|
|
611
611
|
if (warnings.length > 0) {
|
|
612
612
|
p.log.warn(
|
|
@@ -653,12 +653,12 @@ async function addCommand(args) {
|
|
|
653
653
|
if (existing) {
|
|
654
654
|
await cleanupLockEntry(existing);
|
|
655
655
|
}
|
|
656
|
-
|
|
656
|
+
spinner6.start(`Downloading ${pc.cyan(slug)}`);
|
|
657
657
|
const download = await downloadSkill(slug);
|
|
658
|
-
|
|
658
|
+
spinner6.stop(
|
|
659
659
|
`Downloaded ${pc.green(download.filename)} (${formatBytes(download.content.length)})`
|
|
660
660
|
);
|
|
661
|
-
|
|
661
|
+
spinner6.start(`Installing to ${scope} scope`);
|
|
662
662
|
const installResult = await installDownloadedSkill({
|
|
663
663
|
scope,
|
|
664
664
|
slug,
|
|
@@ -667,7 +667,7 @@ async function addCommand(args) {
|
|
|
667
667
|
agents: targetAgents,
|
|
668
668
|
mode: installMode
|
|
669
669
|
});
|
|
670
|
-
|
|
670
|
+
spinner6.stop(`Installed to ${pc.dim(installResult.canonicalPath)}`);
|
|
671
671
|
upsertLockEntry(scope, {
|
|
672
672
|
slug,
|
|
673
673
|
name: detail.name,
|
|
@@ -852,10 +852,10 @@ async function interactiveSearch() {
|
|
|
852
852
|
placeholder: "e.g. defi, swap, analytics"
|
|
853
853
|
});
|
|
854
854
|
if (typeof searchTerm === "symbol" || !searchTerm) return void 0;
|
|
855
|
-
const
|
|
856
|
-
|
|
855
|
+
const spinner6 = p.spinner();
|
|
856
|
+
spinner6.start("Searching marketplace...");
|
|
857
857
|
const result = await listSkills({ search: searchTerm, limit: 20 });
|
|
858
|
-
|
|
858
|
+
spinner6.stop(`Found ${result.skills.length} skill(s).`);
|
|
859
859
|
if (result.skills.length === 0) {
|
|
860
860
|
p.log.warn("No skills found matching that query.");
|
|
861
861
|
return void 0;
|
|
@@ -1113,7 +1113,7 @@ import * as p3 from "@clack/prompts";
|
|
|
1113
1113
|
import pc3 from "picocolors";
|
|
1114
1114
|
async function listCommand(args) {
|
|
1115
1115
|
const options = parseListOptions(args);
|
|
1116
|
-
if (options.showRemote) {
|
|
1116
|
+
if (options.showRemote || options.search || options.category) {
|
|
1117
1117
|
await listRemote(options);
|
|
1118
1118
|
return;
|
|
1119
1119
|
}
|
|
@@ -1194,14 +1194,14 @@ async function listLocal(scope, agentFilter) {
|
|
|
1194
1194
|
}
|
|
1195
1195
|
}
|
|
1196
1196
|
async function listRemote(options) {
|
|
1197
|
-
const
|
|
1198
|
-
|
|
1197
|
+
const spinner6 = p3.spinner();
|
|
1198
|
+
spinner6.start("Fetching skills from marketplace...");
|
|
1199
1199
|
const result = await listSkills({
|
|
1200
1200
|
category: options.category || void 0,
|
|
1201
1201
|
search: options.search || void 0,
|
|
1202
1202
|
limit: 50
|
|
1203
1203
|
});
|
|
1204
|
-
|
|
1204
|
+
spinner6.stop(`Showing ${result.skills.length} verified skill(s).`);
|
|
1205
1205
|
if (result.skills.length === 0) {
|
|
1206
1206
|
p3.log.warn("No skills found.");
|
|
1207
1207
|
return;
|
|
@@ -1303,20 +1303,20 @@ async function infoCommand(args) {
|
|
|
1303
1303
|
p4.log.error("Usage: heurist-skills info <slug>");
|
|
1304
1304
|
return;
|
|
1305
1305
|
}
|
|
1306
|
-
const
|
|
1307
|
-
|
|
1306
|
+
const spinner6 = p4.spinner();
|
|
1307
|
+
spinner6.start(`Fetching info for ${pc4.cyan(slug)}`);
|
|
1308
1308
|
let detail;
|
|
1309
1309
|
try {
|
|
1310
1310
|
detail = await getSkill(slug);
|
|
1311
1311
|
} catch (err) {
|
|
1312
1312
|
if (err instanceof Error && err.message.includes("API error 404")) {
|
|
1313
|
-
|
|
1313
|
+
spinner6.stop(`Skill ${pc4.red(slug)} not found.`);
|
|
1314
1314
|
throw new Error(`Skill ${slug} not found.`);
|
|
1315
1315
|
}
|
|
1316
|
-
|
|
1316
|
+
spinner6.stop(`Failed to fetch info for ${pc4.cyan(slug)}.`);
|
|
1317
1317
|
throw err;
|
|
1318
1318
|
}
|
|
1319
|
-
|
|
1319
|
+
spinner6.stop(`${pc4.bold(detail.slug)}`);
|
|
1320
1320
|
console.log();
|
|
1321
1321
|
console.log(` ${pc4.bold("Name:")} ${detail.name}`);
|
|
1322
1322
|
console.log(` ${pc4.bold("Slug:")} ${detail.slug}`);
|
|
@@ -1399,8 +1399,8 @@ async function checkUpdatesCommand(_args) {
|
|
|
1399
1399
|
p5.log.info("No skills installed. Nothing to check.");
|
|
1400
1400
|
return;
|
|
1401
1401
|
}
|
|
1402
|
-
const
|
|
1403
|
-
|
|
1402
|
+
const spinner6 = p5.spinner();
|
|
1403
|
+
spinner6.start(
|
|
1404
1404
|
`Checking updates for ${installed.length} installed skill(s)...`
|
|
1405
1405
|
);
|
|
1406
1406
|
const uniqueInstalled = Array.from(
|
|
@@ -1420,10 +1420,10 @@ async function checkUpdatesCommand(_args) {
|
|
|
1420
1420
|
return approvedSha && approvedSha !== entry.sha256;
|
|
1421
1421
|
});
|
|
1422
1422
|
if (outdated.length === 0) {
|
|
1423
|
-
|
|
1423
|
+
spinner6.stop(pc5.green("All skills are up to date."));
|
|
1424
1424
|
return;
|
|
1425
1425
|
}
|
|
1426
|
-
|
|
1426
|
+
spinner6.stop(pc5.yellow(`${outdated.length} update(s) available:`));
|
|
1427
1427
|
console.log();
|
|
1428
1428
|
for (const entry of outdated) {
|
|
1429
1429
|
const approvedSha = updatesBySlug.get(entry.slug) || "unknown";
|
|
@@ -1444,45 +1444,165 @@ var init_check_updates = __esm({
|
|
|
1444
1444
|
}
|
|
1445
1445
|
});
|
|
1446
1446
|
|
|
1447
|
-
// src/
|
|
1448
|
-
|
|
1447
|
+
// src/commands/update.ts
|
|
1448
|
+
var update_exports = {};
|
|
1449
|
+
__export(update_exports, {
|
|
1450
|
+
updateCommand: () => updateCommand
|
|
1451
|
+
});
|
|
1449
1452
|
import * as p6 from "@clack/prompts";
|
|
1450
1453
|
import pc6 from "picocolors";
|
|
1454
|
+
async function updateCommand(_args) {
|
|
1455
|
+
const installed = getInstalledEntries("all");
|
|
1456
|
+
if (installed.length === 0) {
|
|
1457
|
+
p6.log.info("No skills installed. Nothing to update.");
|
|
1458
|
+
return;
|
|
1459
|
+
}
|
|
1460
|
+
const spinner6 = p6.spinner();
|
|
1461
|
+
spinner6.start(
|
|
1462
|
+
`Checking updates for ${installed.length} installed skill(s)...`
|
|
1463
|
+
);
|
|
1464
|
+
const uniqueInstalled = Array.from(
|
|
1465
|
+
new Map(
|
|
1466
|
+
installed.map((entry) => [
|
|
1467
|
+
`${entry.slug}:${entry.sha256}`,
|
|
1468
|
+
{ slug: entry.slug, sha256: entry.sha256 }
|
|
1469
|
+
])
|
|
1470
|
+
).values()
|
|
1471
|
+
);
|
|
1472
|
+
let updates;
|
|
1473
|
+
try {
|
|
1474
|
+
updates = await checkUpdates(uniqueInstalled);
|
|
1475
|
+
} catch (err) {
|
|
1476
|
+
spinner6.stop("Failed to check for updates.");
|
|
1477
|
+
throw err;
|
|
1478
|
+
}
|
|
1479
|
+
const updatesBySlug = new Map(
|
|
1480
|
+
updates.map((update) => [update.slug, update.approved_sha256])
|
|
1481
|
+
);
|
|
1482
|
+
const outdated = installed.filter((entry) => {
|
|
1483
|
+
const approvedSha = updatesBySlug.get(entry.slug);
|
|
1484
|
+
return approvedSha && approvedSha !== entry.sha256;
|
|
1485
|
+
});
|
|
1486
|
+
if (outdated.length === 0) {
|
|
1487
|
+
spinner6.stop(pc6.green("All skills are up to date."));
|
|
1488
|
+
return;
|
|
1489
|
+
}
|
|
1490
|
+
spinner6.stop(pc6.yellow(`${outdated.length} update(s) available:`));
|
|
1491
|
+
console.log();
|
|
1492
|
+
for (const entry of outdated) {
|
|
1493
|
+
const approvedSha = updatesBySlug.get(entry.slug) || "unknown";
|
|
1494
|
+
console.log(` ${pc6.cyan(entry.slug)} ${pc6.dim(`[${entry.scope}]`)}`);
|
|
1495
|
+
console.log(` current: ${pc6.dim(entry.sha256.slice(0, 16))}...`);
|
|
1496
|
+
console.log(` latest: ${pc6.dim(approvedSha.slice(0, 16))}...`);
|
|
1497
|
+
console.log();
|
|
1498
|
+
}
|
|
1499
|
+
let successCount = 0;
|
|
1500
|
+
let failCount = 0;
|
|
1501
|
+
for (const entry of outdated) {
|
|
1502
|
+
const targetAgents = Object.keys(entry.agent_installs);
|
|
1503
|
+
const scope = entry.scope;
|
|
1504
|
+
const installMode = entry.install_method;
|
|
1505
|
+
p6.log.info(`Updating ${pc6.cyan(entry.slug)}...`);
|
|
1506
|
+
try {
|
|
1507
|
+
await cleanupEntry(entry);
|
|
1508
|
+
const download = await downloadSkill(entry.slug);
|
|
1509
|
+
const installResult = await installDownloadedSkill({
|
|
1510
|
+
scope,
|
|
1511
|
+
slug: entry.slug,
|
|
1512
|
+
content: download.content,
|
|
1513
|
+
isZip: download.isZip,
|
|
1514
|
+
agents: targetAgents,
|
|
1515
|
+
mode: installMode
|
|
1516
|
+
});
|
|
1517
|
+
upsertLockEntry(scope, {
|
|
1518
|
+
slug: entry.slug,
|
|
1519
|
+
name: entry.name,
|
|
1520
|
+
sha256: download.sha256,
|
|
1521
|
+
installed_at: entry.installed_at,
|
|
1522
|
+
is_zip: download.isZip,
|
|
1523
|
+
install_method: installMode,
|
|
1524
|
+
canonical_path: installResult.canonicalPath,
|
|
1525
|
+
agent_installs: installResult.agentInstalls
|
|
1526
|
+
});
|
|
1527
|
+
p6.log.success(`${pc6.green("\u2713")} ${pc6.bold(entry.slug)} updated.`);
|
|
1528
|
+
successCount++;
|
|
1529
|
+
} catch (err) {
|
|
1530
|
+
p6.log.error(
|
|
1531
|
+
`Failed to update ${entry.slug}: ${err.message}`
|
|
1532
|
+
);
|
|
1533
|
+
failCount++;
|
|
1534
|
+
}
|
|
1535
|
+
}
|
|
1536
|
+
console.log();
|
|
1537
|
+
if (successCount > 0) {
|
|
1538
|
+
p6.log.success(`Updated ${successCount} skill(s).`);
|
|
1539
|
+
}
|
|
1540
|
+
if (failCount > 0) {
|
|
1541
|
+
p6.log.warn(`Failed to update ${failCount} skill(s).`);
|
|
1542
|
+
}
|
|
1543
|
+
}
|
|
1544
|
+
async function cleanupEntry(entry) {
|
|
1545
|
+
const paths = /* @__PURE__ */ new Set();
|
|
1546
|
+
paths.add(entry.canonical_path);
|
|
1547
|
+
for (const install of Object.values(entry.agent_installs)) {
|
|
1548
|
+
if (install?.path) {
|
|
1549
|
+
paths.add(install.path);
|
|
1550
|
+
}
|
|
1551
|
+
}
|
|
1552
|
+
for (const path of paths) {
|
|
1553
|
+
await removePathIfExists(path);
|
|
1554
|
+
}
|
|
1555
|
+
}
|
|
1556
|
+
var init_update = __esm({
|
|
1557
|
+
"src/commands/update.ts"() {
|
|
1558
|
+
"use strict";
|
|
1559
|
+
init_api();
|
|
1560
|
+
init_agents();
|
|
1561
|
+
init_installer();
|
|
1562
|
+
init_lock();
|
|
1563
|
+
}
|
|
1564
|
+
});
|
|
1565
|
+
|
|
1566
|
+
// src/cli.ts
|
|
1567
|
+
import "dotenv/config";
|
|
1568
|
+
import * as p7 from "@clack/prompts";
|
|
1569
|
+
import pc7 from "picocolors";
|
|
1451
1570
|
var VERSION = "0.1.0";
|
|
1452
1571
|
var LOGO = `
|
|
1453
|
-
${
|
|
1454
|
-
${
|
|
1455
|
-
${
|
|
1456
|
-
${
|
|
1457
|
-
${
|
|
1458
|
-
${
|
|
1459
|
-
${
|
|
1572
|
+
${pc7.cyan("\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557")}
|
|
1573
|
+
${pc7.cyan("\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D")}
|
|
1574
|
+
${pc7.cyan("\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551")}
|
|
1575
|
+
${pc7.cyan("\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2551\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551")}
|
|
1576
|
+
${pc7.cyan("\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551")}
|
|
1577
|
+
${pc7.cyan("\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D")}
|
|
1578
|
+
${pc7.dim(` skills v${VERSION}`)}
|
|
1460
1579
|
`;
|
|
1461
1580
|
function printHelp() {
|
|
1462
1581
|
console.log(LOGO);
|
|
1463
|
-
console.log(`${
|
|
1582
|
+
console.log(`${pc7.bold("Usage:")} heurist-skills <command> [options]`);
|
|
1464
1583
|
console.log();
|
|
1465
|
-
console.log(`${
|
|
1466
|
-
console.log(` ${
|
|
1467
|
-
console.log(` ${
|
|
1468
|
-
console.log(` ${
|
|
1469
|
-
console.log(` ${
|
|
1470
|
-
console.log(` ${
|
|
1471
|
-
console.log(` ${
|
|
1472
|
-
console.log(` ${
|
|
1473
|
-
console.log(` ${
|
|
1584
|
+
console.log(`${pc7.bold("Commands:")}`);
|
|
1585
|
+
console.log(` ${pc7.cyan("add")} <slug> Install a skill from the marketplace (aliases: install)`);
|
|
1586
|
+
console.log(` ${pc7.cyan("remove")} <slug> Uninstall a skill (aliases: rm, uninstall)`);
|
|
1587
|
+
console.log(` ${pc7.cyan("list")} List project-installed skills (aliases: ls)`);
|
|
1588
|
+
console.log(` ${pc7.cyan("list")} --global List global-installed skills`);
|
|
1589
|
+
console.log(` ${pc7.cyan("find")} [query] Search the skill marketplace (aliases: search, f)`);
|
|
1590
|
+
console.log(` ${pc7.cyan("info")} <slug> Show detailed skill info (aliases: show)`);
|
|
1591
|
+
console.log(` ${pc7.cyan("check")} Check for available updates (aliases: check-updates, update-check)`);
|
|
1592
|
+
console.log(` ${pc7.cyan("update")} Update all installed skills (aliases: upgrade)`);
|
|
1593
|
+
console.log(` ${pc7.cyan("help")} Show this help`);
|
|
1474
1594
|
console.log();
|
|
1475
|
-
console.log(`${
|
|
1476
|
-
console.log(` ${
|
|
1477
|
-
console.log(` ${
|
|
1478
|
-
console.log(` ${
|
|
1479
|
-
console.log(` ${
|
|
1480
|
-
console.log(` ${
|
|
1481
|
-
console.log(` ${
|
|
1595
|
+
console.log(`${pc7.bold("Options:")}`);
|
|
1596
|
+
console.log(` ${pc7.dim("-g, --global")} Use the global scope (~/.agents/skills/)`);
|
|
1597
|
+
console.log(` ${pc7.dim("-a, --agent <agent>")} Target or filter specific agents`);
|
|
1598
|
+
console.log(` ${pc7.dim("--copy")} Copy files instead of symlinking`);
|
|
1599
|
+
console.log(` ${pc7.dim("-y, --yes")} Skip confirmation prompts`);
|
|
1600
|
+
console.log(` ${pc7.dim("--category, -c")} Filter by category (use with find/list --remote)`);
|
|
1601
|
+
console.log(` ${pc7.dim("--search, -s")} Filter by search term (use with list --remote)`);
|
|
1482
1602
|
console.log();
|
|
1483
|
-
console.log(`${
|
|
1484
|
-
console.log(` ${
|
|
1485
|
-
console.log(` ${
|
|
1603
|
+
console.log(`${pc7.bold("Environment:")}`);
|
|
1604
|
+
console.log(` ${pc7.dim("HEURIST_SKILLS_API")} Override marketplace API URL`);
|
|
1605
|
+
console.log(` ${pc7.dim("(default: https://mesh.heurist.xyz)")}`);
|
|
1486
1606
|
console.log();
|
|
1487
1607
|
}
|
|
1488
1608
|
async function main() {
|
|
@@ -1497,7 +1617,7 @@ async function main() {
|
|
|
1497
1617
|
console.log(VERSION);
|
|
1498
1618
|
return;
|
|
1499
1619
|
}
|
|
1500
|
-
|
|
1620
|
+
p7.intro(pc7.cyan("heurist-skills"));
|
|
1501
1621
|
try {
|
|
1502
1622
|
switch (command) {
|
|
1503
1623
|
case "add":
|
|
@@ -1539,16 +1659,22 @@ async function main() {
|
|
|
1539
1659
|
await checkUpdatesCommand2(commandArgs);
|
|
1540
1660
|
break;
|
|
1541
1661
|
}
|
|
1662
|
+
case "update":
|
|
1663
|
+
case "upgrade": {
|
|
1664
|
+
const { updateCommand: updateCommand2 } = await Promise.resolve().then(() => (init_update(), update_exports));
|
|
1665
|
+
await updateCommand2(commandArgs);
|
|
1666
|
+
break;
|
|
1667
|
+
}
|
|
1542
1668
|
default:
|
|
1543
|
-
|
|
1669
|
+
p7.log.error(`Unknown command: ${pc7.red(command)}`);
|
|
1544
1670
|
console.log();
|
|
1545
1671
|
printHelp();
|
|
1546
1672
|
process.exit(1);
|
|
1547
1673
|
}
|
|
1548
1674
|
} catch (err) {
|
|
1549
|
-
|
|
1675
|
+
p7.log.error(err.message);
|
|
1550
1676
|
process.exit(1);
|
|
1551
1677
|
}
|
|
1552
|
-
|
|
1678
|
+
p7.outro(pc7.dim("Done."));
|
|
1553
1679
|
}
|
|
1554
1680
|
main();
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@heurist-network/skills",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "CLI tool for browsing, installing, and managing Heurist Mesh skills from the skill marketplace registry.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
7
|
-
"heurist-skills": "
|
|
7
|
+
"heurist-skills": "bin/cli.mjs"
|
|
8
8
|
},
|
|
9
9
|
"files": [
|
|
10
10
|
"dist",
|