@moonpay/cli 0.2.4 → 0.3.0

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/index.js CHANGED
@@ -331,17 +331,17 @@ var require_nacl_fast = __commonJS({
331
331
  }
332
332
  var sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);
333
333
  function crypto_stream_salsa20_xor(c, cpos, m, mpos, b, n, k) {
334
- var z9 = new Uint8Array(16), x = new Uint8Array(64);
334
+ var z12 = new Uint8Array(16), x = new Uint8Array(64);
335
335
  var u, i;
336
- for (i = 0; i < 16; i++) z9[i] = 0;
337
- for (i = 0; i < 8; i++) z9[i] = n[i];
336
+ for (i = 0; i < 16; i++) z12[i] = 0;
337
+ for (i = 0; i < 8; i++) z12[i] = n[i];
338
338
  while (b >= 64) {
339
- crypto_core_salsa20(x, z9, k, sigma);
339
+ crypto_core_salsa20(x, z12, k, sigma);
340
340
  for (i = 0; i < 64; i++) c[cpos + i] = m[mpos + i] ^ x[i];
341
341
  u = 1;
342
342
  for (i = 8; i < 16; i++) {
343
- u = u + (z9[i] & 255) | 0;
344
- z9[i] = u & 255;
343
+ u = u + (z12[i] & 255) | 0;
344
+ z12[i] = u & 255;
345
345
  u >>>= 8;
346
346
  }
347
347
  b -= 64;
@@ -349,30 +349,30 @@ var require_nacl_fast = __commonJS({
349
349
  mpos += 64;
350
350
  }
351
351
  if (b > 0) {
352
- crypto_core_salsa20(x, z9, k, sigma);
352
+ crypto_core_salsa20(x, z12, k, sigma);
353
353
  for (i = 0; i < b; i++) c[cpos + i] = m[mpos + i] ^ x[i];
354
354
  }
355
355
  return 0;
356
356
  }
357
357
  function crypto_stream_salsa20(c, cpos, b, n, k) {
358
- var z9 = new Uint8Array(16), x = new Uint8Array(64);
358
+ var z12 = new Uint8Array(16), x = new Uint8Array(64);
359
359
  var u, i;
360
- for (i = 0; i < 16; i++) z9[i] = 0;
361
- for (i = 0; i < 8; i++) z9[i] = n[i];
360
+ for (i = 0; i < 16; i++) z12[i] = 0;
361
+ for (i = 0; i < 8; i++) z12[i] = n[i];
362
362
  while (b >= 64) {
363
- crypto_core_salsa20(x, z9, k, sigma);
363
+ crypto_core_salsa20(x, z12, k, sigma);
364
364
  for (i = 0; i < 64; i++) c[cpos + i] = x[i];
365
365
  u = 1;
366
366
  for (i = 8; i < 16; i++) {
367
- u = u + (z9[i] & 255) | 0;
368
- z9[i] = u & 255;
367
+ u = u + (z12[i] & 255) | 0;
368
+ z12[i] = u & 255;
369
369
  u >>>= 8;
370
370
  }
371
371
  b -= 64;
372
372
  cpos += 64;
373
373
  }
374
374
  if (b > 0) {
375
- crypto_core_salsa20(x, z9, k, sigma);
375
+ crypto_core_salsa20(x, z12, k, sigma);
376
376
  for (i = 0; i < b; i++) c[cpos + i] = x[i];
377
377
  }
378
378
  return 0;
@@ -1252,12 +1252,12 @@ var require_nacl_fast = __commonJS({
1252
1252
  for (a = 0; a < 16; a++) o[a] = c[a];
1253
1253
  }
1254
1254
  function crypto_scalarmult(q, n, p) {
1255
- var z9 = new Uint8Array(32);
1255
+ var z12 = new Uint8Array(32);
1256
1256
  var x = new Float64Array(80), r, i;
1257
1257
  var a = gf(), b = gf(), c = gf(), d = gf(), e = gf(), f = gf();
1258
- for (i = 0; i < 31; i++) z9[i] = n[i];
1259
- z9[31] = n[31] & 127 | 64;
1260
- z9[0] &= 248;
1258
+ for (i = 0; i < 31; i++) z12[i] = n[i];
1259
+ z12[31] = n[31] & 127 | 64;
1260
+ z12[0] &= 248;
1261
1261
  unpack25519(x, p);
1262
1262
  for (i = 0; i < 16; i++) {
1263
1263
  b[i] = x[i];
@@ -1265,7 +1265,7 @@ var require_nacl_fast = __commonJS({
1265
1265
  }
1266
1266
  a[0] = d[0] = 1;
1267
1267
  for (i = 254; i >= 0; --i) {
1268
- r = z9[i >>> 3] >>> (i & 7) & 1;
1268
+ r = z12[i >>> 3] >>> (i & 7) & 1;
1269
1269
  sel25519(a, b, r);
1270
1270
  sel25519(c, d, r);
1271
1271
  A(e, a, c);
@@ -2282,7 +2282,7 @@ var CONFIG_PATH = path.join(CONFIG_DIR, "config.json");
2282
2282
  var CREDENTIALS_PATH = path.join(CONFIG_DIR, "credentials.json");
2283
2283
  var LOCK_PATH = path.join(CONFIG_DIR, ".credentials.lock");
2284
2284
  var CALLBACK_PORT = 3847;
2285
- var CALLBACK_URL = `http://127.0.0.1:${CALLBACK_PORT}/callback`;
2285
+ var CALLBACK_URL = `http://localhost:${CALLBACK_PORT}/callback`;
2286
2286
  var DEFAULT_CONFIG = {
2287
2287
  baseUrl: "https://agents.moonpay.com",
2288
2288
  clientId: "mooniq_zin3s5jz3olzkdfxpmbeaogv"
@@ -2423,7 +2423,7 @@ async function login(config) {
2423
2423
  } else if (code2) {
2424
2424
  res.writeHead(200, { "Content-Type": "text/html" });
2425
2425
  res.end(
2426
- `<!DOCTYPE html><html><head><meta charset="utf-8"><title>MoonPay Agents</title></head><body style="font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa"><img src="https://agents.moonpay.com/logo.png" alt="MoonPay" style="width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem" /><h1 style="margin:0 0 0.5rem;font-size:1.5rem;font-weight:600">Your agent has money now.</h1><p style="color:#a1a1aa;margin:0;font-size:1rem">You can close this tab and return to the terminal.</p></body></html>`
2426
+ `<!DOCTYPE html><html><head><meta charset="utf-8"><title>MoonPay Agents</title></head><body style="font-family:system-ui,-apple-system,sans-serif;display:flex;flex-direction:column;align-items:center;justify-content:center;min-height:100vh;margin:0;padding:2rem;text-align:center;background:#0a0a0a;color:#fafafa"><img src="https://agents.moonpay.com/logos/moonpay.jpg" alt="MoonPay" style="width:64px;height:64px;border-radius:16px;margin-bottom:1.5rem" /><h1 style="margin:0 0 0.5rem;font-size:1.5rem;font-weight:600">Your agent has money now.</h1><p style="color:#a1a1aa;margin:0;font-size:1rem">You can close this tab and return to the terminal.</p></body></html>`
2427
2427
  );
2428
2428
  resolveCallback(code2);
2429
2429
  } else {
@@ -4310,6 +4310,115 @@ var messageSign = createTool(messageSignSchema, async (params) => {
4310
4310
  return { signature: bs584.encode(signatureBytes) };
4311
4311
  });
4312
4312
 
4313
+ // src/tools/skill/server.ts
4314
+ import { readdirSync as readdirSync3, readFileSync as readFileSync5, existsSync as existsSync3, mkdirSync as mkdirSync4, cpSync } from "fs";
4315
+ import { join as join5, dirname } from "path";
4316
+ import { homedir as homedir4 } from "os";
4317
+ import { fileURLToPath } from "url";
4318
+ function getSkillsDir() {
4319
+ const __filename = fileURLToPath(import.meta.url);
4320
+ const distDir = dirname(__filename);
4321
+ return join5(distDir, "..", "skills");
4322
+ }
4323
+ function getClaudeSkillsDir() {
4324
+ return join5(homedir4(), ".claude", "skills");
4325
+ }
4326
+ function listBundledSkills() {
4327
+ const dir = getSkillsDir();
4328
+ if (!existsSync3(dir)) return [];
4329
+ return readdirSync3(dir, { withFileTypes: true }).filter((e) => e.isDirectory() && e.name.startsWith("moonpay-")).map((e) => {
4330
+ const md = readFileSync5(join5(dir, e.name, "SKILL.md"), "utf-8");
4331
+ const descMatch = md.match(/^description:\s*(.+)$/m);
4332
+ return {
4333
+ name: e.name,
4334
+ description: descMatch?.[1]?.replace(/^["']|["']$/g, "") ?? ""
4335
+ };
4336
+ }).sort((a, b) => a.name.localeCompare(b.name));
4337
+ }
4338
+ function readSkill(name) {
4339
+ const skillPath = join5(getSkillsDir(), name, "SKILL.md");
4340
+ if (!existsSync3(skillPath)) {
4341
+ throw new Error(`Skill "${name}" not found. Run \`mp skill list\` to see available skills.`);
4342
+ }
4343
+ return readFileSync5(skillPath, "utf-8");
4344
+ }
4345
+ function installSkills(force) {
4346
+ const srcDir = getSkillsDir();
4347
+ const destDir = getClaudeSkillsDir();
4348
+ const skills = listBundledSkills();
4349
+ mkdirSync4(destDir, { recursive: true });
4350
+ return skills.map((s) => {
4351
+ const dest = join5(destDir, s.name);
4352
+ if (existsSync3(dest) && !force) {
4353
+ return { name: s.name, installed: false };
4354
+ }
4355
+ cpSync(join5(srcDir, s.name), dest, { recursive: true, force: true });
4356
+ return { name: s.name, installed: true };
4357
+ });
4358
+ }
4359
+
4360
+ // src/tools/skill/list/schema.ts
4361
+ import { z as z9 } from "zod";
4362
+ var skillListSchema = defineToolSchema({
4363
+ name: "skill_list",
4364
+ description: "List available AI skills for Claude Code and other agents",
4365
+ input: z9.object({}),
4366
+ output: z9.array(
4367
+ z9.object({
4368
+ name: z9.string(),
4369
+ description: z9.string()
4370
+ })
4371
+ )
4372
+ });
4373
+
4374
+ // src/tools/skill/list/tool.ts
4375
+ var skillList = createTool(skillListSchema, async () => {
4376
+ return listBundledSkills();
4377
+ });
4378
+
4379
+ // src/tools/skill/retrieve/schema.ts
4380
+ import { z as z10 } from "zod";
4381
+ var skillRetrieveSchema = defineToolSchema({
4382
+ name: "skill_retrieve",
4383
+ description: "Get the full instructions for a specific skill",
4384
+ input: z10.object({
4385
+ name: z10.string().describe("Skill name (e.g. moonpay-swap-tokens)")
4386
+ }),
4387
+ output: z10.object({
4388
+ name: z10.string(),
4389
+ content: z10.string()
4390
+ })
4391
+ });
4392
+
4393
+ // src/tools/skill/retrieve/tool.ts
4394
+ var skillRetrieve = createTool(skillRetrieveSchema, async (params) => {
4395
+ return {
4396
+ name: params.name,
4397
+ content: readSkill(params.name)
4398
+ };
4399
+ });
4400
+
4401
+ // src/tools/skill/install/schema.ts
4402
+ import { z as z11 } from "zod";
4403
+ var skillInstallSchema = defineToolSchema({
4404
+ name: "skill_install",
4405
+ description: "Install AI skills to ~/.claude/skills/ for Claude Code",
4406
+ input: z11.object({
4407
+ force: z11.boolean().describe("Overwrite existing skills")
4408
+ }),
4409
+ output: z11.array(
4410
+ z11.object({
4411
+ name: z11.string(),
4412
+ installed: z11.boolean()
4413
+ })
4414
+ )
4415
+ });
4416
+
4417
+ // src/tools/skill/install/tool.ts
4418
+ var skillInstall = createTool(skillInstallSchema, async (params) => {
4419
+ return installSkills(params.force);
4420
+ });
4421
+
4313
4422
  // src/index.ts
4314
4423
  var LOCAL_TOOLS = [
4315
4424
  walletCreate,
@@ -4318,14 +4427,17 @@ var LOCAL_TOOLS = [
4318
4427
  walletRetrieve,
4319
4428
  walletDelete,
4320
4429
  transactionSign,
4321
- messageSign
4430
+ messageSign,
4431
+ skillList,
4432
+ skillRetrieve,
4433
+ skillInstall
4322
4434
  ];
4323
4435
  var require2 = createRequire(import.meta.url);
4324
4436
  var { version } = require2("../package.json");
4325
4437
  var getUpdateNotice = startVersionCheck(version);
4326
4438
  var DEFAULT_BASE_URL = "https://agents.moonpay.com";
4327
4439
  var program = new Command();
4328
- program.name("moonpay").description("MoonPay CLI \u2014 non-custodial crypto tools").version(version).option("-f, --format <type>", "Output format: json, compact, or table", "json");
4440
+ program.name("moonpay").description("MoonPay CLI \u2014 non-custodial crypto tools\n\n Run `mp skill install` to install AI skills for Claude Code.").version(version).option("-f, --format <type>", "Output format: json, compact, or table", "json");
4329
4441
  function getFormat() {
4330
4442
  const fmt = program.opts().format;
4331
4443
  if (fmt === "json" || fmt === "compact" || fmt === "table") return fmt;