@heurist-network/skills 0.1.1 → 0.1.3
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 +195 -60
- 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,30 @@ 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
|
+
if (detail.external_api_dependencies.length > 0) {
|
|
611
|
+
p.log.info(
|
|
612
|
+
`External APIs: ${pc.dim(detail.external_api_dependencies.join(", "))}`
|
|
613
|
+
);
|
|
614
|
+
}
|
|
610
615
|
const warnings = getCapabilityWarnings(detail.capabilities);
|
|
611
616
|
if (warnings.length > 0) {
|
|
612
617
|
p.log.warn(
|
|
@@ -653,12 +658,12 @@ async function addCommand(args) {
|
|
|
653
658
|
if (existing) {
|
|
654
659
|
await cleanupLockEntry(existing);
|
|
655
660
|
}
|
|
656
|
-
|
|
661
|
+
spinner6.start(`Downloading ${pc.cyan(slug)}`);
|
|
657
662
|
const download = await downloadSkill(slug);
|
|
658
|
-
|
|
663
|
+
spinner6.stop(
|
|
659
664
|
`Downloaded ${pc.green(download.filename)} (${formatBytes(download.content.length)})`
|
|
660
665
|
);
|
|
661
|
-
|
|
666
|
+
spinner6.start(`Installing to ${scope} scope`);
|
|
662
667
|
const installResult = await installDownloadedSkill({
|
|
663
668
|
scope,
|
|
664
669
|
slug,
|
|
@@ -667,7 +672,7 @@ async function addCommand(args) {
|
|
|
667
672
|
agents: targetAgents,
|
|
668
673
|
mode: installMode
|
|
669
674
|
});
|
|
670
|
-
|
|
675
|
+
spinner6.stop(`Installed to ${pc.dim(installResult.canonicalPath)}`);
|
|
671
676
|
upsertLockEntry(scope, {
|
|
672
677
|
slug,
|
|
673
678
|
name: detail.name,
|
|
@@ -852,10 +857,10 @@ async function interactiveSearch() {
|
|
|
852
857
|
placeholder: "e.g. defi, swap, analytics"
|
|
853
858
|
});
|
|
854
859
|
if (typeof searchTerm === "symbol" || !searchTerm) return void 0;
|
|
855
|
-
const
|
|
856
|
-
|
|
860
|
+
const spinner6 = p.spinner();
|
|
861
|
+
spinner6.start("Searching marketplace...");
|
|
857
862
|
const result = await listSkills({ search: searchTerm, limit: 20 });
|
|
858
|
-
|
|
863
|
+
spinner6.stop(`Found ${result.skills.length} skill(s).`);
|
|
859
864
|
if (result.skills.length === 0) {
|
|
860
865
|
p.log.warn("No skills found matching that query.");
|
|
861
866
|
return void 0;
|
|
@@ -1113,7 +1118,7 @@ import * as p3 from "@clack/prompts";
|
|
|
1113
1118
|
import pc3 from "picocolors";
|
|
1114
1119
|
async function listCommand(args) {
|
|
1115
1120
|
const options = parseListOptions(args);
|
|
1116
|
-
if (options.showRemote) {
|
|
1121
|
+
if (options.showRemote || options.search || options.category) {
|
|
1117
1122
|
await listRemote(options);
|
|
1118
1123
|
return;
|
|
1119
1124
|
}
|
|
@@ -1194,14 +1199,14 @@ async function listLocal(scope, agentFilter) {
|
|
|
1194
1199
|
}
|
|
1195
1200
|
}
|
|
1196
1201
|
async function listRemote(options) {
|
|
1197
|
-
const
|
|
1198
|
-
|
|
1202
|
+
const spinner6 = p3.spinner();
|
|
1203
|
+
spinner6.start("Fetching skills from marketplace...");
|
|
1199
1204
|
const result = await listSkills({
|
|
1200
1205
|
category: options.category || void 0,
|
|
1201
1206
|
search: options.search || void 0,
|
|
1202
1207
|
limit: 50
|
|
1203
1208
|
});
|
|
1204
|
-
|
|
1209
|
+
spinner6.stop(`Showing ${result.skills.length} verified skill(s).`);
|
|
1205
1210
|
if (result.skills.length === 0) {
|
|
1206
1211
|
p3.log.warn("No skills found.");
|
|
1207
1212
|
return;
|
|
@@ -1212,7 +1217,8 @@ async function listRemote(options) {
|
|
|
1212
1217
|
const status = installed.has(skill.slug) ? pc3.green(" [installed]") : "";
|
|
1213
1218
|
const category = skill.category ? pc3.dim(` [${skill.category}]`) : "";
|
|
1214
1219
|
const risk = skill.risk_tier ? pc3.dim(` risk:${skill.risk_tier}`) : "";
|
|
1215
|
-
|
|
1220
|
+
const externalApis = skill.external_api_dependencies.length > 0 ? pc3.dim(` apis:${skill.external_api_dependencies.join(", ")}`) : "";
|
|
1221
|
+
console.log(` ${pc3.cyan(skill.slug)}${category}${risk}${externalApis}${status}`);
|
|
1216
1222
|
console.log(` ${skill.description}`);
|
|
1217
1223
|
const warnings = [];
|
|
1218
1224
|
if (skill.capabilities.requires_private_keys) warnings.push("private-keys");
|
|
@@ -1303,20 +1309,20 @@ async function infoCommand(args) {
|
|
|
1303
1309
|
p4.log.error("Usage: heurist-skills info <slug>");
|
|
1304
1310
|
return;
|
|
1305
1311
|
}
|
|
1306
|
-
const
|
|
1307
|
-
|
|
1312
|
+
const spinner6 = p4.spinner();
|
|
1313
|
+
spinner6.start(`Fetching info for ${pc4.cyan(slug)}`);
|
|
1308
1314
|
let detail;
|
|
1309
1315
|
try {
|
|
1310
1316
|
detail = await getSkill(slug);
|
|
1311
1317
|
} catch (err) {
|
|
1312
1318
|
if (err instanceof Error && err.message.includes("API error 404")) {
|
|
1313
|
-
|
|
1319
|
+
spinner6.stop(`Skill ${pc4.red(slug)} not found.`);
|
|
1314
1320
|
throw new Error(`Skill ${slug} not found.`);
|
|
1315
1321
|
}
|
|
1316
|
-
|
|
1322
|
+
spinner6.stop(`Failed to fetch info for ${pc4.cyan(slug)}.`);
|
|
1317
1323
|
throw err;
|
|
1318
1324
|
}
|
|
1319
|
-
|
|
1325
|
+
spinner6.stop(`${pc4.bold(detail.slug)}`);
|
|
1320
1326
|
console.log();
|
|
1321
1327
|
console.log(` ${pc4.bold("Name:")} ${detail.name}`);
|
|
1322
1328
|
console.log(` ${pc4.bold("Slug:")} ${detail.slug}`);
|
|
@@ -1325,6 +1331,9 @@ async function infoCommand(args) {
|
|
|
1325
1331
|
console.log(` ${pc4.bold("Risk Tier:")} ${detail.risk_tier || "\u2014"}`);
|
|
1326
1332
|
console.log(` ${pc4.bold("Status:")} ${detail.verification_status}`);
|
|
1327
1333
|
console.log(` ${pc4.bold("Source:")} ${detail.source_url || "\u2014"}`);
|
|
1334
|
+
if (detail.external_api_dependencies.length > 0) {
|
|
1335
|
+
console.log(` ${pc4.bold("External APIs:")} ${detail.external_api_dependencies.join(", ")}`);
|
|
1336
|
+
}
|
|
1328
1337
|
if (detail.author?.display_name) {
|
|
1329
1338
|
console.log(` ${pc4.bold("Author:")} ${detail.author.display_name}`);
|
|
1330
1339
|
}
|
|
@@ -1399,8 +1408,8 @@ async function checkUpdatesCommand(_args) {
|
|
|
1399
1408
|
p5.log.info("No skills installed. Nothing to check.");
|
|
1400
1409
|
return;
|
|
1401
1410
|
}
|
|
1402
|
-
const
|
|
1403
|
-
|
|
1411
|
+
const spinner6 = p5.spinner();
|
|
1412
|
+
spinner6.start(
|
|
1404
1413
|
`Checking updates for ${installed.length} installed skill(s)...`
|
|
1405
1414
|
);
|
|
1406
1415
|
const uniqueInstalled = Array.from(
|
|
@@ -1420,10 +1429,10 @@ async function checkUpdatesCommand(_args) {
|
|
|
1420
1429
|
return approvedSha && approvedSha !== entry.sha256;
|
|
1421
1430
|
});
|
|
1422
1431
|
if (outdated.length === 0) {
|
|
1423
|
-
|
|
1432
|
+
spinner6.stop(pc5.green("All skills are up to date."));
|
|
1424
1433
|
return;
|
|
1425
1434
|
}
|
|
1426
|
-
|
|
1435
|
+
spinner6.stop(pc5.yellow(`${outdated.length} update(s) available:`));
|
|
1427
1436
|
console.log();
|
|
1428
1437
|
for (const entry of outdated) {
|
|
1429
1438
|
const approvedSha = updatesBySlug.get(entry.slug) || "unknown";
|
|
@@ -1444,45 +1453,165 @@ var init_check_updates = __esm({
|
|
|
1444
1453
|
}
|
|
1445
1454
|
});
|
|
1446
1455
|
|
|
1447
|
-
// src/
|
|
1448
|
-
|
|
1456
|
+
// src/commands/update.ts
|
|
1457
|
+
var update_exports = {};
|
|
1458
|
+
__export(update_exports, {
|
|
1459
|
+
updateCommand: () => updateCommand
|
|
1460
|
+
});
|
|
1449
1461
|
import * as p6 from "@clack/prompts";
|
|
1450
1462
|
import pc6 from "picocolors";
|
|
1463
|
+
async function updateCommand(_args) {
|
|
1464
|
+
const installed = getInstalledEntries("all");
|
|
1465
|
+
if (installed.length === 0) {
|
|
1466
|
+
p6.log.info("No skills installed. Nothing to update.");
|
|
1467
|
+
return;
|
|
1468
|
+
}
|
|
1469
|
+
const spinner6 = p6.spinner();
|
|
1470
|
+
spinner6.start(
|
|
1471
|
+
`Checking updates for ${installed.length} installed skill(s)...`
|
|
1472
|
+
);
|
|
1473
|
+
const uniqueInstalled = Array.from(
|
|
1474
|
+
new Map(
|
|
1475
|
+
installed.map((entry) => [
|
|
1476
|
+
`${entry.slug}:${entry.sha256}`,
|
|
1477
|
+
{ slug: entry.slug, sha256: entry.sha256 }
|
|
1478
|
+
])
|
|
1479
|
+
).values()
|
|
1480
|
+
);
|
|
1481
|
+
let updates;
|
|
1482
|
+
try {
|
|
1483
|
+
updates = await checkUpdates(uniqueInstalled);
|
|
1484
|
+
} catch (err) {
|
|
1485
|
+
spinner6.stop("Failed to check for updates.");
|
|
1486
|
+
throw err;
|
|
1487
|
+
}
|
|
1488
|
+
const updatesBySlug = new Map(
|
|
1489
|
+
updates.map((update) => [update.slug, update.approved_sha256])
|
|
1490
|
+
);
|
|
1491
|
+
const outdated = installed.filter((entry) => {
|
|
1492
|
+
const approvedSha = updatesBySlug.get(entry.slug);
|
|
1493
|
+
return approvedSha && approvedSha !== entry.sha256;
|
|
1494
|
+
});
|
|
1495
|
+
if (outdated.length === 0) {
|
|
1496
|
+
spinner6.stop(pc6.green("All skills are up to date."));
|
|
1497
|
+
return;
|
|
1498
|
+
}
|
|
1499
|
+
spinner6.stop(pc6.yellow(`${outdated.length} update(s) available:`));
|
|
1500
|
+
console.log();
|
|
1501
|
+
for (const entry of outdated) {
|
|
1502
|
+
const approvedSha = updatesBySlug.get(entry.slug) || "unknown";
|
|
1503
|
+
console.log(` ${pc6.cyan(entry.slug)} ${pc6.dim(`[${entry.scope}]`)}`);
|
|
1504
|
+
console.log(` current: ${pc6.dim(entry.sha256.slice(0, 16))}...`);
|
|
1505
|
+
console.log(` latest: ${pc6.dim(approvedSha.slice(0, 16))}...`);
|
|
1506
|
+
console.log();
|
|
1507
|
+
}
|
|
1508
|
+
let successCount = 0;
|
|
1509
|
+
let failCount = 0;
|
|
1510
|
+
for (const entry of outdated) {
|
|
1511
|
+
const targetAgents = Object.keys(entry.agent_installs);
|
|
1512
|
+
const scope = entry.scope;
|
|
1513
|
+
const installMode = entry.install_method;
|
|
1514
|
+
p6.log.info(`Updating ${pc6.cyan(entry.slug)}...`);
|
|
1515
|
+
try {
|
|
1516
|
+
await cleanupEntry(entry);
|
|
1517
|
+
const download = await downloadSkill(entry.slug);
|
|
1518
|
+
const installResult = await installDownloadedSkill({
|
|
1519
|
+
scope,
|
|
1520
|
+
slug: entry.slug,
|
|
1521
|
+
content: download.content,
|
|
1522
|
+
isZip: download.isZip,
|
|
1523
|
+
agents: targetAgents,
|
|
1524
|
+
mode: installMode
|
|
1525
|
+
});
|
|
1526
|
+
upsertLockEntry(scope, {
|
|
1527
|
+
slug: entry.slug,
|
|
1528
|
+
name: entry.name,
|
|
1529
|
+
sha256: download.sha256,
|
|
1530
|
+
installed_at: entry.installed_at,
|
|
1531
|
+
is_zip: download.isZip,
|
|
1532
|
+
install_method: installMode,
|
|
1533
|
+
canonical_path: installResult.canonicalPath,
|
|
1534
|
+
agent_installs: installResult.agentInstalls
|
|
1535
|
+
});
|
|
1536
|
+
p6.log.success(`${pc6.green("\u2713")} ${pc6.bold(entry.slug)} updated.`);
|
|
1537
|
+
successCount++;
|
|
1538
|
+
} catch (err) {
|
|
1539
|
+
p6.log.error(
|
|
1540
|
+
`Failed to update ${entry.slug}: ${err.message}`
|
|
1541
|
+
);
|
|
1542
|
+
failCount++;
|
|
1543
|
+
}
|
|
1544
|
+
}
|
|
1545
|
+
console.log();
|
|
1546
|
+
if (successCount > 0) {
|
|
1547
|
+
p6.log.success(`Updated ${successCount} skill(s).`);
|
|
1548
|
+
}
|
|
1549
|
+
if (failCount > 0) {
|
|
1550
|
+
p6.log.warn(`Failed to update ${failCount} skill(s).`);
|
|
1551
|
+
}
|
|
1552
|
+
}
|
|
1553
|
+
async function cleanupEntry(entry) {
|
|
1554
|
+
const paths = /* @__PURE__ */ new Set();
|
|
1555
|
+
paths.add(entry.canonical_path);
|
|
1556
|
+
for (const install of Object.values(entry.agent_installs)) {
|
|
1557
|
+
if (install?.path) {
|
|
1558
|
+
paths.add(install.path);
|
|
1559
|
+
}
|
|
1560
|
+
}
|
|
1561
|
+
for (const path of paths) {
|
|
1562
|
+
await removePathIfExists(path);
|
|
1563
|
+
}
|
|
1564
|
+
}
|
|
1565
|
+
var init_update = __esm({
|
|
1566
|
+
"src/commands/update.ts"() {
|
|
1567
|
+
"use strict";
|
|
1568
|
+
init_api();
|
|
1569
|
+
init_agents();
|
|
1570
|
+
init_installer();
|
|
1571
|
+
init_lock();
|
|
1572
|
+
}
|
|
1573
|
+
});
|
|
1574
|
+
|
|
1575
|
+
// src/cli.ts
|
|
1576
|
+
import "dotenv/config";
|
|
1577
|
+
import * as p7 from "@clack/prompts";
|
|
1578
|
+
import pc7 from "picocolors";
|
|
1451
1579
|
var VERSION = "0.1.0";
|
|
1452
1580
|
var LOGO = `
|
|
1453
|
-
${
|
|
1454
|
-
${
|
|
1455
|
-
${
|
|
1456
|
-
${
|
|
1457
|
-
${
|
|
1458
|
-
${
|
|
1459
|
-
${
|
|
1581
|
+
${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")}
|
|
1582
|
+
${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")}
|
|
1583
|
+
${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")}
|
|
1584
|
+
${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")}
|
|
1585
|
+
${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")}
|
|
1586
|
+
${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")}
|
|
1587
|
+
${pc7.dim(` skills v${VERSION}`)}
|
|
1460
1588
|
`;
|
|
1461
1589
|
function printHelp() {
|
|
1462
1590
|
console.log(LOGO);
|
|
1463
|
-
console.log(`${
|
|
1591
|
+
console.log(`${pc7.bold("Usage:")} heurist-skills <command> [options]`);
|
|
1464
1592
|
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(` ${
|
|
1593
|
+
console.log(`${pc7.bold("Commands:")}`);
|
|
1594
|
+
console.log(` ${pc7.cyan("add")} <slug> Install a skill from the marketplace (aliases: install)`);
|
|
1595
|
+
console.log(` ${pc7.cyan("remove")} <slug> Uninstall a skill (aliases: rm, uninstall)`);
|
|
1596
|
+
console.log(` ${pc7.cyan("list")} List project-installed skills (aliases: ls)`);
|
|
1597
|
+
console.log(` ${pc7.cyan("list")} --global List global-installed skills`);
|
|
1598
|
+
console.log(` ${pc7.cyan("find")} [query] Search the skill marketplace (aliases: search, f)`);
|
|
1599
|
+
console.log(` ${pc7.cyan("info")} <slug> Show detailed skill info (aliases: show)`);
|
|
1600
|
+
console.log(` ${pc7.cyan("check")} Check for available updates (aliases: check-updates, update-check)`);
|
|
1601
|
+
console.log(` ${pc7.cyan("update")} Update all installed skills (aliases: upgrade)`);
|
|
1602
|
+
console.log(` ${pc7.cyan("help")} Show this help`);
|
|
1474
1603
|
console.log();
|
|
1475
|
-
console.log(`${
|
|
1476
|
-
console.log(` ${
|
|
1477
|
-
console.log(` ${
|
|
1478
|
-
console.log(` ${
|
|
1479
|
-
console.log(` ${
|
|
1480
|
-
console.log(` ${
|
|
1481
|
-
console.log(` ${
|
|
1604
|
+
console.log(`${pc7.bold("Options:")}`);
|
|
1605
|
+
console.log(` ${pc7.dim("-g, --global")} Use the global scope (~/.agents/skills/)`);
|
|
1606
|
+
console.log(` ${pc7.dim("-a, --agent <agent>")} Target or filter specific agents`);
|
|
1607
|
+
console.log(` ${pc7.dim("--copy")} Copy files instead of symlinking`);
|
|
1608
|
+
console.log(` ${pc7.dim("-y, --yes")} Skip confirmation prompts`);
|
|
1609
|
+
console.log(` ${pc7.dim("--category, -c")} Filter by category (use with find/list --remote)`);
|
|
1610
|
+
console.log(` ${pc7.dim("--search, -s")} Filter by search term (use with list --remote)`);
|
|
1482
1611
|
console.log();
|
|
1483
|
-
console.log(`${
|
|
1484
|
-
console.log(` ${
|
|
1485
|
-
console.log(` ${
|
|
1612
|
+
console.log(`${pc7.bold("Environment:")}`);
|
|
1613
|
+
console.log(` ${pc7.dim("HEURIST_SKILLS_API")} Override marketplace API URL`);
|
|
1614
|
+
console.log(` ${pc7.dim("(default: https://mesh.heurist.xyz)")}`);
|
|
1486
1615
|
console.log();
|
|
1487
1616
|
}
|
|
1488
1617
|
async function main() {
|
|
@@ -1497,7 +1626,7 @@ async function main() {
|
|
|
1497
1626
|
console.log(VERSION);
|
|
1498
1627
|
return;
|
|
1499
1628
|
}
|
|
1500
|
-
|
|
1629
|
+
p7.intro(pc7.cyan("heurist-skills"));
|
|
1501
1630
|
try {
|
|
1502
1631
|
switch (command) {
|
|
1503
1632
|
case "add":
|
|
@@ -1539,16 +1668,22 @@ async function main() {
|
|
|
1539
1668
|
await checkUpdatesCommand2(commandArgs);
|
|
1540
1669
|
break;
|
|
1541
1670
|
}
|
|
1671
|
+
case "update":
|
|
1672
|
+
case "upgrade": {
|
|
1673
|
+
const { updateCommand: updateCommand2 } = await Promise.resolve().then(() => (init_update(), update_exports));
|
|
1674
|
+
await updateCommand2(commandArgs);
|
|
1675
|
+
break;
|
|
1676
|
+
}
|
|
1542
1677
|
default:
|
|
1543
|
-
|
|
1678
|
+
p7.log.error(`Unknown command: ${pc7.red(command)}`);
|
|
1544
1679
|
console.log();
|
|
1545
1680
|
printHelp();
|
|
1546
1681
|
process.exit(1);
|
|
1547
1682
|
}
|
|
1548
1683
|
} catch (err) {
|
|
1549
|
-
|
|
1684
|
+
p7.log.error(err.message);
|
|
1550
1685
|
process.exit(1);
|
|
1551
1686
|
}
|
|
1552
|
-
|
|
1687
|
+
p7.outro(pc7.dim("Done."));
|
|
1553
1688
|
}
|
|
1554
1689
|
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.3",
|
|
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",
|