@lobehub/market-cli 0.0.4 → 0.0.6
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 +127 -8
- package/package.json +1 -1
package/dist/cli.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
3
|
// src/cli.ts
|
|
4
|
-
import { createRequire as createRequire2 } from "module";
|
|
5
4
|
import { Command } from "commander";
|
|
6
5
|
|
|
7
6
|
// src/commands/auth.ts
|
|
@@ -152,7 +151,6 @@ function registerAuthCommand(program2) {
|
|
|
152
151
|
|
|
153
152
|
// src/commands/register.ts
|
|
154
153
|
import { MarketSDK as MarketSDK2 } from "@lobehub/market-sdk";
|
|
155
|
-
import { createRequire } from "module";
|
|
156
154
|
|
|
157
155
|
// src/utils/deviceId.ts
|
|
158
156
|
import { createHash } from "crypto";
|
|
@@ -179,8 +177,6 @@ function generateDeviceId() {
|
|
|
179
177
|
}
|
|
180
178
|
|
|
181
179
|
// src/commands/register.ts
|
|
182
|
-
var require2 = createRequire(import.meta.url);
|
|
183
|
-
var pkg = require2("../../package.json");
|
|
184
180
|
function registerRegisterCommand(program2) {
|
|
185
181
|
program2.command("register").description("Register this device as an M2M client and save credentials locally").requiredOption("--name <name>", "Client name for registration").option("--description <desc>", "Description of the client").option(
|
|
186
182
|
"--source <source>",
|
|
@@ -202,7 +198,7 @@ function registerRegisterCommand(program2) {
|
|
|
202
198
|
},
|
|
203
199
|
platform: process.arch,
|
|
204
200
|
source,
|
|
205
|
-
version:
|
|
201
|
+
version: "0.0.6"
|
|
206
202
|
});
|
|
207
203
|
await saveCredentials({
|
|
208
204
|
baseUrl: baseURL,
|
|
@@ -225,11 +221,134 @@ function registerRegisterCommand(program2) {
|
|
|
225
221
|
});
|
|
226
222
|
}
|
|
227
223
|
|
|
224
|
+
// src/commands/skills.ts
|
|
225
|
+
import { MarketSDK as MarketSDK3 } from "@lobehub/market-sdk";
|
|
226
|
+
import { writeFileSync } from "fs";
|
|
227
|
+
import { resolve } from "path";
|
|
228
|
+
|
|
229
|
+
// src/utils/table.ts
|
|
230
|
+
function truncate(text, maxWidth) {
|
|
231
|
+
if (text.length <= maxWidth) return text;
|
|
232
|
+
return text.slice(0, maxWidth - 1) + "\u2026";
|
|
233
|
+
}
|
|
234
|
+
function renderTable(columns, rows) {
|
|
235
|
+
const widths = columns.map((col) => {
|
|
236
|
+
let width = col.label.length;
|
|
237
|
+
for (const row of rows) {
|
|
238
|
+
const val = String(row[col.key] ?? "");
|
|
239
|
+
width = Math.max(width, val.length);
|
|
240
|
+
}
|
|
241
|
+
return col.maxWidth ? Math.min(width, col.maxWidth) : width;
|
|
242
|
+
});
|
|
243
|
+
const lines = [];
|
|
244
|
+
const header = columns.map((col, i) => {
|
|
245
|
+
const label = col.maxWidth ? truncate(col.label, col.maxWidth) : col.label;
|
|
246
|
+
return label.padEnd(widths[i]);
|
|
247
|
+
}).join(" ");
|
|
248
|
+
lines.push(header);
|
|
249
|
+
for (const row of rows) {
|
|
250
|
+
const cells = columns.map((col, i) => {
|
|
251
|
+
const raw = String(row[col.key] ?? "");
|
|
252
|
+
const val = col.maxWidth ? truncate(raw, col.maxWidth) : raw;
|
|
253
|
+
return val.padEnd(widths[i]);
|
|
254
|
+
});
|
|
255
|
+
lines.push(cells.join(" "));
|
|
256
|
+
}
|
|
257
|
+
return lines.join("\n");
|
|
258
|
+
}
|
|
259
|
+
|
|
260
|
+
// src/commands/skills.ts
|
|
261
|
+
function createSDK() {
|
|
262
|
+
const config = resolveConfig();
|
|
263
|
+
if (!config.clientId || !config.clientSecret) {
|
|
264
|
+
console.error(
|
|
265
|
+
"No credentials found. Run `lobehub-market register` first or set MARKET_CLIENT_ID and MARKET_CLIENT_SECRET."
|
|
266
|
+
);
|
|
267
|
+
process.exit(1);
|
|
268
|
+
}
|
|
269
|
+
return new MarketSDK3({
|
|
270
|
+
baseURL: config.baseUrl,
|
|
271
|
+
clientId: config.clientId,
|
|
272
|
+
clientSecret: config.clientSecret
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
function formatCount(n) {
|
|
276
|
+
if (n >= 1e3) return `${(n / 1e3).toFixed(1)}k`;
|
|
277
|
+
return String(n);
|
|
278
|
+
}
|
|
279
|
+
function registerSkillsCommand(program2) {
|
|
280
|
+
const skills = program2.command("skills").description("Browse and install skills from the marketplace");
|
|
281
|
+
skills.command("search").description("Search skills in the marketplace").option("--q <query>", "Search query").option("--category <category>", "Filter by category").option("--sort <field>", "Sort field (createdAt|stars|installCount|name|relevance|updatedAt)").option("--order <order>", "Sort order (asc|desc)").option("--page <number>", "Page number", "1").option("--page-size <number>", "Items per page", "20").option("--locale <locale>", "Locale for content (e.g. en-US, zh-CN)").option("--output <format>", "Output format (text|json)", "text").action(async (options) => {
|
|
282
|
+
try {
|
|
283
|
+
const sdk = createSDK();
|
|
284
|
+
const result = await sdk.marketSkills.getSkillList({
|
|
285
|
+
category: options.category,
|
|
286
|
+
locale: options.locale,
|
|
287
|
+
order: options.order,
|
|
288
|
+
page: Number(options.page),
|
|
289
|
+
pageSize: Number(options.pageSize),
|
|
290
|
+
q: options.q,
|
|
291
|
+
sort: options.sort
|
|
292
|
+
});
|
|
293
|
+
if (options.output === "json") {
|
|
294
|
+
formatOutput("json", result);
|
|
295
|
+
return;
|
|
296
|
+
}
|
|
297
|
+
if (result.items.length === 0) {
|
|
298
|
+
console.log("No skills found.");
|
|
299
|
+
return;
|
|
300
|
+
}
|
|
301
|
+
const rows = result.items.map((item) => ({
|
|
302
|
+
description: item.description,
|
|
303
|
+
identifier: item.identifier,
|
|
304
|
+
installs: formatCount(item.installCount),
|
|
305
|
+
name: item.name,
|
|
306
|
+
stars: !!item.github?.stars ? formatCount(item.github.stars) : "-"
|
|
307
|
+
}));
|
|
308
|
+
const table = renderTable(
|
|
309
|
+
[
|
|
310
|
+
{ key: "identifier", label: "IDENTIFIER", maxWidth: 30 },
|
|
311
|
+
{ key: "name", label: "NAME", maxWidth: 20 },
|
|
312
|
+
{ key: "description", label: "DESCRIPTION", maxWidth: 40 },
|
|
313
|
+
{ key: "stars", label: "STARS" },
|
|
314
|
+
{ key: "installs", label: "INSTALLS" }
|
|
315
|
+
],
|
|
316
|
+
rows
|
|
317
|
+
);
|
|
318
|
+
console.log(table);
|
|
319
|
+
const start = (result.currentPage - 1) * result.pageSize + 1;
|
|
320
|
+
const end = start + result.items.length - 1;
|
|
321
|
+
console.log(`
|
|
322
|
+
Showing ${start}-${end} of ${result.totalCount} results`);
|
|
323
|
+
} catch (error) {
|
|
324
|
+
console.error(`Search failed: ${error.message}`);
|
|
325
|
+
process.exit(1);
|
|
326
|
+
}
|
|
327
|
+
});
|
|
328
|
+
skills.command("install <identifier>").description("Download a skill package").option("--version <version>", "Specific version to download").option("--output <path>", "Output file path (defaults to current directory)").action(async (identifier, options) => {
|
|
329
|
+
try {
|
|
330
|
+
const sdk = createSDK();
|
|
331
|
+
console.log(
|
|
332
|
+
`Downloading skill: ${identifier}${options.version ? `@${options.version}` : ""}...`
|
|
333
|
+
);
|
|
334
|
+
const { buffer, filename } = await sdk.marketSkills.downloadSkill(
|
|
335
|
+
identifier,
|
|
336
|
+
options.version
|
|
337
|
+
);
|
|
338
|
+
const outputPath = options.output || resolve(process.cwd(), filename);
|
|
339
|
+
writeFileSync(outputPath, Buffer.from(buffer));
|
|
340
|
+
console.log(`Saved to ${outputPath} (${buffer.byteLength} bytes)`);
|
|
341
|
+
} catch (error) {
|
|
342
|
+
console.error(`Install failed: ${error.message}`);
|
|
343
|
+
process.exit(1);
|
|
344
|
+
}
|
|
345
|
+
});
|
|
346
|
+
}
|
|
347
|
+
|
|
228
348
|
// src/cli.ts
|
|
229
|
-
var require3 = createRequire2(import.meta.url);
|
|
230
|
-
var pkg2 = require3("../package.json");
|
|
231
349
|
var program = new Command();
|
|
232
|
-
program.name("lobehub-market").description("LobeHub Market CLI - Device registration and auth management").version(
|
|
350
|
+
program.name("lobehub-market").description("LobeHub Market CLI - Device registration and auth management").version("0.0.6");
|
|
233
351
|
registerRegisterCommand(program);
|
|
234
352
|
registerAuthCommand(program);
|
|
353
|
+
registerSkillsCommand(program);
|
|
235
354
|
program.parse();
|