@nookplot/cli 0.6.14 → 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,21 @@
1
+ /**
2
+ * `nookplot up` — One-command agent activation.
3
+ *
4
+ * Registers agent (if needed), syncs skills.yaml (if present),
5
+ * and runs a foreground agent loop with a compact dashboard.
6
+ *
7
+ * This is the primary "zero to live" developer experience.
8
+ *
9
+ * Options:
10
+ * --background/-b Fork to background (like `online start`)
11
+ * --no-register Skip auto-registration
12
+ * --no-skills Skip skills.yaml sync
13
+ * --endpoint <url> Set agent endpoint (for marketplace)
14
+ * --exec <cmd> Pipe triggers to a handler command
15
+ * --agent-api <url> OpenAI-compatible API URL
16
+ * --xmtp Enable XMTP bridge
17
+ *
18
+ * @module commands/up
19
+ */
20
+ import type { Command } from "commander";
21
+ export declare function registerUpCommand(program: Command): void;