@olorehq/olore 0.1.3 → 0.1.4
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/cli.js +126 -10
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// src/cli.ts
|
|
4
4
|
import { createRequire } from "module";
|
|
5
5
|
import { Command } from "commander";
|
|
6
|
-
import
|
|
6
|
+
import pc10 from "picocolors";
|
|
7
7
|
|
|
8
8
|
// src/commands/doctor.ts
|
|
9
9
|
import pc from "picocolors";
|
|
@@ -742,6 +742,22 @@ async function fetchWithTimeout(url, timeout = DOWNLOAD_TIMEOUT) {
|
|
|
742
742
|
clearTimeout(timeoutId);
|
|
743
743
|
}
|
|
744
744
|
}
|
|
745
|
+
async function fetchPackageIndex() {
|
|
746
|
+
const url = `${REGISTRY_URL}/index.json`;
|
|
747
|
+
const response = await fetchWithTimeout(url);
|
|
748
|
+
if (response.status === 404) {
|
|
749
|
+
throw new RegistryError("Registry not found", "NOT_FOUND");
|
|
750
|
+
}
|
|
751
|
+
if (!response.ok) {
|
|
752
|
+
throw new RegistryError(`Failed to fetch registry: ${response.status}`, "NETWORK_ERROR");
|
|
753
|
+
}
|
|
754
|
+
try {
|
|
755
|
+
const data = await response.json();
|
|
756
|
+
return data;
|
|
757
|
+
} catch {
|
|
758
|
+
throw new RegistryError("Invalid registry response", "INVALID_RESPONSE");
|
|
759
|
+
}
|
|
760
|
+
}
|
|
745
761
|
async function fetchPackageVersions(name) {
|
|
746
762
|
const url = `${REGISTRY_URL}/packages/${name}.json`;
|
|
747
763
|
const response = await fetchWithTimeout(url);
|
|
@@ -1260,17 +1276,109 @@ Specify version: ${pc8.cyan(`olore remove ${name}@<version>`)}`);
|
|
|
1260
1276
|
}
|
|
1261
1277
|
}
|
|
1262
1278
|
|
|
1279
|
+
// src/commands/search.ts
|
|
1280
|
+
import ora5 from "ora";
|
|
1281
|
+
import pc9 from "picocolors";
|
|
1282
|
+
async function search(query, options) {
|
|
1283
|
+
const spinner = ora5("Fetching package registry...").start();
|
|
1284
|
+
let packages;
|
|
1285
|
+
try {
|
|
1286
|
+
const index = await fetchPackageIndex();
|
|
1287
|
+
packages = index.packages;
|
|
1288
|
+
spinner.stop();
|
|
1289
|
+
} catch (error) {
|
|
1290
|
+
spinner.fail("Failed to fetch registry");
|
|
1291
|
+
if (error instanceof RegistryError) {
|
|
1292
|
+
if (error.code === "NETWORK_ERROR" || error.code === "TIMEOUT") {
|
|
1293
|
+
console.log(pc9.red(`
|
|
1294
|
+
Network error: ${error.message}`));
|
|
1295
|
+
console.log(pc9.gray("Please check your internet connection and try again."));
|
|
1296
|
+
} else {
|
|
1297
|
+
console.log(pc9.red(`
|
|
1298
|
+
Error: ${error.message}`));
|
|
1299
|
+
}
|
|
1300
|
+
} else {
|
|
1301
|
+
console.log(pc9.red(`
|
|
1302
|
+
Error: ${error instanceof Error ? error.message : "Unknown error"}`));
|
|
1303
|
+
}
|
|
1304
|
+
process.exit(1);
|
|
1305
|
+
}
|
|
1306
|
+
let entries = Object.entries(packages);
|
|
1307
|
+
if (query) {
|
|
1308
|
+
const q = query.toLowerCase();
|
|
1309
|
+
entries = entries.filter(
|
|
1310
|
+
([name, info]) => name.toLowerCase().includes(q) || info.description.toLowerCase().includes(q)
|
|
1311
|
+
);
|
|
1312
|
+
}
|
|
1313
|
+
if (entries.length === 0) {
|
|
1314
|
+
if (query) {
|
|
1315
|
+
console.log(pc9.yellow(`
|
|
1316
|
+
No packages matching '${query}'`));
|
|
1317
|
+
} else {
|
|
1318
|
+
console.log(pc9.yellow("\nNo packages available in the registry"));
|
|
1319
|
+
}
|
|
1320
|
+
return;
|
|
1321
|
+
}
|
|
1322
|
+
const installed = await getInstalledPackages();
|
|
1323
|
+
const installedNames = new Set(installed.map((p) => p.name));
|
|
1324
|
+
const installedVersions = /* @__PURE__ */ new Map();
|
|
1325
|
+
for (const pkg of installed) {
|
|
1326
|
+
installedVersions.set(pkg.name, pkg.version);
|
|
1327
|
+
}
|
|
1328
|
+
if (options.json) {
|
|
1329
|
+
const result = {
|
|
1330
|
+
packages: entries.map(([name, info]) => ({
|
|
1331
|
+
name,
|
|
1332
|
+
description: info.description,
|
|
1333
|
+
versions: info.versions,
|
|
1334
|
+
installed: installedNames.has(name),
|
|
1335
|
+
installedVersion: installedVersions.get(name) || null
|
|
1336
|
+
})),
|
|
1337
|
+
...query ? { query } : {}
|
|
1338
|
+
};
|
|
1339
|
+
console.log(JSON.stringify(result, null, 2));
|
|
1340
|
+
return;
|
|
1341
|
+
}
|
|
1342
|
+
const colName = 20;
|
|
1343
|
+
const colDesc = 44;
|
|
1344
|
+
const colVersions = 12;
|
|
1345
|
+
console.log(pc9.bold("\nAvailable packages:\n"));
|
|
1346
|
+
console.log(
|
|
1347
|
+
pc9.gray(
|
|
1348
|
+
"PACKAGE".padEnd(colName) + "DESCRIPTION".padEnd(colDesc) + "VERSIONS".padEnd(colVersions) + "INSTALLED"
|
|
1349
|
+
)
|
|
1350
|
+
);
|
|
1351
|
+
console.log(pc9.gray("\u2500".repeat(colName + colDesc + colVersions + 12)));
|
|
1352
|
+
for (const [name, info] of entries.sort(([a], [b]) => a.localeCompare(b))) {
|
|
1353
|
+
const desc = truncate(info.description, colDesc - 2);
|
|
1354
|
+
const versions = info.versions.join(", ");
|
|
1355
|
+
const installedVersion = installedVersions.get(name);
|
|
1356
|
+
const status = installedVersion ? pc9.green(`\u2713 ${installedVersion}`) : "";
|
|
1357
|
+
console.log(
|
|
1358
|
+
name.padEnd(colName) + desc.padEnd(colDesc) + versions.padEnd(colVersions) + status
|
|
1359
|
+
);
|
|
1360
|
+
}
|
|
1361
|
+
console.log(pc9.gray("\u2500".repeat(colName + colDesc + colVersions + 12)));
|
|
1362
|
+
console.log(pc9.gray(`${entries.length} package${entries.length === 1 ? "" : "s"} available`));
|
|
1363
|
+
console.log(`
|
|
1364
|
+
Install with: ${pc9.cyan("olore install <package>")}`);
|
|
1365
|
+
}
|
|
1366
|
+
function truncate(str, maxLen) {
|
|
1367
|
+
if (str.length <= maxLen) return str;
|
|
1368
|
+
return str.slice(0, maxLen - 1) + "\u2026";
|
|
1369
|
+
}
|
|
1370
|
+
|
|
1263
1371
|
// src/cli.ts
|
|
1264
1372
|
var require2 = createRequire(import.meta.url);
|
|
1265
1373
|
var { version } = require2("../package.json");
|
|
1266
1374
|
var program = new Command();
|
|
1267
1375
|
program.name("olore").description("Universal documentation for any AI coding agent").version(version).addHelpText("after", `
|
|
1268
|
-
${
|
|
1376
|
+
${pc10.gray("May the Skill be with you.")}`);
|
|
1269
1377
|
program.command("init").description("Initialize a documentation package in the current directory").option("-n, --name <name>", "Package name (default: folder name)").option("-v, --version <version>", "Package version (default: latest)").option("-y, --yes", "Skip prompts, use defaults").action(async (options) => {
|
|
1270
1378
|
try {
|
|
1271
1379
|
await init(options);
|
|
1272
1380
|
} catch (error) {
|
|
1273
|
-
console.error(
|
|
1381
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1274
1382
|
process.exit(1);
|
|
1275
1383
|
}
|
|
1276
1384
|
});
|
|
@@ -1278,7 +1386,7 @@ program.command("install <package>").alias("i").description("Install a documenta
|
|
|
1278
1386
|
try {
|
|
1279
1387
|
await install(pkg, options);
|
|
1280
1388
|
} catch (error) {
|
|
1281
|
-
console.error(
|
|
1389
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1282
1390
|
process.exit(1);
|
|
1283
1391
|
}
|
|
1284
1392
|
});
|
|
@@ -1286,7 +1394,7 @@ program.command("link <path>").description("Link a local package for development
|
|
|
1286
1394
|
try {
|
|
1287
1395
|
await link(localPath);
|
|
1288
1396
|
} catch (error) {
|
|
1289
|
-
console.error(
|
|
1397
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1290
1398
|
process.exit(1);
|
|
1291
1399
|
}
|
|
1292
1400
|
});
|
|
@@ -1294,7 +1402,15 @@ program.command("list").alias("ls").description("List installed documentation pa
|
|
|
1294
1402
|
try {
|
|
1295
1403
|
await list(options);
|
|
1296
1404
|
} catch (error) {
|
|
1297
|
-
console.error(
|
|
1405
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1406
|
+
process.exit(1);
|
|
1407
|
+
}
|
|
1408
|
+
});
|
|
1409
|
+
program.command("search [query]").description("Search available packages in the registry").option("--json", "Output as JSON").action(async (query, options) => {
|
|
1410
|
+
try {
|
|
1411
|
+
await search(query, options);
|
|
1412
|
+
} catch (error) {
|
|
1413
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1298
1414
|
process.exit(1);
|
|
1299
1415
|
}
|
|
1300
1416
|
});
|
|
@@ -1302,7 +1418,7 @@ program.command("remove <package>").alias("rm").description("Remove an installed
|
|
|
1302
1418
|
try {
|
|
1303
1419
|
await remove(pkg);
|
|
1304
1420
|
} catch (error) {
|
|
1305
|
-
console.error(
|
|
1421
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1306
1422
|
process.exit(1);
|
|
1307
1423
|
}
|
|
1308
1424
|
});
|
|
@@ -1310,7 +1426,7 @@ program.command("doctor").description("Check for issues with installed packages"
|
|
|
1310
1426
|
try {
|
|
1311
1427
|
await doctor(options);
|
|
1312
1428
|
} catch (error) {
|
|
1313
|
-
console.error(
|
|
1429
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1314
1430
|
process.exit(1);
|
|
1315
1431
|
}
|
|
1316
1432
|
});
|
|
@@ -1318,7 +1434,7 @@ program.command("prune").description("Remove dangling symlinks, orphaned package
|
|
|
1318
1434
|
try {
|
|
1319
1435
|
await prune(options);
|
|
1320
1436
|
} catch (error) {
|
|
1321
|
-
console.error(
|
|
1437
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1322
1438
|
process.exit(1);
|
|
1323
1439
|
}
|
|
1324
1440
|
});
|
|
@@ -1326,7 +1442,7 @@ program.command("order66").description(false).action(async () => {
|
|
|
1326
1442
|
try {
|
|
1327
1443
|
await order66();
|
|
1328
1444
|
} catch (error) {
|
|
1329
|
-
console.error(
|
|
1445
|
+
console.error(pc10.red(`Error: ${error.message}`));
|
|
1330
1446
|
process.exit(1);
|
|
1331
1447
|
}
|
|
1332
1448
|
});
|