@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.
Files changed (3) hide show
  1. package/README.md +1 -1
  2. package/dist/cli.js +185 -59
  3. 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.ai`) |
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.ai";
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 spinner5 = p.spinner();
592
- spinner5.start(`Fetching skill info for ${pc.cyan(slug)}`);
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
- spinner5.stop("Skill lookup failed.");
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
- spinner5.stop(
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
- spinner5.stop(`Found: ${pc.cyan(detail.name)} \u2014 ${detail.description}`);
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
- spinner5.start(`Downloading ${pc.cyan(slug)}`);
656
+ spinner6.start(`Downloading ${pc.cyan(slug)}`);
657
657
  const download = await downloadSkill(slug);
658
- spinner5.stop(
658
+ spinner6.stop(
659
659
  `Downloaded ${pc.green(download.filename)} (${formatBytes(download.content.length)})`
660
660
  );
661
- spinner5.start(`Installing to ${scope} scope`);
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
- spinner5.stop(`Installed to ${pc.dim(installResult.canonicalPath)}`);
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 spinner5 = p.spinner();
856
- spinner5.start("Searching marketplace...");
855
+ const spinner6 = p.spinner();
856
+ spinner6.start("Searching marketplace...");
857
857
  const result = await listSkills({ search: searchTerm, limit: 20 });
858
- spinner5.stop(`Found ${result.skills.length} skill(s).`);
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 spinner5 = p3.spinner();
1198
- spinner5.start("Fetching skills from marketplace...");
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
- spinner5.stop(`Showing ${result.skills.length} verified skill(s).`);
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 spinner5 = p4.spinner();
1307
- spinner5.start(`Fetching info for ${pc4.cyan(slug)}`);
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
- spinner5.stop(`Skill ${pc4.red(slug)} not found.`);
1313
+ spinner6.stop(`Skill ${pc4.red(slug)} not found.`);
1314
1314
  throw new Error(`Skill ${slug} not found.`);
1315
1315
  }
1316
- spinner5.stop(`Failed to fetch info for ${pc4.cyan(slug)}.`);
1316
+ spinner6.stop(`Failed to fetch info for ${pc4.cyan(slug)}.`);
1317
1317
  throw err;
1318
1318
  }
1319
- spinner5.stop(`${pc4.bold(detail.slug)}`);
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 spinner5 = p5.spinner();
1403
- spinner5.start(
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
- spinner5.stop(pc5.green("All skills are up to date."));
1423
+ spinner6.stop(pc5.green("All skills are up to date."));
1424
1424
  return;
1425
1425
  }
1426
- spinner5.stop(pc5.yellow(`${outdated.length} update(s) available:`));
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/cli.ts
1448
- import "dotenv/config";
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
- ${pc6.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")}
1454
- ${pc6.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")}
1455
- ${pc6.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")}
1456
- ${pc6.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")}
1457
- ${pc6.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")}
1458
- ${pc6.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")}
1459
- ${pc6.dim(` skills v${VERSION}`)}
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(`${pc6.bold("Usage:")} heurist-skills <command> [options]`);
1582
+ console.log(`${pc7.bold("Usage:")} heurist-skills <command> [options]`);
1464
1583
  console.log();
1465
- console.log(`${pc6.bold("Commands:")}`);
1466
- console.log(` ${pc6.cyan("add")} <slug> Install a skill from the marketplace (aliases: install)`);
1467
- console.log(` ${pc6.cyan("remove")} <slug> Uninstall a skill (aliases: rm, uninstall)`);
1468
- console.log(` ${pc6.cyan("list")} List project-installed skills (aliases: ls)`);
1469
- console.log(` ${pc6.cyan("list")} --global List global-installed skills`);
1470
- console.log(` ${pc6.cyan("find")} [query] Search the skill marketplace (aliases: search, f)`);
1471
- console.log(` ${pc6.cyan("info")} <slug> Show detailed skill info (aliases: show)`);
1472
- console.log(` ${pc6.cyan("check")} Check for available updates (aliases: check-updates, update-check)`);
1473
- console.log(` ${pc6.cyan("help")} Show this help`);
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(`${pc6.bold("Options:")}`);
1476
- console.log(` ${pc6.dim("-g, --global")} Use the global scope (~/.agents/skills/)`);
1477
- console.log(` ${pc6.dim("-a, --agent <agent>")} Target or filter specific agents`);
1478
- console.log(` ${pc6.dim("--copy")} Copy files instead of symlinking`);
1479
- console.log(` ${pc6.dim("-y, --yes")} Skip confirmation prompts`);
1480
- console.log(` ${pc6.dim("--category, -c")} Filter by category (use with find/list --remote)`);
1481
- console.log(` ${pc6.dim("--search, -s")} Filter by search term (use with list --remote)`);
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(`${pc6.bold("Environment:")}`);
1484
- console.log(` ${pc6.dim("HEURIST_SKILLS_API")} Override marketplace API URL`);
1485
- console.log(` ${pc6.dim("(default: https://mesh.heurist.ai)")}`);
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
- p6.intro(pc6.cyan("heurist-skills"));
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
- p6.log.error(`Unknown command: ${pc6.red(command)}`);
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
- p6.log.error(err.message);
1675
+ p7.log.error(err.message);
1550
1676
  process.exit(1);
1551
1677
  }
1552
- p6.outro(pc6.dim("Done."));
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.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": "./bin/cli.mjs"
7
+ "heurist-skills": "bin/cli.mjs"
8
8
  },
9
9
  "files": [
10
10
  "dist",