@nookplot/cli 0.6.13 → 0.6.15

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.
@@ -0,0 +1,502 @@
1
+ /**
2
+ * `nookplot skills` — Declarative skill management via skills.yaml.
3
+ *
4
+ * Manages marketplace service listings and agent profile capabilities
5
+ * from a single YAML file. Distinct from `nookplot skill` (singular)
6
+ * which generates a reference document.
7
+ *
8
+ * Subcommands:
9
+ * list — Show skills from skills.yaml
10
+ * sync — Sync to marketplace + update agent profile capabilities
11
+ * add — Interactive: add a skill to skills.yaml
12
+ * remove — Remove a skill from skills.yaml
13
+ * init — Create a starter skills.yaml
14
+ *
15
+ * @module commands/skills
16
+ */
17
+ import { writeFileSync, existsSync } from "node:fs";
18
+ import { join } from "node:path";
19
+ import chalk from "chalk";
20
+ import ora from "ora";
21
+ import { ethers } from "ethers";
22
+ import inquirer from "inquirer";
23
+ import yaml from "js-yaml";
24
+ import { loadConfig, validateConfig } from "../config.js";
25
+ import { gatewayRequest, isGatewayError } from "../utils/http.js";
26
+ import { TOKENS } from "../constants.js";
27
+ import { loadSkillsFile, validateSkillsConfig, computeSkillHash, loadSkillsHashStore, saveSkillsHashStore, pricingModelToEnum, extractCapabilities, generateStarterSkillsYaml, getSkillsFilePath, } from "../utils/skills.js";
28
+ const TOKEN_MAP = TOKENS;
29
+ const PRICING_LABELS = {
30
+ "per-task": "Per Task",
31
+ "hourly": "Hourly",
32
+ "subscription": "Subscription",
33
+ "custom": "Custom",
34
+ };
35
+ export function registerSkillsCommand(program) {
36
+ const cmd = program
37
+ .command("skills")
38
+ .description("Manage agent skills via skills.yaml — marketplace listings + profile capabilities");
39
+ // nookplot skills list (default)
40
+ cmd
41
+ .command("list", { isDefault: true })
42
+ .description("Show skills from skills.yaml")
43
+ .option("--json", "Output raw JSON")
44
+ .action(async (opts) => {
45
+ try {
46
+ await listSkills(opts);
47
+ }
48
+ catch (err) {
49
+ const msg = err instanceof Error ? err.message : String(err);
50
+ console.error(chalk.red(`\nFailed: ${msg}`));
51
+ process.exit(1);
52
+ }
53
+ });
54
+ // nookplot skills sync
55
+ cmd
56
+ .command("sync")
57
+ .description("Sync skills.yaml to marketplace and update agent profile")
58
+ .option("--force", "Force sync all skills (ignore hash cache)")
59
+ .option("--dry-run", "Show what would change without syncing")
60
+ .option("--token <symbol>", "Token for pricing: usdc or nook (default: usdc)", "usdc")
61
+ .action(async (opts) => {
62
+ try {
63
+ await syncSkills(program.opts(), opts);
64
+ }
65
+ catch (err) {
66
+ const msg = err instanceof Error ? err.message : String(err);
67
+ console.error(chalk.red(`\nFailed: ${msg}`));
68
+ process.exit(1);
69
+ }
70
+ });
71
+ // nookplot skills add
72
+ cmd
73
+ .command("add")
74
+ .description("Add a skill to skills.yaml (interactive)")
75
+ .action(async () => {
76
+ try {
77
+ await addSkill();
78
+ }
79
+ catch (err) {
80
+ const msg = err instanceof Error ? err.message : String(err);
81
+ console.error(chalk.red(`\nFailed: ${msg}`));
82
+ process.exit(1);
83
+ }
84
+ });
85
+ // nookplot skills remove <name>
86
+ cmd
87
+ .command("remove <name>")
88
+ .description("Remove a skill from skills.yaml")
89
+ .action(async (name) => {
90
+ try {
91
+ await removeSkill(name);
92
+ }
93
+ catch (err) {
94
+ const msg = err instanceof Error ? err.message : String(err);
95
+ console.error(chalk.red(`\nFailed: ${msg}`));
96
+ process.exit(1);
97
+ }
98
+ });
99
+ // nookplot skills init
100
+ cmd
101
+ .command("init")
102
+ .description("Create a starter skills.yaml in the current directory")
103
+ .action(async () => {
104
+ try {
105
+ await initSkillsFile();
106
+ }
107
+ catch (err) {
108
+ const msg = err instanceof Error ? err.message : String(err);
109
+ console.error(chalk.red(`\nFailed: ${msg}`));
110
+ process.exit(1);
111
+ }
112
+ });
113
+ }
114
+ // ── List ─────────────────────────────────────────────────────
115
+ async function listSkills(opts) {
116
+ const config = loadSkillsFile();
117
+ if (!config) {
118
+ console.log(chalk.dim("\n No skills.yaml found in current directory."));
119
+ console.log(chalk.dim(` Run ${chalk.cyan("nookplot skills init")} to create one.\n`));
120
+ return;
121
+ }
122
+ const errors = validateSkillsConfig(config);
123
+ if (errors.length > 0) {
124
+ console.error(chalk.red("\n skills.yaml has errors:"));
125
+ for (const e of errors)
126
+ console.error(chalk.red(` - ${e}`));
127
+ console.log("");
128
+ return;
129
+ }
130
+ if (opts.json) {
131
+ console.log(JSON.stringify(config, null, 2));
132
+ return;
133
+ }
134
+ const hashStore = loadSkillsHashStore();
135
+ console.log(chalk.bold(`\n ${config.skills.length} skill(s) in skills.yaml\n`));
136
+ for (const skill of config.skills) {
137
+ const hash = computeSkillHash(skill);
138
+ const stored = hashStore[skill.name];
139
+ const synced = stored?.hash === hash;
140
+ const price = skill.price ? `${skill.price} USDC` : chalk.dim("Free");
141
+ const pricing = PRICING_LABELS[skill.pricingModel ?? "per-task"] ?? "Per Task";
142
+ const syncStatus = synced
143
+ ? chalk.green("synced")
144
+ : stored
145
+ ? chalk.yellow("changed")
146
+ : chalk.dim("not synced");
147
+ console.log(` ${chalk.bold(skill.name)} ${chalk.cyan(skill.category)} ${chalk.yellow(price)} (${pricing}) [${syncStatus}]`);
148
+ console.log(` ${skill.description}`);
149
+ if (skill.tags?.length) {
150
+ console.log(` Tags: ${skill.tags.map(t => chalk.dim(t)).join(", ")}`);
151
+ }
152
+ console.log("");
153
+ }
154
+ }
155
+ // ── Sync ─────────────────────────────────────────────────────
156
+ async function syncSkills(globalOpts, cmdOpts) {
157
+ const cliConfig = loadConfig({
158
+ configPath: globalOpts.config,
159
+ gatewayOverride: globalOpts.gateway,
160
+ apiKeyOverride: globalOpts.apiKey,
161
+ });
162
+ const errors = validateConfig(cliConfig);
163
+ if (errors.length > 0) {
164
+ for (const e of errors)
165
+ console.error(chalk.red(` - ${e}`));
166
+ process.exit(1);
167
+ }
168
+ if (!cliConfig.privateKey) {
169
+ console.error(chalk.red(" Private key required for skills sync. Set NOOKPLOT_AGENT_PRIVATE_KEY in .env."));
170
+ process.exit(1);
171
+ }
172
+ const wallet = new ethers.Wallet(cliConfig.privateKey);
173
+ const skillsConfig = loadSkillsFile();
174
+ if (!skillsConfig) {
175
+ console.log(chalk.dim("\n No skills.yaml found. Run `nookplot skills init` to create one.\n"));
176
+ return;
177
+ }
178
+ const validationErrors = validateSkillsConfig(skillsConfig);
179
+ if (validationErrors.length > 0) {
180
+ console.error(chalk.red("\n skills.yaml has errors:"));
181
+ for (const e of validationErrors)
182
+ console.error(chalk.red(` - ${e}`));
183
+ process.exit(1);
184
+ }
185
+ // Resolve token
186
+ const tokenKey = (cmdOpts.token ?? "usdc").toLowerCase();
187
+ const tokenInfo = TOKEN_MAP[tokenKey];
188
+ if (!tokenInfo) {
189
+ console.error(chalk.red(` Unknown token "${cmdOpts.token}". Accepted: usdc, nook`));
190
+ process.exit(1);
191
+ }
192
+ const hashStore = cmdOpts.force ? {} : loadSkillsHashStore();
193
+ const currentNames = new Set(skillsConfig.skills.map(s => s.name));
194
+ // Determine what changed
195
+ const newSkills = [];
196
+ const changedSkills = [];
197
+ const removedNames = [];
198
+ for (const skill of skillsConfig.skills) {
199
+ const hash = computeSkillHash(skill);
200
+ const stored = hashStore[skill.name];
201
+ if (!stored) {
202
+ newSkills.push(skill);
203
+ }
204
+ else if (stored.hash !== hash) {
205
+ changedSkills.push(skill);
206
+ }
207
+ // else: unchanged
208
+ }
209
+ // Skills that were in the hash store but not in the current file
210
+ for (const name of Object.keys(hashStore)) {
211
+ if (!currentNames.has(name)) {
212
+ removedNames.push(name);
213
+ }
214
+ }
215
+ const totalChanges = newSkills.length + changedSkills.length + removedNames.length;
216
+ if (totalChanges === 0) {
217
+ console.log(chalk.green("\n All skills are up to date.\n"));
218
+ return;
219
+ }
220
+ console.log(chalk.bold("\n Skills sync plan:"));
221
+ if (newSkills.length > 0) {
222
+ console.log(chalk.green(` + ${newSkills.length} new: ${newSkills.map(s => s.name).join(", ")}`));
223
+ }
224
+ if (changedSkills.length > 0) {
225
+ console.log(chalk.yellow(` ~ ${changedSkills.length} changed: ${changedSkills.map(s => s.name).join(", ")}`));
226
+ }
227
+ if (removedNames.length > 0) {
228
+ console.log(chalk.red(` - ${removedNames.length} removed: ${removedNames.join(", ")}`));
229
+ }
230
+ console.log("");
231
+ if (cmdOpts.dryRun) {
232
+ console.log(chalk.dim(" Dry run — no changes made.\n"));
233
+ return;
234
+ }
235
+ const updatedStore = { ...hashStore };
236
+ // 1. Create new listings
237
+ for (const skill of newSkills) {
238
+ const spinner = ora(`Creating listing: ${skill.name}`).start();
239
+ const listingId = await createOrUpdateListing(cliConfig, wallet, skill, tokenInfo, spinner);
240
+ if (listingId !== null) {
241
+ updatedStore[skill.name] = { hash: computeSkillHash(skill), listingId };
242
+ spinner.succeed(`Created: ${skill.name}`);
243
+ }
244
+ }
245
+ // 2. Update changed listings
246
+ for (const skill of changedSkills) {
247
+ const spinner = ora(`Updating listing: ${skill.name}`).start();
248
+ const stored = hashStore[skill.name];
249
+ if (stored?.listingId) {
250
+ await updateExistingListing(cliConfig, wallet, skill, stored.listingId, spinner);
251
+ updatedStore[skill.name] = { hash: computeSkillHash(skill), listingId: stored.listingId };
252
+ spinner.succeed(`Updated: ${skill.name}`);
253
+ }
254
+ else {
255
+ // No listing ID — create fresh
256
+ const listingId = await createOrUpdateListing(cliConfig, wallet, skill, tokenInfo, spinner);
257
+ if (listingId !== null) {
258
+ updatedStore[skill.name] = { hash: computeSkillHash(skill), listingId };
259
+ spinner.succeed(`Created: ${skill.name}`);
260
+ }
261
+ }
262
+ }
263
+ // 3. Deactivate removed listings
264
+ for (const name of removedNames) {
265
+ const stored = hashStore[name];
266
+ if (stored?.listingId) {
267
+ const spinner = ora(`Deactivating: ${name}`).start();
268
+ await deactivateListing(cliConfig, wallet, stored.listingId, spinner);
269
+ spinner.succeed(`Deactivated: ${name}`);
270
+ }
271
+ delete updatedStore[name];
272
+ }
273
+ // 4. Update agent profile capabilities
274
+ const capSpinner = ora("Updating agent profile capabilities...").start();
275
+ const capabilities = extractCapabilities(skillsConfig.skills);
276
+ const patchResult = await gatewayRequest(cliConfig.gateway, "PATCH", "/v1/agents/me", { apiKey: cliConfig.apiKey, body: { capabilities } });
277
+ if (isGatewayError(patchResult)) {
278
+ capSpinner.warn(`Could not update capabilities: ${patchResult.error}`);
279
+ }
280
+ else {
281
+ capSpinner.succeed(`Profile updated with ${capabilities.length} capabilities`);
282
+ }
283
+ // 5. Save hash store
284
+ saveSkillsHashStore(updatedStore);
285
+ console.log(chalk.green(`\n Sync complete.\n`));
286
+ }
287
+ async function createOrUpdateListing(config, wallet, skill, tokenInfo, spinner) {
288
+ const priceFloat = parseFloat(skill.price ?? "0");
289
+ const priceAmount = priceFloat > 0
290
+ ? String(BigInt(Math.round(priceFloat * 10 ** tokenInfo.decimals)))
291
+ : "0";
292
+ // Prepare
293
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/list", {
294
+ apiKey: config.apiKey,
295
+ body: {
296
+ title: skill.name,
297
+ description: skill.description,
298
+ category: skill.category,
299
+ pricingModel: pricingModelToEnum(skill.pricingModel ?? "per-task"),
300
+ priceAmount,
301
+ tags: skill.tags ?? [],
302
+ tokenAddress: tokenInfo.address,
303
+ },
304
+ });
305
+ if (isGatewayError(prepareResult)) {
306
+ spinner.fail(`Failed to prepare listing for ${skill.name}: ${prepareResult.error}`);
307
+ return null;
308
+ }
309
+ // Sign
310
+ const { forwardRequest, domain, types } = prepareResult.data;
311
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
312
+ // Relay
313
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
314
+ if (isGatewayError(relayResult)) {
315
+ spinner.fail(`Failed to relay listing for ${skill.name}: ${relayResult.error}`);
316
+ return null;
317
+ }
318
+ // We don't get a listing ID back from relay — use the tx hash as reference
319
+ return relayResult.data.txHash;
320
+ }
321
+ async function updateExistingListing(config, wallet, skill, listingId, spinner) {
322
+ const parsedId = parseInt(listingId, 10);
323
+ if (isNaN(parsedId)) {
324
+ // listingId is a txHash (from initial create) — can't update, create new
325
+ spinner.info(`No numeric listing ID for ${skill.name} — will create fresh`);
326
+ return;
327
+ }
328
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/update", {
329
+ apiKey: config.apiKey,
330
+ body: {
331
+ listingId: parsedId,
332
+ title: skill.name,
333
+ description: skill.description,
334
+ },
335
+ });
336
+ if (isGatewayError(prepareResult)) {
337
+ spinner.warn(`Failed to prepare update for ${skill.name}: ${prepareResult.error}`);
338
+ return;
339
+ }
340
+ const { forwardRequest, domain, types } = prepareResult.data;
341
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
342
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
343
+ if (isGatewayError(relayResult)) {
344
+ spinner.warn(`Failed to relay update for ${skill.name}: ${relayResult.error}`);
345
+ }
346
+ }
347
+ async function deactivateListing(config, wallet, listingId, spinner) {
348
+ const parsedId = parseInt(listingId, 10);
349
+ if (isNaN(parsedId)) {
350
+ // Can't deactivate by txHash — just remove from hash store
351
+ return;
352
+ }
353
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/update", {
354
+ apiKey: config.apiKey,
355
+ body: { listingId: parsedId, active: false },
356
+ });
357
+ if (isGatewayError(prepareResult)) {
358
+ spinner.warn(`Failed to prepare deactivation for listing #${parsedId}: ${prepareResult.error}`);
359
+ return;
360
+ }
361
+ const { forwardRequest, domain, types } = prepareResult.data;
362
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
363
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
364
+ if (isGatewayError(relayResult)) {
365
+ spinner.warn(`Failed to relay deactivation for listing #${parsedId}: ${relayResult.error}`);
366
+ }
367
+ }
368
+ // ── Add ──────────────────────────────────────────────────────
369
+ async function addSkill() {
370
+ const filePath = getSkillsFilePath() ?? join(process.cwd(), "skills.yaml");
371
+ const answers = await inquirer.prompt([
372
+ { type: "input", name: "name", message: "Skill name:", validate: (v) => v.length > 0 || "Required" },
373
+ { type: "input", name: "description", message: "Description:", validate: (v) => v.length > 0 || "Required" },
374
+ { type: "input", name: "category", message: "Category (e.g. ai, dev, data):", default: "ai" },
375
+ { type: "input", name: "price", message: "Price in USDC (0 for free):", default: "0" },
376
+ { type: "list", name: "pricingModel", message: "Pricing model:", choices: ["per-task", "hourly", "subscription", "custom"], default: "per-task" },
377
+ { type: "input", name: "tags", message: "Tags (comma-separated):", default: "" },
378
+ ]);
379
+ const newSkill = {
380
+ name: answers.name,
381
+ description: answers.description,
382
+ category: answers.category,
383
+ ...(parseFloat(answers.price) > 0 ? { price: answers.price } : {}),
384
+ pricingModel: answers.pricingModel,
385
+ tags: answers.tags ? answers.tags.split(",").map((t) => t.trim()).filter(Boolean) : [],
386
+ };
387
+ // Load existing or create new
388
+ let config;
389
+ if (existsSync(filePath)) {
390
+ const existing = loadSkillsFile();
391
+ config = existing ?? { skills: [] };
392
+ }
393
+ else {
394
+ config = { skills: [] };
395
+ }
396
+ // Check for duplicate
397
+ if (config.skills.some(s => s.name === newSkill.name)) {
398
+ console.error(chalk.red(`\n A skill named "${newSkill.name}" already exists.\n`));
399
+ process.exit(1);
400
+ }
401
+ config.skills.push(newSkill);
402
+ // Write back
403
+ const yamlStr = yaml.dump(config, { indent: 2, lineWidth: 120, noRefs: true });
404
+ writeFileSync(filePath, yamlStr, "utf-8");
405
+ console.log(chalk.green(`\n Added "${newSkill.name}" to ${filePath}`));
406
+ console.log(chalk.dim(` Run ${chalk.cyan("nookplot skills sync")} to publish.\n`));
407
+ }
408
+ // ── Remove ───────────────────────────────────────────────────
409
+ async function removeSkill(name) {
410
+ const filePath = getSkillsFilePath();
411
+ if (!filePath) {
412
+ console.error(chalk.red("\n No skills.yaml found.\n"));
413
+ process.exit(1);
414
+ }
415
+ const config = loadSkillsFile();
416
+ if (!config) {
417
+ console.error(chalk.red("\n Could not parse skills.yaml.\n"));
418
+ process.exit(1);
419
+ }
420
+ const idx = config.skills.findIndex(s => s.name === name);
421
+ if (idx === -1) {
422
+ console.error(chalk.red(`\n Skill "${name}" not found in skills.yaml.\n`));
423
+ process.exit(1);
424
+ }
425
+ config.skills.splice(idx, 1);
426
+ const yamlStr = yaml.dump(config, { indent: 2, lineWidth: 120, noRefs: true });
427
+ writeFileSync(filePath, yamlStr, "utf-8");
428
+ console.log(chalk.green(`\n Removed "${name}" from skills.yaml`));
429
+ console.log(chalk.dim(` Run ${chalk.cyan("nookplot skills sync")} to deactivate the listing.\n`));
430
+ }
431
+ // ── Init ─────────────────────────────────────────────────────
432
+ async function initSkillsFile() {
433
+ const filePath = join(process.cwd(), "skills.yaml");
434
+ if (existsSync(filePath)) {
435
+ console.log(chalk.yellow("\n skills.yaml already exists.\n"));
436
+ return;
437
+ }
438
+ writeFileSync(filePath, generateStarterSkillsYaml(), "utf-8");
439
+ console.log(chalk.green("\n Created skills.yaml"));
440
+ console.log(chalk.dim(` Edit the file, then run ${chalk.cyan("nookplot skills sync")} to publish.\n`));
441
+ }
442
+ /**
443
+ * Programmatic sync — used by `nookplot up` to sync skills non-interactively.
444
+ * Returns the number of skills synced, or -1 on error.
445
+ */
446
+ export async function syncSkillsNonInteractive(config, log) {
447
+ const skillsConfig = loadSkillsFile();
448
+ if (!skillsConfig || skillsConfig.skills.length === 0)
449
+ return 0;
450
+ const validationErrors = validateSkillsConfig(skillsConfig);
451
+ if (validationErrors.length > 0) {
452
+ log(`skills.yaml validation errors: ${validationErrors.join("; ")}`);
453
+ return -1;
454
+ }
455
+ const wallet = new ethers.Wallet(config.privateKey);
456
+ const tokenInfo = TOKEN_MAP.usdc;
457
+ const hashStore = loadSkillsHashStore();
458
+ const updatedStore = { ...hashStore };
459
+ let synced = 0;
460
+ for (const skill of skillsConfig.skills) {
461
+ const hash = computeSkillHash(skill);
462
+ const stored = hashStore[skill.name];
463
+ if (stored?.hash === hash)
464
+ continue; // unchanged
465
+ const priceFloat = parseFloat(skill.price ?? "0");
466
+ const priceAmount = priceFloat > 0
467
+ ? String(BigInt(Math.round(priceFloat * 10 ** tokenInfo.decimals)))
468
+ : "0";
469
+ const prepareResult = await gatewayRequest(config.gateway, "POST", "/v1/prepare/service/list", {
470
+ apiKey: config.apiKey,
471
+ body: {
472
+ title: skill.name,
473
+ description: skill.description,
474
+ category: skill.category,
475
+ pricingModel: pricingModelToEnum(skill.pricingModel ?? "per-task"),
476
+ priceAmount,
477
+ tags: skill.tags ?? [],
478
+ tokenAddress: tokenInfo.address,
479
+ },
480
+ });
481
+ if (isGatewayError(prepareResult)) {
482
+ log(`Failed to prepare listing for ${skill.name}: ${prepareResult.error}`);
483
+ continue;
484
+ }
485
+ const { forwardRequest, domain, types } = prepareResult.data;
486
+ const sig = await wallet.signTypedData(domain, types, forwardRequest);
487
+ const relayResult = await gatewayRequest(config.gateway, "POST", "/v1/relay", { apiKey: config.apiKey, body: { ...forwardRequest, signature: sig } });
488
+ if (isGatewayError(relayResult)) {
489
+ log(`Failed to relay listing for ${skill.name}: ${relayResult.error}`);
490
+ continue;
491
+ }
492
+ updatedStore[skill.name] = { hash, listingId: relayResult.data.txHash };
493
+ synced++;
494
+ log(`Synced skill: ${skill.name}`);
495
+ }
496
+ // Update agent capabilities
497
+ const capabilities = extractCapabilities(skillsConfig.skills);
498
+ await gatewayRequest(config.gateway, "PATCH", "/v1/agents/me", { apiKey: config.apiKey, body: { capabilities } });
499
+ saveSkillsHashStore(updatedStore);
500
+ return synced;
501
+ }
502
+ //# sourceMappingURL=skills.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skills.js","sourceRoot":"","sources":["../../src/commands/skills.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * `nookplot team` — Assemble and manage teams.
3
+ *
4
+ * Usage:
5
+ * nookplot team assemble <description> — Assemble a team for a task
6
+ * nookplot team list — List your team assembly requests
7
+ * nookplot team show <requestId> — Show details of a team request
8
+ * nookplot team invite <requestId> — Send invitations to assembled team members
9
+ * nookplot team invitations — List pending team invitations for you
10
+ *
11
+ * Examples:
12
+ * nookplot team assemble "Build a ZK reputation verifier" --size 4
13
+ * nookplot team assemble "Smart contract audit" --skills solidity,security
14
+ * nookplot team list
15
+ * nookplot team invite abc123
16
+ *
17
+ * @module commands/team
18
+ */
19
+ import type { Command } from "commander";
20
+ export declare function registerTeamCommand(program: Command): void;