@moonpay/cli 0.2.5 → 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);
@@ -2259,10 +2259,6 @@ var require_nacl_fast = __commonJS({
2259
2259
 
2260
2260
  // src/index.ts
2261
2261
  import { createRequire } from "module";
2262
- import { readdirSync as readdirSync3, readFileSync as readFileSync5, mkdirSync as mkdirSync4, cpSync, existsSync as existsSync3 } from "fs";
2263
- import { join as join5, dirname } from "path";
2264
- import { homedir as homedir4 } from "os";
2265
- import { fileURLToPath } from "url";
2266
2262
  import { Command } from "commander";
2267
2263
 
2268
2264
  // src/auth.ts
@@ -4314,6 +4310,115 @@ var messageSign = createTool(messageSignSchema, async (params) => {
4314
4310
  return { signature: bs584.encode(signatureBytes) };
4315
4311
  });
4316
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
+
4317
4422
  // src/index.ts
4318
4423
  var LOCAL_TOOLS = [
4319
4424
  walletCreate,
@@ -4322,7 +4427,10 @@ var LOCAL_TOOLS = [
4322
4427
  walletRetrieve,
4323
4428
  walletDelete,
4324
4429
  transactionSign,
4325
- messageSign
4430
+ messageSign,
4431
+ skillList,
4432
+ skillRetrieve,
4433
+ skillInstall
4326
4434
  ];
4327
4435
  var require2 = createRequire(import.meta.url);
4328
4436
  var { version } = require2("../package.json");
@@ -4512,71 +4620,5 @@ program.command("tools").description("List available tools").action(() => {
4512
4620
  console.log(lines.join("\n"));
4513
4621
  printUpdateNotice();
4514
4622
  });
4515
- function getSkillsDir() {
4516
- const __filename = fileURLToPath(import.meta.url);
4517
- const __dirname = dirname(__filename);
4518
- return join5(__dirname, "..", "skills");
4519
- }
4520
- function listSkills() {
4521
- const skillsDir = getSkillsDir();
4522
- if (!existsSync3(skillsDir)) return [];
4523
- return readdirSync3(skillsDir, { withFileTypes: true }).filter((e) => e.isDirectory() && e.name.startsWith("moonpay-")).map((e) => {
4524
- const md = readFileSync5(join5(skillsDir, e.name, "SKILL.md"), "utf-8");
4525
- const descMatch = md.match(/^description:\s*(.+)$/m);
4526
- return {
4527
- name: e.name,
4528
- description: descMatch?.[1]?.replace(/^["']|["']$/g, "") ?? ""
4529
- };
4530
- }).sort((a, b) => a.name.localeCompare(b.name));
4531
- }
4532
- var skillGroup = program.command("skill").description("AI skills for Claude Code and other agents");
4533
- skillGroup.command("list").description("List available skills").action(() => {
4534
- const skills = listSkills();
4535
- if (!skills.length) {
4536
- console.log("No skills found.");
4537
- return;
4538
- }
4539
- for (const s of skills) {
4540
- console.log(` ${color.green(s.name.padEnd(30))} ${color.dim(s.description)}`);
4541
- }
4542
- console.log("");
4543
- console.log(color.dim(`${skills.length} skills \u2014 run \`mp skill install\` to install for Claude Code`));
4544
- });
4545
- skillGroup.command("retrieve").description("Show a skill's full instructions").requiredOption("--name <name>", "Skill name (e.g. moonpay-swap-tokens)").action((opts) => {
4546
- const skillPath = join5(getSkillsDir(), opts.name, "SKILL.md");
4547
- if (!existsSync3(skillPath)) {
4548
- console.error(`Skill "${opts.name}" not found.`);
4549
- console.error(`Run \`mp skill list\` to see available skills.`);
4550
- process.exit(1);
4551
- }
4552
- console.log(readFileSync5(skillPath, "utf-8"));
4553
- });
4554
- skillGroup.command("install").description("Install skills to ~/.claude/skills/ for Claude Code").option("--force", "Overwrite existing skills", false).action((opts) => {
4555
- const srcDir = getSkillsDir();
4556
- const destDir = join5(homedir4(), ".claude", "skills");
4557
- const skills = listSkills();
4558
- if (!skills.length) {
4559
- console.log("No skills found to install.");
4560
- return;
4561
- }
4562
- mkdirSync4(destDir, { recursive: true });
4563
- let installed = 0;
4564
- for (const s of skills) {
4565
- const dest = join5(destDir, s.name);
4566
- if (existsSync3(dest) && !opts.force) {
4567
- console.log(` ${color.dim("skip")} ${s.name} (already exists, use --force to overwrite)`);
4568
- continue;
4569
- }
4570
- cpSync(join5(srcDir, s.name), dest, { recursive: true, force: true });
4571
- console.log(` ${color.green("\u2713")} ${s.name}`);
4572
- installed++;
4573
- }
4574
- console.log("");
4575
- if (installed > 0) {
4576
- console.log(`Installed ${installed} skills to ${destDir}`);
4577
- } else {
4578
- console.log("All skills already installed. Use --force to overwrite.");
4579
- }
4580
- });
4581
4623
  program.parse();
4582
4624
  //# sourceMappingURL=index.js.map