maidang 29.4.6 → 29.4.7

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
@@ -30,34 +30,31 @@ ${title}`));
30
30
 
31
31
  // src/commands/home.ts
32
32
  var commands = [
33
- { name: "whoami", desc: "\u5FEB\u901F\u4E86\u89E3\u6211" },
34
- { name: "status", desc: "\u5F53\u524D\u72B6\u6001" },
35
- { name: "skills", desc: "\u6280\u80FD\u6808" },
36
- { name: "career", desc: "\u5DE5\u4F5C\u7ECF\u5386" },
37
- { name: "contact", desc: "\u8054\u7CFB\u65B9\u5F0F" },
38
- { name: "posts", desc: "\u63A8\u6587\u65F6\u95F4\u7EBF" },
39
- { name: "links", desc: "\u793E\u4EA4\u94FE\u63A5" },
40
- { name: "projects", desc: "\u4E2A\u4EBA\u9879\u76EE" },
41
- { name: "tools", desc: "\u5E38\u7528\u5DE5\u5177" },
42
- { name: "cat | meow", desc: "\u67E5\u770B\u9EA6\u9EA6" }
33
+ { name: "whoami", desc: "\u4E86\u89E3\u6211" },
34
+ { name: "skills", desc: "\u6280\u80FD & \u5174\u8DA3" },
35
+ { name: "career", desc: "\u5DE5\u4F5C" },
36
+ { name: "posts", desc: "\u63A8\u6587" },
37
+ { name: "links", desc: "\u94FE\u63A5" },
38
+ { name: "projects", desc: "\u9879\u76EE" },
39
+ { name: "cat | meow", desc: "\u9EA6\u9EA6" }
43
40
  ];
44
41
  function createHomeCommand() {
45
- const cmd = new Command("maidang").description("\u6B22\u8FCE\u6765\u5230\u5356\u5F53\u7684\u4E16\u754C").action(async () => {
46
- const spinner = createSpinner("\u6B63\u5728\u53EC\u5524\u5356\u5F53...");
42
+ const cmd = new Command("maidang").description("\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C").action(async () => {
43
+ const spinner = createSpinner("\u6B63\u5728\u53EC\u5524...");
47
44
  spinner.start();
48
- await new Promise((resolve) => setTimeout(resolve, 1e3));
45
+ await new Promise((resolve) => setTimeout(resolve, 800));
49
46
  spinner.stop();
50
47
  console.clear();
51
- console.log(chalk2.cyan.bold("\u5356\u5F53\uFF0CAI \u65F6\u4EE3\u63A2\u7D22\u8005"));
52
- console.log(chalk2.gray("\u8DF5\u884C\u53EF\u6301\u7EED\u751F\u6D3B\u65B9\u5F0F"));
48
+ console.log(chalk2.bold("\u6211\u662F \u9EA6\u5F53"));
49
+ console.log(chalk2.dim("\u676D\u5DDE\uFF0C\u71D5\u9EA6\u62FF\u94C1\u7231\u597D\u8005\uFF0C\u4E3E\u94C1\uFF0C\u98DE\u76D8\uFF0C\u5076\u5C14\u5F39\u7434\uFF0C\u5199\u4EE3\u7801"));
53
50
  console.log("");
54
- console.log(chalk2.gray("\u2500".repeat(40)));
51
+ console.log(chalk2.dim("\u2500".repeat(40)));
55
52
  console.log("");
56
53
  for (const cmd2 of commands) {
57
- console.log(` ${chalk2.white.bold(cmd2.name.padEnd(12))} ${chalk2.gray(cmd2.desc)}`);
54
+ console.log(` ${chalk2.white(cmd2.name.padEnd(12))} ${chalk2.dim(cmd2.desc)}`);
58
55
  }
59
56
  console.log("");
60
- console.log(chalk2.gray("\u2500".repeat(40)));
57
+ console.log(chalk2.dim("\u2500".repeat(40)));
61
58
  console.log("");
62
59
  });
63
60
  return cmd;
@@ -486,19 +483,24 @@ function createToolsCommand() {
486
483
  // src/commands/contact.ts
487
484
  import { Command as Command8 } from "commander";
488
485
  import chalk8 from "chalk";
489
- var contact = {
490
- email: "borisdunk@sina.com",
491
- note: "\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE"
492
- };
486
+ function hr(char = "\u2500", len = 40) {
487
+ console.log(chalk8.dim(char.repeat(len)));
488
+ }
493
489
  function createContactCommand() {
494
- const cmd = new Command8("contact").description("\u83B7\u53D6\u76F4\u63A5\u8054\u7CFB\u65B9\u5F0F (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
490
+ const cmd = new Command8("contact").description("\u8054\u7CFB\u65B9\u5F0F").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
491
+ const data = { email: "borisdunk@sina.com", note: "\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE" };
495
492
  if (opts.json) {
496
- console.log(JSON.stringify({ tool: "maidang", command: "contact", data: contact }, null, 2));
493
+ console.log(JSON.stringify({ tool: "maidang", command: "contact", data }, null, 2));
497
494
  return;
498
495
  }
499
- console.log(chalk8.cyan.bold("\u{1F4EC} \u76F4\u63A5\u8054\u7CFB\u65B9\u5F0F\n"));
500
- console.log(` ${chalk8.white("\u90AE\u7BB1")} ${chalk8.blue(contact.email)}`);
501
- console.log(` ${chalk8.gray(contact.note)}`);
496
+ console.log("");
497
+ console.log(chalk8.bold("\u8054\u7CFB\u65B9\u5F0F"));
498
+ console.log("");
499
+ hr();
500
+ console.log("");
501
+ console.log(` Email ${chalk8.blue("borisdunk@sina.com")}`);
502
+ console.log("");
503
+ console.log(` ${chalk8.dim("\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE")}`);
502
504
  console.log("");
503
505
  });
504
506
  return cmd;
@@ -508,91 +510,41 @@ function createContactCommand() {
508
510
  import { Command as Command9 } from "commander";
509
511
  import chalk9 from "chalk";
510
512
  var skills = [
511
- {
512
- name: "TypeScript / JavaScript",
513
- level: "expert",
514
- tags: ["\u8BED\u8A00", "\u57FA\u7840"]
515
- },
516
- {
517
- name: "Next.js / React",
518
- level: "expert",
519
- tags: ["\u524D\u7AEF", "\u6846\u67B6"]
520
- },
521
- {
522
- name: "Node.js",
523
- level: "proficient",
524
- tags: ["\u540E\u7AEF", "\u8FD0\u884C\u65F6"]
525
- },
526
- {
527
- name: "AI Agent / LLM \u96C6\u6210",
528
- level: "proficient",
529
- tags: ["AI", "\u65B9\u5411"]
530
- },
531
- {
532
- name: "\u524D\u7AEF\u5DE5\u7A0B\u5316",
533
- level: "expert",
534
- tags: ["\u5DE5\u7A0B", "\u5B9E\u8DF5"]
535
- },
536
- {
537
- name: "CLI / TUI \u5F00\u53D1",
538
- level: "proficient",
539
- tags: ["\u5DE5\u5177", "\u504F\u5174\u8DA3"]
540
- },
541
- {
542
- name: "Prisma / PostgreSQL",
543
- level: "proficient",
544
- tags: ["\u6570\u636E\u5E93", "\u540E\u7AEF"]
545
- },
546
- {
547
- name: "Tailwind CSS",
548
- level: "proficient",
549
- tags: ["\u6837\u5F0F", "\u524D\u7AEF"]
550
- }
513
+ // 生活方式
514
+ { name: "\u4E3E\u94C1 / \u5065\u8EAB", tags: ["life"] },
515
+ { name: "\u98DE\u76D8", tags: ["life"] },
516
+ { name: "\u5409\u4ED6", tags: ["life"] },
517
+ { name: "\u71D5\u9EA6\u62FF\u94C1", tags: ["life"] },
518
+ // 技术
519
+ { name: "TypeScript", tags: ["tech"] },
520
+ { name: "Next.js / React", tags: ["tech"] },
521
+ { name: "Node.js", tags: ["tech"] },
522
+ { name: "AI Agent / LLM", tags: ["tech"] },
523
+ { name: "CLI / TUI \u5F00\u53D1", tags: ["tech"] },
524
+ { name: "\u524D\u7AEF\u5DE5\u7A0B\u5316", tags: ["tech"] },
525
+ { name: "Prisma / PostgreSQL", tags: ["tech"] }
551
526
  ];
552
- var levelLabel = {
553
- expert: chalk9.green("\u25C6\u25C6\u25C6"),
554
- proficient: chalk9.yellow("\u25C6\u25C6"),
555
- familiar: chalk9.gray("\u25C6")
556
- };
527
+ function hr2(char = "\u2500", len = 40) {
528
+ console.log(chalk9.dim(char.repeat(len)));
529
+ }
557
530
  function createSkillsCommand() {
558
- const cmd = new Command9("skills").description("\u67E5\u770B\u6211\u7684\u6280\u80FD\u6808 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
531
+ const cmd = new Command9("skills").description("\u6280\u80FD\u4E0E\u5174\u8DA3").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
559
532
  if (opts.json) {
560
533
  console.log(JSON.stringify({ tool: "maidang", command: "skills", data: skills }, null, 2));
561
534
  return;
562
535
  }
563
- console.log(chalk9.cyan.bold("\u{1F6E0}\uFE0F \u6280\u80FD\u6808\n"));
564
- const grouped = skills.reduce((acc, skill) => {
565
- const key = skill.tags[0];
566
- if (!acc[key]) acc[key] = [];
567
- acc[key].push(skill);
568
- return acc;
569
- }, {});
570
- const groupNames = {
571
- \u8BED\u8A00: "\u8BED\u8A00",
572
- \u57FA\u7840: "\u8BED\u8A00",
573
- \u524D\u7AEF: "\u524D\u7AEF",
574
- \u6846\u67B6: "\u524D\u7AEF",
575
- \u540E\u7AEF: "\u540E\u7AEF / \u5168\u6808",
576
- \u8FD0\u884C\u65F6: "\u540E\u7AEF / \u5168\u6808",
577
- AI: "AI",
578
- \u65B9\u5411: "AI",
579
- \u5DE5\u7A0B: "\u5DE5\u7A0B\u5B9E\u8DF5",
580
- \u5B9E\u8DF5: "\u5DE5\u7A0B\u5B9E\u8DF5",
581
- \u5DE5\u5177: "\u5DE5\u5177",
582
- \u504F\u5174\u8DA3: "\u5DE5\u5177",
583
- \u6570\u636E\u5E93: "\u6570\u636E",
584
- \u6837\u5F0F: "\u6837\u5F0F"
585
- };
586
- for (const [key, items] of Object.entries(grouped)) {
587
- console.log(chalk9.white.bold(` ${groupNames[key] || key}`));
588
- for (const skill of items) {
589
- const level = levelLabel[skill.level];
590
- const tags = skill.tags.slice(1).map((t) => chalk9.gray(`#${t}`)).join(" ");
591
- console.log(` ${level} ${chalk9.white(skill.name)} ${chalk9.gray("\xB7")} ${chalk9.dim(skill.tags[0])} ${tags}`);
592
- }
593
- console.log("");
594
- }
595
- console.log(chalk9.gray(" \u25C6\u25C6\u25C6 \u7CBE\u901A \u25C6\u25C6 \u719F\u7EC3 \u25C6 \u4E86\u89E3"));
536
+ const life = skills.filter((s) => s.tags.includes("life"));
537
+ const tech = skills.filter((s) => s.tags.includes("tech"));
538
+ console.log("");
539
+ console.log(chalk9.bold("\u751F\u6D3B"));
540
+ console.log("");
541
+ console.log(" " + life.map((s) => chalk9.white(s.name)).join(chalk9.dim(" \xB7 ")));
542
+ console.log("");
543
+ hr2();
544
+ console.log("");
545
+ console.log(chalk9.bold("\u6280\u672F"));
546
+ console.log("");
547
+ console.log(" " + tech.map((s) => chalk9.white(s.name)).join(chalk9.dim(" \xB7 ")));
596
548
  console.log("");
597
549
  });
598
550
  return cmd;
@@ -604,54 +556,28 @@ import chalk10 from "chalk";
604
556
  function getStatus() {
605
557
  const hour = (/* @__PURE__ */ new Date()).getHours();
606
558
  const isWeekend = [0, 6].includes((/* @__PURE__ */ new Date()).getDay());
607
- let status = "working";
608
- let label = "\u{1F4BC} \u5DE5\u4F5C\u4E2D";
609
- let description = "\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5\uFF0C\u54CD\u5E94\u53EF\u80FD\u8F83\u6162";
610
- if (isWeekend) {
611
- status = "available";
612
- label = "\u{1F33F} \u5468\u672B\u53EF\u7EA6";
613
- description = "\u5468\u672B\u65F6\u95F4\u76F8\u5BF9\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A";
614
- } else if (hour < 9 || hour >= 22) {
615
- status = "available";
616
- label = "\u{1F319} \u7A7A\u95F2\u4E2D";
617
- description = "\u975E\u5DE5\u4F5C\u65F6\u95F4\uFF0C\u968F\u65F6\u53EF\u8054\u7CFB";
618
- } else if (hour >= 19) {
619
- status = "busy";
620
- label = "\u{1F303} \u4E0B\u73ED\u4E86";
621
- description = "\u4E0B\u73ED\u4F11\u606F\uFF0C\u770B\u5230\u4F1A\u56DE";
622
- }
623
- return {
624
- status,
625
- label,
626
- description,
627
- updatedAt: (/* @__PURE__ */ new Date()).toISOString()
628
- };
559
+ if (isWeekend) return { status: "available", label: "\u5468\u672B\u53EF\u7EA6", description: "\u65F6\u95F4\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A" };
560
+ if (hour < 9 || hour >= 22) return { status: "available", label: "\u7A7A\u95F2\u4E2D", description: "\u975E\u5DE5\u4F5C\u65F6\u95F4" };
561
+ if (hour >= 19) return { status: "busy", label: "\u4E0B\u73ED\u4E86", description: "\u4F11\u606F\u4E2D\uFF0C\u770B\u5230\u4F1A\u56DE" };
562
+ return { status: "working", label: "\u5DE5\u4F5C\u4E2D", description: "\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5" };
563
+ }
564
+ function hr3(char = "\u2500", len = 40) {
565
+ console.log(chalk10.dim(char.repeat(len)));
629
566
  }
630
- var statusColors = {
631
- available: chalk10.green,
632
- working: chalk10.cyan,
633
- busy: chalk10.yellow,
634
- traveling: chalk10.magenta
635
- };
636
567
  function createStatusCommand() {
637
- const cmd = new Command10("status").description("\u67E5\u770B\u6211\u5F53\u524D\u7684\u72B6\u6001 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
568
+ const cmd = new Command10("status").description("\u5F53\u524D\u72B6\u6001").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
638
569
  const info = getStatus();
639
- const color = statusColors[info.status];
640
570
  if (opts.json) {
641
571
  console.log(JSON.stringify({ tool: "maidang", command: "status", data: info }, null, 2));
642
572
  return;
643
573
  }
644
- console.log(chalk10.cyan.bold("\u2139\uFE0F \u5F53\u524D\u72B6\u6001\n"));
645
- console.log(` ${color.bold(info.label)}`);
646
- console.log(` ${chalk10.gray(info.description)}`);
647
574
  console.log("");
648
- console.log(chalk10.gray(" \u72B6\u6001\u8BF4\u660E:"));
649
- console.log(chalk10.green(" \u{1F33F} available ") + chalk10.gray("- \u53EF\u63A5\u6D3B / \u968F\u65F6\u53EF\u804A"));
650
- console.log(chalk10.cyan(" \u{1F4BC} working ") + chalk10.gray("- \u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5"));
651
- console.log(chalk10.yellow(" \u{1F303} busy ") + chalk10.gray("- \u4E0B\u73ED\u6216\u5FD9\u788C"));
652
- console.log(chalk10.magenta(" \u2708\uFE0F traveling ") + chalk10.gray("- \u51FA\u5DEE\u4E2D"));
575
+ console.log(chalk10.bold("\u5F53\u524D\u72B6\u6001"));
653
576
  console.log("");
654
- console.log(chalk10.gray(" (\u76EE\u524D\u6839\u636E\u65F6\u95F4\u81EA\u52A8\u4F30\u7B97\uFF0C\u540E\u7EED\u53EF\u63A5\u5165\u65E5\u5386\u52A8\u6001\u66F4\u65B0)"));
577
+ hr3();
578
+ console.log("");
579
+ console.log(` ${chalk10.cyan("\u25CF")} ${chalk10.white(info.label)}`);
580
+ console.log(` ${chalk10.dim(info.description)}`);
655
581
  console.log("");
656
582
  });
657
583
  return cmd;
@@ -663,29 +589,25 @@ import chalk11 from "chalk";
663
589
  function getStatus2() {
664
590
  const hour = (/* @__PURE__ */ new Date()).getHours();
665
591
  const isWeekend = [0, 6].includes((/* @__PURE__ */ new Date()).getDay());
666
- if (isWeekend) {
667
- return { status: "available", label: "\u{1F33F} \u5468\u672B\u53EF\u7EA6", description: "\u5468\u672B\u65F6\u95F4\u76F8\u5BF9\u7075\u6D3B" };
668
- }
669
- if (hour < 9 || hour >= 22) {
670
- return { status: "available", label: "\u{1F319} \u7A7A\u95F2\u4E2D", description: "\u975E\u5DE5\u4F5C\u65F6\u95F4" };
671
- }
672
- if (hour >= 19) {
673
- return { status: "busy", label: "\u{1F303} \u4E0B\u73ED\u4E86", description: "\u4E0B\u73ED\u4F11\u606F" };
674
- }
675
- return { status: "working", label: "\u{1F4BC} \u5DE5\u4F5C\u4E2D", description: "\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5" };
592
+ if (isWeekend) return { status: "available", label: "\u5468\u672B\u53EF\u7EA6", description: "\u65F6\u95F4\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A" };
593
+ if (hour < 9 || hour >= 22) return { status: "available", label: "\u7A7A\u95F2\u4E2D", description: "\u975E\u5DE5\u4F5C\u65F6\u95F4" };
594
+ if (hour >= 19) return { status: "busy", label: "\u4E0B\u73ED\u4E86", description: "\u4F11\u606F\u4E2D\uFF0C\u770B\u5230\u4F1A\u56DE" };
595
+ return { status: "working", label: "\u5DE5\u4F5C\u4E2D", description: "\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5" };
596
+ }
597
+ function hr4(char = "\u2500", len = 40) {
598
+ console.log(chalk11.dim(char.repeat(len)));
676
599
  }
677
600
  function createWhoAmICommand() {
678
- const cmd = new Command11("whoami").description("\u5FEB\u901F\u4E86\u89E3\u6211 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
601
+ const cmd = new Command11("whoami").description("\u4E86\u89E3\u6211").option("--json", "\u8F93\u51FA JSON \u683C\u5F0F").action((opts) => {
679
602
  const status = getStatus2();
680
603
  const whoami = {
681
- name: "\u9EA6\u5F53",
682
- bio: "AI \u65F6\u4EE3\u63A2\u7D22\u8005\uFF0C\u5168\u6808\u5DE5\u7A0B\u5E08\uFF0C\u805A\u7126 AI Agent \u4E0E\u5DE5\u4F5C\u6D41\u5EFA\u8BBE",
683
- location: "\u676D\u5DDE EFC",
684
- company: "\u5F71\u5200 RPA",
685
- email: "borisdunk@sina.com",
686
- interests: ["\u71D5\u9EA6\u62FF\u94C1"],
604
+ tagline: "\u5728\u676D\u5DDE\u3002\u71D5\u9EA6\u62FF\u94C1\u7231\u597D\u8005\uFF0C\u4E3E\u94C1\uFF0C\u98DE\u76D8\uFF0C\u5076\u5C14\u5F39\u7434\uFF0C\u5199\u4EE3\u7801\u3002",
605
+ location: "\u676D\u5DDE \xB7 EFC",
687
606
  status,
688
- skills: ["TypeScript", "Next.js/React", "Node.js", "AI Agent", "\u524D\u7AEF\u5DE5\u7A0B\u5316", "CLI/TUI"],
607
+ links: [
608
+ { label: "Blog", url: "https://www.maidang.me" }
609
+ ],
610
+ contact: "borisdunk@sina.com",
689
611
  website: "https://www.maidang.me",
690
612
  updatedAt: (/* @__PURE__ */ new Date()).toISOString()
691
613
  };
@@ -693,18 +615,25 @@ function createWhoAmICommand() {
693
615
  console.log(JSON.stringify({ tool: "maidang", command: "whoami", data: whoami }, null, 2));
694
616
  return;
695
617
  }
696
- console.log(chalk11.cyan.bold("\u{1F464} \u9EA6\u5F53\n"));
697
- console.log(` ${chalk11.white(whoami.bio)}`);
698
- console.log(` ${chalk11.gray("\u{1F4CD}")} ${chalk11.gray(whoami.location)}`);
699
- console.log(` ${chalk11.gray("\u{1F3E2}")} ${chalk11.gray(whoami.company)}`);
700
- console.log(` ${chalk11.gray("\u{1F310}")} ${chalk11.blue.underline(whoami.website)}`);
701
618
  console.log("");
702
- console.log(` ${whoami.status.label} ${chalk11.gray(whoami.status.description)}`);
619
+ console.log(chalk11.bold("\u6211\u662F \u9EA6\u5F53"));
620
+ console.log("");
621
+ console.log(" " + whoami.tagline);
622
+ console.log("");
623
+ hr4();
624
+ console.log("");
625
+ console.log(` ${chalk11.cyan("\u{1F4CD}")} ${whoami.location}`);
626
+ console.log(` ${chalk11.cyan("\u23F1")} ${whoami.status.label} \xB7 ${chalk11.dim(whoami.status.description)}`);
627
+ console.log("");
628
+ hr4();
629
+ console.log("");
630
+ console.log(` Blog ${chalk11.blue.underline(whoami.website)}`);
631
+ console.log(` Email ${chalk11.blue(whoami.contact)}`);
703
632
  console.log("");
704
- console.log(` ${chalk11.gray("\u{1F4E7}")} ${chalk11.blue(whoami.email)}`);
705
- console.log(` ${chalk11.gray("\u2615")} ${chalk11.gray(whoami.interests.join(" \xB7 "))}`);
633
+ hr4();
706
634
  console.log("");
707
- console.log(` ${chalk11.gray("\u{1F6E0}\uFE0F \u6280\u80FD")} ${whoami.skills.join(chalk11.gray(" \xB7 "))}`);
635
+ console.log(` ${chalk11.dim("\u60F3\u4E86\u89E3\u66F4\u591A\uFF1F")}`);
636
+ console.log(` ${chalk11.dim("maidang skills / career / posts / links")}`);
708
637
  console.log("");
709
638
  });
710
639
  return cmd;
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../src/index.ts", "../src/commands/home.ts", "../src/utils/display.ts", "../src/commands/career.ts", "../src/data/career.json", "../src/commands/cat.ts", "../src/commands/posts.tsx", "../src/commands/links.ts", "../src/commands/projects.ts", "../src/commands/tools.ts", "../src/commands/contact.ts", "../src/commands/skills.ts", "../src/commands/status.ts", "../src/commands/whoami.ts", "../src/utils/version.ts"],
4
- "sourcesContent": ["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { createHomeCommand } from './commands/home';\nimport { createCareerCommand } from './commands/career';\nimport { createCatCommand } from './commands/cat';\nimport { createPostsCommand } from './commands/posts';\nimport { createLinksCommand } from './commands/links';\nimport { createProjectsCommand } from './commands/projects';\nimport { createToolsCommand } from './commands/tools';\nimport { createContactCommand } from './commands/contact';\nimport { createSkillsCommand } from './commands/skills';\nimport { createStatusCommand } from './commands/status';\nimport { createWhoAmICommand } from './commands/whoami';\nimport { getAgeVersion, getVersionInfo } from './utils/version';\n\nconst program = new Command();\n\n// \u52A8\u6001\u8BA1\u7B97\u5E74\u9F84\u7248\u672C\u53F7\nconst versionInfo = getVersionInfo();\n\nprogram\n .name('maidang')\n .description('\u4E86\u89E3\u9EA6\u5F53 - \u4E00\u4E2A AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005')\n .version(getAgeVersion(), '-v, --version', '\u663E\u793A\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7');\n\n// \u6DFB\u52A0\u4E00\u4E2A\u7279\u6B8A\u7684\u751F\u65E5\u4FE1\u606F\u547D\u4EE4\nprogram\n .command('birthday')\n .description('\u663E\u793A\u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F')\n .action(() => {\n const { birthDate, currentAge, nextBirthday, version } = versionInfo;\n\n console.log(`\uD83C\uDF82 \u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F`);\n console.log('');\n console.log(`\u51FA\u751F\u65E5\u671F: ${birthDate.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n console.log(`\u5F53\u524D\u5E74\u9F84: ${currentAge} \u5C81`);\n console.log(`\u5F53\u524D\u7248\u672C: ${version} (\u5E74\u9F84\u7248\u672C)`);\n console.log(`\u4E0B\u4E00\u4E2A\u751F\u65E5: ${nextBirthday.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n\n const daysUntilNextBirthday = Math.ceil((nextBirthday.getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24));\n console.log(`\u8DDD\u79BB\u751F\u65E5\u8FD8\u6709: ${daysUntilNextBirthday} \u5929`);\n\n if (daysUntilNextBirthday <= 30) {\n console.log(`\uD83C\uDF89 \u5FEB\u8981\u8FC7\u751F\u65E5\u4E86\uFF01`);\n }\n });\n\nconst careerCmd = createCareerCommand();\nconst catCmd = createCatCommand();\nconst postsCmd = createPostsCommand();\nconst linksCmd = createLinksCommand();\nconst projectsCmd = createProjectsCommand();\nconst toolsCmd = createToolsCommand();\nconst contactCmd = createContactCommand();\nconst skillsCmd = createSkillsCommand();\nconst statusCmd = createStatusCommand();\nconst whoamiCmd = createWhoAmICommand();\n\nprogram.addCommand(careerCmd);\nprogram.addCommand(catCmd);\nprogram.addCommand(postsCmd);\nprogram.addCommand(linksCmd);\nprogram.addCommand(projectsCmd);\nprogram.addCommand(toolsCmd);\nprogram.addCommand(contactCmd);\nprogram.addCommand(skillsCmd);\nprogram.addCommand(statusCmd);\nprogram.addCommand(whoamiCmd);\n\nif (!process.argv.slice(2).length) {\n const homeCmd = createHomeCommand();\n homeCmd.parse(process.argv);\n} else {\n program.parse(process.argv);\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createSpinner } from '../utils/display';\n\nconst commands = [\n { name: 'whoami', desc: '\u5FEB\u901F\u4E86\u89E3\u6211' },\n { name: 'status', desc: '\u5F53\u524D\u72B6\u6001' },\n { name: 'skills', desc: '\u6280\u80FD\u6808' },\n { name: 'career', desc: '\u5DE5\u4F5C\u7ECF\u5386' },\n { name: 'contact', desc: '\u8054\u7CFB\u65B9\u5F0F' },\n { name: 'posts', desc: '\u63A8\u6587\u65F6\u95F4\u7EBF' },\n { name: 'links', desc: '\u793E\u4EA4\u94FE\u63A5' },\n { name: 'projects', desc: '\u4E2A\u4EBA\u9879\u76EE' },\n { name: 'tools', desc: '\u5E38\u7528\u5DE5\u5177' },\n { name: 'cat | meow', desc: '\u67E5\u770B\u9EA6\u9EA6' },\n];\n\nexport function createHomeCommand(): Command {\n const cmd = new Command('maidang')\n .description('\u6B22\u8FCE\u6765\u5230\u5356\u5F53\u7684\u4E16\u754C')\n .action(async () => {\n const spinner = createSpinner('\u6B63\u5728\u53EC\u5524\u5356\u5F53...');\n spinner.start();\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n spinner.stop();\n\n console.clear();\n\n console.log(chalk.cyan.bold('\u5356\u5F53\uFF0CAI \u65F6\u4EE3\u63A2\u7D22\u8005'));\n console.log(chalk.gray('\u8DF5\u884C\u53EF\u6301\u7EED\u751F\u6D3B\u65B9\u5F0F'));\n console.log('');\n console.log(chalk.gray('\u2500'.repeat(40)));\n console.log('');\n\n for (const cmd of commands) {\n console.log(` ${chalk.white.bold(cmd.name.padEnd(12))} ${chalk.gray(cmd.desc)}`);\n }\n\n console.log('');\n console.log(chalk.gray('\u2500'.repeat(40)));\n console.log('');\n });\n\n return cmd;\n}\n", "import chalk from 'chalk';\nimport boxen from 'boxen';\nimport figlet from 'figlet';\nimport ora, { Ora } from 'ora';\n\nexport async function displayTitle(text: string): Promise<void> {\n return new Promise((resolve) => {\n figlet.text(text, {\n font: 'Big',\n horizontalLayout: 'default',\n verticalLayout: 'default'\n }, (err, data) => {\n if (err) {\n console.log(chalk.cyan.bold(text));\n } else {\n console.log(chalk.cyan(data));\n }\n resolve();\n });\n });\n}\n\nexport function displayBox(content: string, options?: {\n title?: string;\n borderColor?: string;\n padding?: number;\n}): void {\n const borderOptions: any = {\n padding: options?.padding || 1,\n borderColor: options?.borderColor || 'cyan',\n borderStyle: 'round'\n };\n\n if (options?.title) {\n borderOptions.title = options.title;\n borderOptions.titleAlignment = 'center';\n }\n\n console.log(boxen(content, borderOptions));\n}\n\nexport function createSpinner(text: string): Ora {\n return ora({\n text,\n color: 'cyan'\n });\n}\n\nexport function displaySeparator(char: string = '\u2500', length: number = 50): void {\n console.log(chalk.gray(char.repeat(length)));\n}\n\nexport function displayItem(icon: string, text: string, color: string = 'cyan'): void {\n const colorMethod = (chalk as any)[color];\n if (colorMethod) {\n console.log(colorMethod(icon), text);\n } else {\n console.log(chalk.cyan(icon), text);\n }\n}\n\nexport function displaySection(title: string): void {\n displaySeparator();\n console.log(chalk.bold.cyan(`\\n${title}`));\n displaySeparator();\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport careerData from '../data/career.json';\nimport { displaySection } from '../utils/display';\n\nexport function createCareerCommand(): Command {\n const cmd = new Command('career')\n .description('\u67E5\u770B\u6211\u7684\u5DE5\u4F5C\u7ECF\u5386 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'career', data: careerData }, null, 2));\n return;\n }\n\n displaySection('\uD83D\uDCBC \u5DE5\u4F5C\u7ECF\u5386');\n\n careerData.career.forEach((job, index) => {\n console.log('');\n\n console.log(chalk.yellow.bold(`\uD83D\uDCCB ${job.company}`));\n console.log(chalk.cyan(` ${job.role}`));\n console.log(chalk.gray(` ${job.period}`));\n console.log('');\n\n console.log(chalk.white(' \uD83D\uDCDD ' + job.description));\n console.log('');\n\n if (job.achievements && job.achievements.length > 0) {\n console.log(chalk.gray(' \u4E3B\u8981\u6210\u5C31:'));\n job.achievements.forEach(achievement => {\n console.log(chalk.green(' \u2713 ' + achievement));\n });\n }\n\n if (index < careerData.career.length - 1) {\n console.log('');\n console.log(chalk.gray('\u2500'.repeat(40)));\n }\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"career\": [\n {\n \"company\": \"\u5F71\u5200 RPA\uFF08AI Power \u56E2\u961F\uFF09\",\n \"role\": \"\u5168\u6808\u5DE5\u7A0B\u5E08 / AI Agent \u5F00\u53D1\u8005\",\n \"period\": \"2025.10 - \u81F3\u4ECA\",\n \"description\": \"\u805A\u7126 AI \u5DE5\u4F5C\u6D41\u5EFA\u8BBE\uFF0C\u4E3B\u5BFC AI Agent \u65B9\u6848\u8BBE\u8BA1\u4E0E\u843D\u5730\uFF0C\u63A8\u52A8\u4E1A\u52A1\u4ECE\u529F\u80FD\u5F00\u53D1\u8D70\u5411\u667A\u80FD\u5316\u6D41\u7A0B\u7F16\u6392\u3002\",\n \"achievements\": [\n \"\u8D1F\u8D23 AI \u5DE5\u4F5C\u6D41\u76F8\u5173\u80FD\u529B\u5EFA\u8BBE\uFF0C\u63A8\u52A8\u56E2\u961F\u5F62\u6210\u53EF\u590D\u7528\u7684\u6D41\u7A0B\u5316\u4EA4\u4ED8\u65B9\u5F0F\",\n \"\u62C5\u4EFB AI Agent \u6838\u5FC3\u5F00\u53D1\u8005\uFF0C\u8986\u76D6\u4ECE\u9700\u6C42\u62C6\u89E3\u3001\u63D0\u793A\u8BCD\u8BBE\u8BA1\u5230\u670D\u52A1\u7AEF\u843D\u5730\u7684\u5B8C\u6574\u94FE\u8DEF\",\n \"\u4EE5\u5168\u6808\u65B9\u5F0F\u534F\u540C\u524D\u540E\u7AEF\u5F00\u53D1\uFF0C\u63D0\u5347\u590D\u6742\u4E1A\u52A1\u5728\u7814\u53D1\u4FA7\u7684\u843D\u5730\u6548\u7387\",\n \"\u5728\u56E2\u961F\u5185\u63A8\u8FDB AI \u5DE5\u7A0B\u5316\u5B9E\u8DF5\uFF0C\u6301\u7EED\u63D0\u5347\u9879\u76EE\u7A33\u5B9A\u6027\u4E0E\u8FED\u4EE3\u901F\u5EA6\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u4E0D\u5FD8\u667A\u80FD\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u5168\u6808\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2024.10 - 2025.09\",\n \"description\": \"\u53C2\u4E0E AI \u89C6\u9891\u751F\u6210\u4E0E\u5E7F\u544A\u6295\u653E\u4EA7\u54C1\u5EFA\u8BBE\uFF0C\u8D1F\u8D23\u524D\u540E\u7AEF\u8054\u52A8\u548C\u6838\u5FC3\u529F\u80FD\u843D\u5730\u3002\",\n \"achievements\": [\n \"\u57FA\u4E8E Next.js + React + Node.js \u53C2\u4E0E\u9AD8\u4EA4\u4E92\u5E94\u7528\u4E0E\u4E2D\u53F0\u670D\u52A1\u5F00\u53D1\",\n \"\u53C2\u4E0E ASR\u3001LLM\u3001\u89C6\u9891\u4EFB\u52A1\u94FE\u8DEF\u7B49 AI \u76F8\u5173\u529F\u80FD\u5EFA\u8BBE\",\n \"\u53C2\u4E0E\u81EA\u52A8\u5316\u6295\u653E\u4E0E\u5DE5\u7A0B\u5316\u6D41\u7A0B\u5EFA\u8BBE\uFF0C\u63D0\u5347\u4E1A\u52A1\u5904\u7406\u6548\u7387\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u89C6\u674F\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2022.10 - 2024.06\",\n \"description\": \"\u8D1F\u8D23\u524D\u7AEF\u5DE5\u7A0B\u5316\u3001\u4E1A\u52A1\u7CFB\u7EDF\u5F00\u53D1\u4E0E\u56E2\u961F\u534F\u4F5C\u6D41\u7A0B\u4F18\u5316\u3002\",\n \"achievements\": [\n \"\u63A8\u52A8\u89C4\u8303\u4F53\u7CFB\u843D\u5730\uFF08Lint\u3001Commit \u89C4\u8303\u3001\u811A\u624B\u67B6\u7B49\uFF09\uFF0C\u63D0\u5347\u56E2\u961F\u7814\u53D1\u4E00\u81F4\u6027\",\n \"\u53C2\u4E0E\u6784\u5EFA\u79C1\u6709\u5E93\u4E0E\u5DE5\u7A0B\u5316\u4F53\u7CFB\uFF0C\u63D0\u5347\u591A\u9879\u76EE\u590D\u7528\u6548\u7387\",\n \"\u652F\u6491\u540E\u53F0\u7CFB\u7EDF\u4E0E\u6838\u5FC3\u4E1A\u52A1\u9875\u9762\u7684\u6301\u7EED\u8FED\u4EE3\"\n ]\n },\n {\n \"company\": \"\u534E\u76D6\u5BB6\u5C45\u3001\u9177\u5BB6\u4E50\uFF08\u4E0D\u540C\u516C\u53F8\uFF09\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2020.11 - 2022.06\",\n \"description\": \"\u65E9\u671F\u7ECF\u5386\uFF0C\u4E3B\u8981\u8D1F\u8D23 2D Canvas \u76F8\u5173\u529F\u80FD\u5F00\u53D1\u4E0E\u7EF4\u62A4\u3002\",\n \"achievements\": [\n \"\u53C2\u4E0E 2D \u8BBE\u8BA1\u5DE5\u5177\u4E0E\u4E3B\u7AD9\u76F8\u5173\u524D\u7AEF\u529F\u80FD\u5F00\u53D1\",\n \"\u8D1F\u8D23\u753B\u5E03\u4EA4\u4E92\u3001\u5386\u53F2\u8BB0\u5F55\u4E0E\u5FEB\u6377\u952E\u7B49\u80FD\u529B\u8FED\u4EE3\",\n \"\u4E0E\u4EA7\u54C1\u3001\u8BBE\u8BA1\u3001\u6D4B\u8BD5\u534F\u4F5C\u63A8\u8FDB\u7248\u672C\u4EA4\u4ED8\"\n ]\n }\n ]\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs';\n\nconst RETRO_PIXEL_WIDTH = 28;\nconst RETRO_PIXEL_HEIGHT = 16;\n\nconst resolveExecutableDir = (): string => {\n if (!process.argv[1]) {\n return process.cwd();\n }\n\n const executablePath = path.resolve(process.argv[1]);\n try {\n const resolvedExecutablePath = fs.realpathSync(executablePath);\n return path.dirname(resolvedExecutablePath);\n } catch {\n return path.dirname(executablePath);\n }\n};\n\nconst resolveCatImagePath = (): string | null => {\n const executableDir = resolveExecutableDir();\n const packageRootDir = path.resolve(executableDir, '..');\n const candidatePaths = [\n path.resolve(process.cwd(), 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'dist/assets/cat.jpg'),\n path.resolve(executableDir, 'assets/cat.jpg'),\n path.resolve(executableDir, '../assets/cat.jpg')\n ];\n\n for (const candidatePath of candidatePaths) {\n if (fs.existsSync(candidatePath)) {\n return candidatePath;\n }\n }\n\n return null;\n};\n\nexport function createCatCommand(): Command {\n const cmd = new Command('cat')\n .alias('meow')\n .description('\u67E5\u770B\u9EA6\u9EA6')\n .action(async () => {\n console.log(chalk.yellow.bold('\u9EA6\u9EA6'));\n console.log('');\n\n try {\n const catImagePath = resolveCatImagePath();\n\n if (catImagePath) {\n try {\n const { default: terminalImage } = await import('terminal-image');\n const image = await terminalImage.file(catImagePath, {\n width: RETRO_PIXEL_WIDTH,\n height: RETRO_PIXEL_HEIGHT,\n preserveAspectRatio: true\n });\n\n console.log(image);\n } catch (error) {\n console.log(chalk.red('\u56FE\u7247\u6E32\u67D3\u5931\u8D25'));\n }\n } else {\n console.log(chalk.gray('\u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n } catch (error) {\n console.log(chalk.gray('\uD83D\uDCF8 \u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n\n console.log('');\n });\n\n return cmd;\n}\n", "import React, { useState, useEffect } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\n\ninterface PostItem {\n slug: string;\n title?: string | null;\n content: string;\n summary?: string | null;\n author?: string | null;\n handle?: string | null;\n date?: string | null;\n time?: string | null;\n tags?: string[];\n publishedAt?: string | null;\n}\n\ntype View = 'LIST' | 'DETAIL';\n\n// \u2500\u2500 List view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ListView: React.FC<{\n posts: PostItem[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n onEnter: () => void;\n onQuit: () => void;\n}> = ({ posts, selectedIndex, onSelect, onEnter, onQuit }) => {\n useInput((input, key) => {\n if (input === 'q' || input === 'Q') {\n onQuit();\n return;\n }\n if (key.upArrow) {\n onSelect(Math.max(0, selectedIndex - 1));\n } else if (key.downArrow) {\n onSelect(Math.min(posts.length - 1, selectedIndex + 1));\n } else if (key.return) {\n onEnter();\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\uD83D\uDC26 \u63A8\u6587\u5217\u8868</Text>\n <Text dimColor> \u00B7 {posts.length} \u6761</Text>\n </Box>\n <Text dimColor marginBottom={1}>\u2191\u2193 \u9009\u62E9 \u00B7 Enter \u67E5\u770B\u8BE6\u60C5 \u00B7 q \u9000\u51FA</Text>\n\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\" paddingX={0} paddingY={0}>\n {posts.map((post, index) => {\n const isSelected = selectedIndex === index;\n const num = String(index + 1).padStart(2, ' ');\n const title = post.title || post.summary?.substring(0, 40) || post.content.substring(0, 40);\n const meta = [post.date, post.time].filter(Boolean).join(' ');\n return (\n <Box\n key={post.slug}\n paddingX={1}\n paddingY={0}\n marginY={0}\n borderStyle=\"single\"\n borderColor={isSelected ? 'cyan' : 'gray'}\n >\n <Text dimColor>{num}</Text>\n <Text dimColor> \u2502 </Text>\n <Box flexDirection=\"column\" flexGrow={1}>\n <Text bold={isSelected} color={isSelected ? 'cyan' : undefined}>\n {title}\n </Text>\n {meta && (\n <Text dimColor>{meta}</Text>\n )}\n </Box>\n {isSelected && (\n <Text dimColor> \u2190</Text>\n )}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n};\n\n// \u2500\u2500 Detail view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst DetailView: React.FC<{\n post: PostItem;\n onBack: () => void;\n onQuit: () => void;\n onPrev: () => void;\n onNext: () => void;\n hasPrev: boolean;\n hasNext: boolean;\n}> = ({ post, onBack, onQuit, onPrev, onNext, hasPrev, hasNext }) => {\n useInput((input, key) => {\n if (input === 'q' || input === 'Q') {\n onQuit();\n return;\n }\n if (key.escape || input === 'b' || input === 'B') {\n onBack();\n return;\n }\n if (key.leftArrow && hasPrev) {\n onPrev();\n } else if (key.rightArrow && hasNext) {\n onNext();\n }\n });\n\n const paragraphs = post.content\n .split('\\n')\n .reduce<string[][]>((acc, line) => {\n if (line.trim() === '') {\n acc.push([]);\n } else {\n if (acc.length === 0 || acc[acc.length - 1].length === 0) {\n acc.push([line]);\n } else {\n acc[acc.length - 1].push(line);\n }\n }\n return acc;\n }, [])\n .filter(p => p.length > 0);\n\n const tags = post.tags || [];\n const meta = [post.date, post.time].filter(Boolean).join(' ');\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1} flexShrink={0}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\uD83D\uDCC4 \u63A8\u6587\u8BE6\u60C5</Text>\n <Text dimColor> \u00B7 Esc/q \u8FD4\u56DE \u00B7 \u2190\u2192 \u5207\u6362</Text>\n </Box>\n\n {/* Meta */}\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"cyan\" paddingX={1} marginBottom={0} flexShrink={0}>\n <Box>\n <Text bold color=\"white\">{post.author || '\u9EA6\u5F53\u52B3'}</Text>\n <Text dimColor> {post.handle || '@maidang'}</Text>\n {meta && <Text dimColor> \u00B7 {meta}</Text>}\n </Box>\n {post.title && (\n <Text bold color=\"cyan\">{post.title}</Text>\n )}\n </Box>\n\n {/* Content */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n paddingX={1}\n marginY={0}\n flexShrink={1}\n overflow=\"hidden\"\n >\n {paragraphs.map((para, pi) => (\n <Box key={pi} flexDirection=\"column\" marginBottom={pi < paragraphs.length - 1 ? 1 : 0} flexShrink={0}>\n {para.map((line, li) => (\n <Text key={li} wrap=\"wrap\">{line}</Text>\n ))}\n </Box>\n ))}\n </Box>\n\n {/* Tags */}\n {tags.length > 0 && (\n <Box borderStyle=\"single\" borderColor=\"gray\" paddingX={1} marginY={0} flexShrink={0}>\n <Text dimColor>\n {tags.map(tag => <Text key={tag} color=\"cyan\">#{tag} </Text>)}\n </Text>\n </Box>\n )}\n\n {/* Footer */}\n <Box marginTop={1} flexShrink={0}>\n <Text dimColor>\n \u2190 {hasPrev ? '\u4E0A\u4E00\u7BC7' : '\u65E0'}\u3000\u3000\u2192 {hasNext ? '\u4E0B\u4E00\u7BC7' : '\u65E0'}\u3000\u3000Esc \u8FD4\u56DE\n </Text>\n </Box>\n </Box>\n );\n};\n\n// \u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PostsApp: React.FC<{ apiUrl: string }> = ({ apiUrl }) => {\n const [posts, setPosts] = useState<PostItem[]>([]);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [view, setView] = useState<View>('LIST');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n fetch(apiUrl)\n .then((res) => {\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json();\n })\n .then((data) => {\n setPosts(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err.message);\n setLoading(false);\n });\n }, [apiUrl]);\n\n const handleQuit = () => {\n process.exit(0);\n };\n\n const handleEnter = () => {\n setView('DETAIL');\n };\n\n const handleBack = () => {\n setView('LIST');\n };\n\n const handlePrev = () => {\n setSelectedIndex(i => Math.max(0, i - 1));\n };\n\n const handleNext = () => {\n setSelectedIndex(i => Math.min(posts.length - 1, i + 1));\n };\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text dimColor>\u52A0\u8F7D\u4E2D...</Text>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text color=\"red\">\u52A0\u8F7D\u5931\u8D25: {error}</Text>\n <Text dimColor>\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216API\u5730\u5740</Text>\n </Box>\n );\n }\n\n if (posts.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text color=\"yellow\">\u6682\u65E0\u63A8\u6587</Text>\n </Box>\n );\n }\n\n if (view === 'DETAIL') {\n return (\n <DetailView\n post={posts[selectedIndex]}\n onBack={handleBack}\n onQuit={handleQuit}\n onPrev={handlePrev}\n onNext={handleNext}\n hasPrev={selectedIndex > 0}\n hasNext={selectedIndex < posts.length - 1}\n />\n );\n }\n\n return (\n <ListView\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onEnter={handleEnter}\n onQuit={handleQuit}\n />\n );\n};\n\nexport function createPostsCommand(): Command {\n const apiUrl = 'https://www.maidang.me/api/social-posts?type=social';\n const cmd = new Command('posts')\n .description('\u63A8\u6587\u5217\u8868\uFF0C\u8FDB\u5165\u540E\u53EF\u67E5\u770B\u8BE6\u60C5 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F');\n\n cmd.action((opts) => {\n const wantsJson = opts.json;\n\n if (wantsJson) {\n fetch(apiUrl)\n .then(res => res.json())\n .then(data => console.log(JSON.stringify({ tool: 'maidang', command: 'posts', data }, null, 2)))\n .catch(err => { console.error(err); process.exit(1); });\n return;\n }\n\n render(<PostsApp apiUrl={apiUrl} />);\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Link {\n name: string;\n url: string;\n icon: string;\n description: string | null;\n}\n\nexport function createLinksCommand(): Command {\n const cmd = new Command('links')\n .description('\u67E5\u770B\u793E\u4EA4\u94FE\u63A5 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/links`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const links: Link[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'links', data: links }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83C\uDF10 \u793E\u4EA4\u94FE\u63A5\\n'));\n for (const link of links) {\n console.log(` ${link.icon} ${chalk.white(link.name)} - ${chalk.gray(link.description || '')}`);\n console.log(` ${chalk.blue(link.url)}\\n`);\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u94FE\u63A5\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Project {\n name: string;\n description: string;\n url: string | null;\n icon: string;\n category: string;\n}\n\nexport function createProjectsCommand(): Command {\n const cmd = new Command('projects')\n .description('\u67E5\u770B\u4E2A\u4EBA\u9879\u76EE')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/projects`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const projects: Project[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'projects', data: projects }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83D\uDE80 \u4E2A\u4EBA\u9879\u76EE\\n'));\n for (const project of projects) {\n console.log(` ${project.icon} ${chalk.white.bold(project.name)} ${chalk.gray(`[${project.category}]`)}`);\n console.log(` ${project.description}`);\n if (project.url) {\n console.log(` ${chalk.blue(project.url)}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u9879\u76EE\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Tool {\n name: string;\n description: string;\n icon: string;\n url: string | null;\n category: string;\n}\n\nexport function createToolsCommand(): Command {\n const cmd = new Command('tools')\n .description('\u67E5\u770B\u5E38\u7528\u5DE5\u5177')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/tools`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const tools: Tool[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'tools', data: tools }, null, 2));\n return;\n }\n\n const byCategory = tools.reduce((acc, tool) => {\n if (!acc[tool.category]) acc[tool.category] = [];\n acc[tool.category].push(tool);\n return acc;\n }, {} as Record<string, Tool[]>);\n\n const categoryNames: Record<string, string> = {\n software: '\u5E38\u7528\u8F6F\u4EF6',\n device: '\u8BBE\u5907',\n desktop: '\u684C\u9762\u88C5\u5907',\n };\n\n console.log(chalk.cyan.bold('\uD83D\uDD27 \u5E38\u7528\u5DE5\u5177\\n'));\n\n for (const [cat, items] of Object.entries(byCategory)) {\n console.log(chalk.white.bold(` ${categoryNames[cat] || cat}`));\n for (const tool of items) {\n const urlStr = tool.url ? ` ${chalk.blue(tool.url)}` : '';\n console.log(` ${tool.icon} ${tool.name} - ${chalk.gray(tool.description)}${urlStr}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u5DE5\u5177\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface ContactInfo {\n email: string;\n note: string;\n}\n\nconst contact: ContactInfo = {\n email: 'borisdunk@sina.com',\n note: '\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE',\n};\n\nexport function createContactCommand(): Command {\n const cmd = new Command('contact')\n .description('\u83B7\u53D6\u76F4\u63A5\u8054\u7CFB\u65B9\u5F0F (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'contact', data: contact }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83D\uDCEC \u76F4\u63A5\u8054\u7CFB\u65B9\u5F0F\\n'));\n console.log(` ${chalk.white('\u90AE\u7BB1')} ${chalk.blue(contact.email)}`);\n console.log(` ${chalk.gray(contact.note)}`);\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Skill {\n name: string;\n level: 'expert' | 'proficient' | 'familiar';\n tags: string[];\n}\n\nconst skills: Skill[] = [\n {\n name: 'TypeScript / JavaScript',\n level: 'expert',\n tags: ['\u8BED\u8A00', '\u57FA\u7840'],\n },\n {\n name: 'Next.js / React',\n level: 'expert',\n tags: ['\u524D\u7AEF', '\u6846\u67B6'],\n },\n {\n name: 'Node.js',\n level: 'proficient',\n tags: ['\u540E\u7AEF', '\u8FD0\u884C\u65F6'],\n },\n {\n name: 'AI Agent / LLM \u96C6\u6210',\n level: 'proficient',\n tags: ['AI', '\u65B9\u5411'],\n },\n {\n name: '\u524D\u7AEF\u5DE5\u7A0B\u5316',\n level: 'expert',\n tags: ['\u5DE5\u7A0B', '\u5B9E\u8DF5'],\n },\n {\n name: 'CLI / TUI \u5F00\u53D1',\n level: 'proficient',\n tags: ['\u5DE5\u5177', '\u504F\u5174\u8DA3'],\n },\n {\n name: 'Prisma / PostgreSQL',\n level: 'proficient',\n tags: ['\u6570\u636E\u5E93', '\u540E\u7AEF'],\n },\n {\n name: 'Tailwind CSS',\n level: 'proficient',\n tags: ['\u6837\u5F0F', '\u524D\u7AEF'],\n },\n];\n\nconst levelLabel: Record<Skill['level'], string> = {\n expert: chalk.green('\u25C6\u25C6\u25C6'),\n proficient: chalk.yellow('\u25C6\u25C6'),\n familiar: chalk.gray('\u25C6'),\n};\n\nexport function createSkillsCommand(): Command {\n const cmd = new Command('skills')\n .description('\u67E5\u770B\u6211\u7684\u6280\u80FD\u6808 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'skills', data: skills }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83D\uDEE0\uFE0F \u6280\u80FD\u6808\\n'));\n\n const grouped = skills.reduce((acc, skill) => {\n const key = skill.tags[0];\n if (!acc[key]) acc[key] = [];\n acc[key].push(skill);\n return acc;\n }, {} as Record<string, Skill[]>);\n\n const groupNames: Record<string, string> = {\n \u8BED\u8A00: '\u8BED\u8A00',\n \u57FA\u7840: '\u8BED\u8A00',\n \u524D\u7AEF: '\u524D\u7AEF',\n \u6846\u67B6: '\u524D\u7AEF',\n \u540E\u7AEF: '\u540E\u7AEF / \u5168\u6808',\n \u8FD0\u884C\u65F6: '\u540E\u7AEF / \u5168\u6808',\n AI: 'AI',\n \u65B9\u5411: 'AI',\n \u5DE5\u7A0B: '\u5DE5\u7A0B\u5B9E\u8DF5',\n \u5B9E\u8DF5: '\u5DE5\u7A0B\u5B9E\u8DF5',\n \u5DE5\u5177: '\u5DE5\u5177',\n \u504F\u5174\u8DA3: '\u5DE5\u5177',\n \u6570\u636E\u5E93: '\u6570\u636E',\n \u6837\u5F0F: '\u6837\u5F0F',\n };\n\n for (const [key, items] of Object.entries(grouped)) {\n console.log(chalk.white.bold(` ${groupNames[key] || key}`));\n for (const skill of items) {\n const level = levelLabel[skill.level];\n const tags = skill.tags.slice(1).map(t => chalk.gray(`#${t}`)).join(' ');\n console.log(` ${level} ${chalk.white(skill.name)} ${chalk.gray('\u00B7')} ${chalk.dim(skill.tags[0])} ${tags}`);\n }\n console.log('');\n }\n\n console.log(chalk.gray(' \u25C6\u25C6\u25C6 \u7CBE\u901A \u25C6\u25C6 \u719F\u7EC3 \u25C6 \u4E86\u89E3'));\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface StatusInfo {\n status: 'available' | 'working' | 'busy' | 'traveling';\n label: string;\n description: string;\n updatedAt: string;\n}\n\nfunction getStatus(): StatusInfo {\n // TODO: \u540E\u7EED\u53EF\u4EE5\u4ECE\u67D0\u4E2A API \u6216\u914D\u7F6E\u6587\u4EF6\u52A8\u6001\u8BFB\u53D6\n // \u76EE\u524D\u6839\u636E\u65F6\u95F4\u7B80\u5355\u4F30\u7B97\uFF0C\u540E\u7EED\u53EF\u63A5\u5165 Notion / Cal.com \u7B49\n const hour = new Date().getHours();\n const isWeekend = [0, 6].includes(new Date().getDay());\n\n let status: StatusInfo['status'] = 'working';\n let label = '\uD83D\uDCBC \u5DE5\u4F5C\u4E2D';\n let description = '\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5\uFF0C\u54CD\u5E94\u53EF\u80FD\u8F83\u6162';\n\n if (isWeekend) {\n status = 'available';\n label = '\uD83C\uDF3F \u5468\u672B\u53EF\u7EA6';\n description = '\u5468\u672B\u65F6\u95F4\u76F8\u5BF9\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A';\n } else if (hour < 9 || hour >= 22) {\n status = 'available';\n label = '\uD83C\uDF19 \u7A7A\u95F2\u4E2D';\n description = '\u975E\u5DE5\u4F5C\u65F6\u95F4\uFF0C\u968F\u65F6\u53EF\u8054\u7CFB';\n } else if (hour >= 19) {\n status = 'busy';\n label = '\uD83C\uDF03 \u4E0B\u73ED\u4E86';\n description = '\u4E0B\u73ED\u4F11\u606F\uFF0C\u770B\u5230\u4F1A\u56DE';\n }\n\n return {\n status,\n label,\n description,\n updatedAt: new Date().toISOString(),\n };\n}\n\nconst statusColors: Record<StatusInfo['status'], string> = {\n available: chalk.green,\n working: chalk.cyan,\n busy: chalk.yellow,\n traveling: chalk.magenta,\n};\n\nexport function createStatusCommand(): Command {\n const cmd = new Command('status')\n .description('\u67E5\u770B\u6211\u5F53\u524D\u7684\u72B6\u6001 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n const info = getStatus();\n const color = statusColors[info.status];\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'status', data: info }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\u2139\uFE0F \u5F53\u524D\u72B6\u6001\\n'));\n console.log(` ${color.bold(info.label)}`);\n console.log(` ${chalk.gray(info.description)}`);\n console.log('');\n\n console.log(chalk.gray(' \u72B6\u6001\u8BF4\u660E:'));\n console.log(chalk.green(' \uD83C\uDF3F available ') + chalk.gray('- \u53EF\u63A5\u6D3B / \u968F\u65F6\u53EF\u804A'));\n console.log(chalk.cyan(' \uD83D\uDCBC working ') + chalk.gray('- \u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5'));\n console.log(chalk.yellow(' \uD83C\uDF03 busy ') + chalk.gray('- \u4E0B\u73ED\u6216\u5FD9\u788C'));\n console.log(chalk.magenta(' \u2708\uFE0F traveling ') + chalk.gray('- \u51FA\u5DEE\u4E2D'));\n console.log('');\n console.log(chalk.gray(' (\u76EE\u524D\u6839\u636E\u65F6\u95F4\u81EA\u52A8\u4F30\u7B97\uFF0C\u540E\u7EED\u53EF\u63A5\u5165\u65E5\u5386\u52A8\u6001\u66F4\u65B0)'));\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface WhoAmI {\n name: string;\n bio: string;\n location: string;\n company: string;\n email: string;\n interests: string[];\n status: {\n status: 'available' | 'working' | 'busy' | 'traveling';\n label: string;\n description: string;\n };\n skills: string[];\n website: string;\n updatedAt: string;\n}\n\nfunction getStatus(): WhoAmI['status'] {\n const hour = new Date().getHours();\n const isWeekend = [0, 6].includes(new Date().getDay());\n\n if (isWeekend) {\n return { status: 'available', label: '\uD83C\uDF3F \u5468\u672B\u53EF\u7EA6', description: '\u5468\u672B\u65F6\u95F4\u76F8\u5BF9\u7075\u6D3B' };\n }\n if (hour < 9 || hour >= 22) {\n return { status: 'available', label: '\uD83C\uDF19 \u7A7A\u95F2\u4E2D', description: '\u975E\u5DE5\u4F5C\u65F6\u95F4' };\n }\n if (hour >= 19) {\n return { status: 'busy', label: '\uD83C\uDF03 \u4E0B\u73ED\u4E86', description: '\u4E0B\u73ED\u4F11\u606F' };\n }\n return { status: 'working', label: '\uD83D\uDCBC \u5DE5\u4F5C\u4E2D', description: '\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5' };\n}\n\nexport function createWhoAmICommand(): Command {\n const cmd = new Command('whoami')\n .description('\u5FEB\u901F\u4E86\u89E3\u6211 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n const status = getStatus();\n const whoami: WhoAmI = {\n name: '\u9EA6\u5F53',\n bio: 'AI \u65F6\u4EE3\u63A2\u7D22\u8005\uFF0C\u5168\u6808\u5DE5\u7A0B\u5E08\uFF0C\u805A\u7126 AI Agent \u4E0E\u5DE5\u4F5C\u6D41\u5EFA\u8BBE',\n location: '\u676D\u5DDE EFC',\n company: '\u5F71\u5200 RPA',\n email: 'borisdunk@sina.com',\n interests: ['\u71D5\u9EA6\u62FF\u94C1'],\n status,\n skills: ['TypeScript', 'Next.js/React', 'Node.js', 'AI Agent', '\u524D\u7AEF\u5DE5\u7A0B\u5316', 'CLI/TUI'],\n website: 'https://www.maidang.me',\n updatedAt: new Date().toISOString(),\n };\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'whoami', data: whoami }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83D\uDC64 \u9EA6\u5F53\\n'));\n console.log(` ${chalk.white(whoami.bio)}`);\n console.log(` ${chalk.gray('\uD83D\uDCCD')} ${chalk.gray(whoami.location)}`);\n console.log(` ${chalk.gray('\uD83C\uDFE2')} ${chalk.gray(whoami.company)}`);\n console.log(` ${chalk.gray('\uD83C\uDF10')} ${chalk.blue.underline(whoami.website)}`);\n console.log('');\n console.log(` ${whoami.status.label} ${chalk.gray(whoami.status.description)}`);\n console.log('');\n console.log(` ${chalk.gray('\uD83D\uDCE7')} ${chalk.blue(whoami.email)}`);\n console.log(` ${chalk.gray('\u2615')} ${chalk.gray(whoami.interests.join(' \u00B7 '))}`);\n console.log('');\n console.log(` ${chalk.gray('\uD83D\uDEE0\uFE0F \u6280\u80FD')} ${whoami.skills.join(chalk.gray(' \u00B7 '))}`);\n console.log('');\n });\n\n return cmd;\n}\n", "/**\n * \u8BA1\u7B97\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7\n * \u51FA\u751F\u65E5\u671F\uFF1A1997\u5E743\u670810\u65E5\n * \u8FD4\u56DE\u683C\u5F0F\uFF1A\u5E74\u9F84.\u5C0F\u7248\u672C\u53F7.\u8865\u4E01\u53F7\n */\nexport function getAgeVersion(): string {\n const birthDate = new Date(1997, 2, 10); // \u6708\u4EFD\u4ECE0\u5F00\u59CB\uFF0C\u6240\u4EE52\u662F3\u6708\n const today = new Date();\n\n let age = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u5982\u679C\u8FD8\u6CA1\u8FC7\u751F\u65E5\uFF0C\u5E74\u9F84\u51CF1\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n age--;\n }\n\n // \u8FD9\u91CC\u7684\u5C0F\u7248\u672C\u548C\u8865\u4E01\u53F7\u53EF\u4EE5\u540E\u7EED\u4ECE package.json \u8BFB\u53D6\u6216\u56FA\u5B9A\n // \u73B0\u5728\u5148\u8FD4\u56DE\u7B80\u5355\u683C\u5F0F\n return `${age}.0.0`;\n}\n\n/**\n * \u83B7\u53D6\u7248\u672C\u53F7\u548C\u751F\u65E5\u4FE1\u606F\n */\nexport function getVersionInfo(): { version: string; birthDate: Date; currentAge: number; nextBirthday: Date } {\n const birthDate = new Date(1997, 2, 10); // 1997\u5E743\u670810\u65E5\n const today = new Date();\n\n let currentAge = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u8BA1\u7B97\u4E0B\u4E00\u4E2A\u751F\u65E5\n const nextBirthday = new Date(today.getFullYear(), birthDate.getMonth(), birthDate.getDate());\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n currentAge--;\n } else {\n nextBirthday.setFullYear(today.getFullYear() + 1);\n }\n\n const version = `${currentAge}.0.0`;\n\n return {\n version,\n birthDate,\n currentAge,\n nextBirthday\n };\n}\n"],
5
- "mappings": ";;;AAEA,SAAS,WAAAA,iBAAe;;;ACFxB,SAAS,eAAe;AACxB,OAAOC,YAAW;;;ACDlB,OAAO,WAAW;AAClB,OAAO,WAAW;AAClB,OAAO,YAAY;AACnB,OAAO,SAAkB;AAsClB,SAAS,cAAc,MAAmB;AAC/C,SAAO,IAAI;AAAA,IACT;AAAA,IACA,OAAO;AAAA,EACT,CAAC;AACH;AAEO,SAAS,iBAAiB,OAAe,UAAK,SAAiB,IAAU;AAC9E,UAAQ,IAAI,MAAM,KAAK,KAAK,OAAO,MAAM,CAAC,CAAC;AAC7C;AAWO,SAAS,eAAe,OAAqB;AAClD,mBAAiB;AACjB,UAAQ,IAAI,MAAM,KAAK,KAAK;AAAA,EAAK,KAAK,EAAE,CAAC;AACzC,mBAAiB;AACnB;;;AD7DA,IAAM,WAAW;AAAA,EACf,EAAE,MAAM,UAAU,MAAM,iCAAQ;AAAA,EAChC,EAAE,MAAM,UAAU,MAAM,2BAAO;AAAA,EAC/B,EAAE,MAAM,UAAU,MAAM,qBAAM;AAAA,EAC9B,EAAE,MAAM,UAAU,MAAM,2BAAO;AAAA,EAC/B,EAAE,MAAM,WAAW,MAAM,2BAAO;AAAA,EAChC,EAAE,MAAM,SAAS,MAAM,iCAAQ;AAAA,EAC/B,EAAE,MAAM,SAAS,MAAM,2BAAO;AAAA,EAC9B,EAAE,MAAM,YAAY,MAAM,2BAAO;AAAA,EACjC,EAAE,MAAM,SAAS,MAAM,2BAAO;AAAA,EAC9B,EAAE,MAAM,cAAc,MAAM,2BAAO;AACrC;AAEO,SAAS,oBAA6B;AAC3C,QAAM,MAAM,IAAI,QAAQ,SAAS,EAC9B,YAAY,wDAAW,EACvB,OAAO,YAAY;AAClB,UAAM,UAAU,cAAc,yCAAW;AACzC,YAAQ,MAAM;AAEd,UAAM,IAAI,QAAQ,aAAW,WAAW,SAAS,GAAI,CAAC;AAEtD,YAAQ,KAAK;AAEb,YAAQ,MAAM;AAEd,YAAQ,IAAIC,OAAM,KAAK,KAAK,qDAAa,CAAC;AAC1C,YAAQ,IAAIA,OAAM,KAAK,wDAAW,CAAC;AACnC,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,YAAQ,IAAI,EAAE;AAEd,eAAWC,QAAO,UAAU;AAC1B,cAAQ,IAAI,KAAKD,OAAM,MAAM,KAAKC,KAAI,KAAK,OAAO,EAAE,CAAC,CAAC,IAAID,OAAM,KAAKC,KAAI,IAAI,CAAC,EAAE;AAAA,IAClF;AAEA,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAID,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AACtC,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AE9CA,SAAS,WAAAE,gBAAe;AACxB,OAAOC,YAAW;;;ACDlB;AAAA,EACE,QAAU;AAAA,IACR;AAAA,MACE,SAAW;AAAA,MACX,MAAQ;AAAA,MACR,QAAU;AAAA,MACV,aAAe;AAAA,MACf,cAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAW;AAAA,MACX,MAAQ;AAAA,MACR,QAAU;AAAA,MACV,aAAe;AAAA,MACf,cAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAW;AAAA,MACX,MAAQ;AAAA,MACR,QAAU;AAAA,MACV,aAAe;AAAA,MACf,cAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACA;AAAA,MACE,SAAW;AAAA,MACX,MAAQ;AAAA,MACR,QAAU;AAAA,MACV,aAAe;AAAA,MACf,cAAgB;AAAA,QACd;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;;;AD3CO,SAAS,sBAA+B;AAC7C,QAAM,MAAM,IAAIC,SAAQ,QAAQ,EAC7B,YAAY,sGAA2B,EACvC,OAAO,UAAU,gCAAY,EAC7B,OAAO,CAAC,SAAS;AAChB,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,UAAU,MAAM,eAAW,GAAG,MAAM,CAAC,CAAC;AAC7F;AAAA,IACF;AAEA,mBAAe,oCAAS;AAExB,mBAAW,OAAO,QAAQ,CAAC,KAAK,UAAU;AACxC,cAAQ,IAAI,EAAE;AAEd,cAAQ,IAAIC,OAAM,OAAO,KAAK,aAAM,IAAI,OAAO,EAAE,CAAC;AAClD,cAAQ,IAAIA,OAAM,KAAK,MAAM,IAAI,IAAI,EAAE,CAAC;AACxC,cAAQ,IAAIA,OAAM,KAAK,MAAM,IAAI,MAAM,EAAE,CAAC;AAC1C,cAAQ,IAAI,EAAE;AAEd,cAAQ,IAAIA,OAAM,MAAM,kBAAW,IAAI,WAAW,CAAC;AACnD,cAAQ,IAAI,EAAE;AAEd,UAAI,IAAI,gBAAgB,IAAI,aAAa,SAAS,GAAG;AACnD,gBAAQ,IAAIA,OAAM,KAAK,8BAAU,CAAC;AAClC,YAAI,aAAa,QAAQ,iBAAe;AACtC,kBAAQ,IAAIA,OAAM,MAAM,eAAU,WAAW,CAAC;AAAA,QAChD,CAAC;AAAA,MACH;AAEA,UAAI,QAAQ,eAAW,OAAO,SAAS,GAAG;AACxC,gBAAQ,IAAI,EAAE;AACd,gBAAQ,IAAIA,OAAM,KAAK,SAAI,OAAO,EAAE,CAAC,CAAC;AAAA,MACxC;AAAA,IACF,CAAC;AAED,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AE7CA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAClB,OAAO,UAAU;AACjB,OAAO,QAAQ;AAEf,IAAM,oBAAoB;AAC1B,IAAM,qBAAqB;AAE3B,IAAM,uBAAuB,MAAc;AACzC,MAAI,CAAC,QAAQ,KAAK,CAAC,GAAG;AACpB,WAAO,QAAQ,IAAI;AAAA,EACrB;AAEA,QAAM,iBAAiB,KAAK,QAAQ,QAAQ,KAAK,CAAC,CAAC;AACnD,MAAI;AACF,UAAM,yBAAyB,GAAG,aAAa,cAAc;AAC7D,WAAO,KAAK,QAAQ,sBAAsB;AAAA,EAC5C,QAAQ;AACN,WAAO,KAAK,QAAQ,cAAc;AAAA,EACpC;AACF;AAEA,IAAM,sBAAsB,MAAqB;AAC/C,QAAM,gBAAgB,qBAAqB;AAC3C,QAAM,iBAAiB,KAAK,QAAQ,eAAe,IAAI;AACvD,QAAM,iBAAiB;AAAA,IACrB,KAAK,QAAQ,QAAQ,IAAI,GAAG,oBAAoB;AAAA,IAChD,KAAK,QAAQ,gBAAgB,oBAAoB;AAAA,IACjD,KAAK,QAAQ,gBAAgB,qBAAqB;AAAA,IAClD,KAAK,QAAQ,eAAe,gBAAgB;AAAA,IAC5C,KAAK,QAAQ,eAAe,mBAAmB;AAAA,EACjD;AAEA,aAAW,iBAAiB,gBAAgB;AAC1C,QAAI,GAAG,WAAW,aAAa,GAAG;AAChC,aAAO;AAAA,IACT;AAAA,EACF;AAEA,SAAO;AACT;AAEO,SAAS,mBAA4B;AAC1C,QAAM,MAAM,IAAID,SAAQ,KAAK,EAC1B,MAAM,MAAM,EACZ,YAAY,0BAAM,EAClB,OAAO,YAAY;AAClB,YAAQ,IAAIC,OAAM,OAAO,KAAK,cAAI,CAAC;AACnC,YAAQ,IAAI,EAAE;AAEd,QAAI;AACF,YAAM,eAAe,oBAAoB;AAEzC,UAAI,cAAc;AAChB,YAAI;AACF,gBAAM,EAAE,SAAS,cAAc,IAAI,MAAM,OAAO,gBAAgB;AAChE,gBAAM,QAAQ,MAAM,cAAc,KAAK,cAAc;AAAA,YACnD,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,qBAAqB;AAAA,UACvB,CAAC;AAED,kBAAQ,IAAI,KAAK;AAAA,QACnB,SAAS,OAAO;AACd,kBAAQ,IAAIA,OAAM,IAAI,sCAAQ,CAAC;AAAA,QACjC;AAAA,MACF,OAAO;AACL,gBAAQ,IAAIA,OAAM,KAAK,qEAA6B,CAAC;AAAA,MACvD;AAAA,IACF,SAAS,OAAO;AACd,cAAQ,IAAIA,OAAM,KAAK,+EAAgC,CAAC;AAAA,IAC1D;AAEA,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AC7EA,OAAO,SAAS,UAAU,iBAAiB;AAC3C,SAAS,QAAQ,KAAK,MAAM,gBAAgB;AAC5C,SAAS,WAAAC,gBAAe;AAmBxB,IAAM,WAMD,CAAC,EAAE,OAAO,eAAe,UAAU,SAAS,OAAO,MAAM;AAC5D,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,UAAU,OAAO,UAAU,KAAK;AAClC,aAAO;AACP;AAAA,IACF;AACA,QAAI,IAAI,SAAS;AACf,eAAS,KAAK,IAAI,GAAG,gBAAgB,CAAC,CAAC;AAAA,IACzC,WAAW,IAAI,WAAW;AACxB,eAAS,KAAK,IAAI,MAAM,SAAS,GAAG,gBAAgB,CAAC,CAAC;AAAA,IACxD,WAAW,IAAI,QAAQ;AACrB,cAAQ;AAAA,IACV;AAAA,EACF,CAAC;AAED,SACE,oCAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,KACjD,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,MAAI,MAAC,OAAM,UAAO,oCAAO,GAC/B,oCAAC,QAAK,UAAQ,QAAC,UAAI,MAAM,QAAO,SAAE,CACpC,GACA,oCAAC,QAAK,UAAQ,MAAC,cAAc,KAAG,mFAAyB,GAEzD,oCAAC,OAAI,eAAc,UAAS,aAAY,UAAS,aAAY,QAAO,UAAU,GAAG,UAAU,KACxF,MAAM,IAAI,CAAC,MAAM,UAAU;AAC1B,UAAM,aAAa,kBAAkB;AACrC,UAAM,MAAM,OAAO,QAAQ,CAAC,EAAE,SAAS,GAAG,GAAG;AAC7C,UAAM,QAAQ,KAAK,SAAS,KAAK,SAAS,UAAU,GAAG,EAAE,KAAK,KAAK,QAAQ,UAAU,GAAG,EAAE;AAC1F,UAAM,OAAO,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAC5D,WACE;AAAA,MAAC;AAAA;AAAA,QACC,KAAK,KAAK;AAAA,QACV,UAAU;AAAA,QACV,UAAU;AAAA,QACV,SAAS;AAAA,QACT,aAAY;AAAA,QACZ,aAAa,aAAa,SAAS;AAAA;AAAA,MAEnC,oCAAC,QAAK,UAAQ,QAAE,GAAI;AAAA,MACpB,oCAAC,QAAK,UAAQ,QAAC,UAAG;AAAA,MAClB,oCAAC,OAAI,eAAc,UAAS,UAAU,KACpC,oCAAC,QAAK,MAAM,YAAY,OAAO,aAAa,SAAS,UAClD,KACH,GACC,QACC,oCAAC,QAAK,UAAQ,QAAE,IAAK,CAEzB;AAAA,MACC,cACC,oCAAC,QAAK,UAAQ,QAAC,SAAE;AAAA,IAErB;AAAA,EAEJ,CAAC,CACH,CACF;AAEJ;AAIA,IAAM,aAQD,CAAC,EAAE,MAAM,QAAQ,QAAQ,QAAQ,QAAQ,SAAS,QAAQ,MAAM;AACnE,WAAS,CAAC,OAAO,QAAQ;AACvB,QAAI,UAAU,OAAO,UAAU,KAAK;AAClC,aAAO;AACP;AAAA,IACF;AACA,QAAI,IAAI,UAAU,UAAU,OAAO,UAAU,KAAK;AAChD,aAAO;AACP;AAAA,IACF;AACA,QAAI,IAAI,aAAa,SAAS;AAC5B,aAAO;AAAA,IACT,WAAW,IAAI,cAAc,SAAS;AACpC,aAAO;AAAA,IACT;AAAA,EACF,CAAC;AAED,QAAM,aAAa,KAAK,QACrB,MAAM,IAAI,EACV,OAAmB,CAAC,KAAK,SAAS;AACjC,QAAI,KAAK,KAAK,MAAM,IAAI;AACtB,UAAI,KAAK,CAAC,CAAC;AAAA,IACb,OAAO;AACL,UAAI,IAAI,WAAW,KAAK,IAAI,IAAI,SAAS,CAAC,EAAE,WAAW,GAAG;AACxD,YAAI,KAAK,CAAC,IAAI,CAAC;AAAA,MACjB,OAAO;AACL,YAAI,IAAI,SAAS,CAAC,EAAE,KAAK,IAAI;AAAA,MAC/B;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAC,EACJ,OAAO,OAAK,EAAE,SAAS,CAAC;AAE3B,QAAM,OAAO,KAAK,QAAQ,CAAC;AAC3B,QAAM,OAAO,CAAC,KAAK,MAAM,KAAK,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG;AAE5D,SACE,oCAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,GAAG,YAAY,KAEhE,oCAAC,OAAI,cAAc,KACjB,oCAAC,QAAK,MAAI,MAAC,OAAM,UAAO,oCAAO,GAC/B,oCAAC,QAAK,UAAQ,QAAC,yDAAmB,CACpC,GAGA,oCAAC,OAAI,eAAc,UAAS,aAAY,UAAS,aAAY,QAAO,UAAU,GAAG,cAAc,GAAG,YAAY,KAC5G,oCAAC,WACC,oCAAC,QAAK,MAAI,MAAC,OAAM,WAAS,KAAK,UAAU,oBAAM,GAC/C,oCAAC,QAAK,UAAQ,QAAC,KAAE,KAAK,UAAU,UAAW,GAC1C,QAAQ,oCAAC,QAAK,UAAQ,QAAC,UAAI,IAAK,CACnC,GACC,KAAK,SACJ,oCAAC,QAAK,MAAI,MAAC,OAAM,UAAQ,KAAK,KAAM,CAExC,GAGA;AAAA,IAAC;AAAA;AAAA,MACC,eAAc;AAAA,MACd,aAAY;AAAA,MACZ,aAAY;AAAA,MACZ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAS;AAAA;AAAA,IAER,WAAW,IAAI,CAAC,MAAM,OACrB,oCAAC,OAAI,KAAK,IAAI,eAAc,UAAS,cAAc,KAAK,WAAW,SAAS,IAAI,IAAI,GAAG,YAAY,KAChG,KAAK,IAAI,CAAC,MAAM,OACf,oCAAC,QAAK,KAAK,IAAI,MAAK,UAAQ,IAAK,CAClC,CACH,CACD;AAAA,EACH,GAGC,KAAK,SAAS,KACb,oCAAC,OAAI,aAAY,UAAS,aAAY,QAAO,UAAU,GAAG,SAAS,GAAG,YAAY,KAChF,oCAAC,QAAK,UAAQ,QACX,KAAK,IAAI,SAAO,oCAAC,QAAK,KAAK,KAAK,OAAM,UAAO,KAAE,KAAI,GAAC,CAAO,CAC9D,CACF,GAIF,oCAAC,OAAI,WAAW,GAAG,YAAY,KAC7B,oCAAC,QAAK,UAAQ,QAAC,WACV,UAAU,uBAAQ,UAAI,uBAAK,UAAU,uBAAQ,UAAI,8BACtD,CACF,CACF;AAEJ;AAIA,IAAM,WAAyC,CAAC,EAAE,OAAO,MAAM;AAC7D,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAqB,CAAC,CAAC;AACjD,QAAM,CAAC,eAAe,gBAAgB,IAAI,SAAS,CAAC;AACpD,QAAM,CAAC,MAAM,OAAO,IAAI,SAAe,MAAM;AAC7C,QAAM,CAAC,SAAS,UAAU,IAAI,SAAS,IAAI;AAC3C,QAAM,CAAC,OAAO,QAAQ,IAAI,SAAwB,IAAI;AAEtD,YAAU,MAAM;AACd,UAAM,MAAM,EACT,KAAK,CAAC,QAAQ;AACb,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AACjD,aAAO,IAAI,KAAK;AAAA,IAClB,CAAC,EACA,KAAK,CAAC,SAAS;AACd,eAAS,IAAI;AACb,iBAAW,KAAK;AAAA,IAClB,CAAC,EACA,MAAM,CAAC,QAAQ;AACd,eAAS,IAAI,OAAO;AACpB,iBAAW,KAAK;AAAA,IAClB,CAAC;AAAA,EACL,GAAG,CAAC,MAAM,CAAC;AAEX,QAAM,aAAa,MAAM;AACvB,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,cAAc,MAAM;AACxB,YAAQ,QAAQ;AAAA,EAClB;AAEA,QAAM,aAAa,MAAM;AACvB,YAAQ,MAAM;AAAA,EAChB;AAEA,QAAM,aAAa,MAAM;AACvB,qBAAiB,OAAK,KAAK,IAAI,GAAG,IAAI,CAAC,CAAC;AAAA,EAC1C;AAEA,QAAM,aAAa,MAAM;AACvB,qBAAiB,OAAK,KAAK,IAAI,MAAM,SAAS,GAAG,IAAI,CAAC,CAAC;AAAA,EACzD;AAEA,MAAI,SAAS;AACX,WACE,oCAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,KACjD,oCAAC,QAAK,UAAQ,QAAC,uBAAM,CACvB;AAAA,EAEJ;AAEA,MAAI,OAAO;AACT,WACE,oCAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,KACjD,oCAAC,QAAK,OAAM,SAAM,8BAAO,KAAM,GAC/B,oCAAC,QAAK,UAAQ,QAAC,qDAAW,CAC5B;AAAA,EAEJ;AAEA,MAAI,MAAM,WAAW,GAAG;AACtB,WACE,oCAAC,OAAI,eAAc,UAAS,UAAU,GAAG,UAAU,KACjD,oCAAC,QAAK,OAAM,YAAS,0BAAI,CAC3B;AAAA,EAEJ;AAEA,MAAI,SAAS,UAAU;AACrB,WACE;AAAA,MAAC;AAAA;AAAA,QACC,MAAM,MAAM,aAAa;AAAA,QACzB,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,QAAQ;AAAA,QACR,SAAS,gBAAgB;AAAA,QACzB,SAAS,gBAAgB,MAAM,SAAS;AAAA;AAAA,IAC1C;AAAA,EAEJ;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC;AAAA,MACA;AAAA,MACA,UAAU;AAAA,MACV,SAAS;AAAA,MACT,QAAQ;AAAA;AAAA,EACV;AAEJ;AAEO,SAAS,qBAA8B;AAC5C,QAAM,SAAS;AACf,QAAM,MAAM,IAAIA,SAAQ,OAAO,EAC5B,YAAY,oIAAgC,EAC5C,OAAO,UAAU,gCAAY;AAEhC,MAAI,OAAO,CAAC,SAAS;AACnB,UAAM,YAAY,KAAK;AAEvB,QAAI,WAAW;AACb,YAAM,MAAM,EACT,KAAK,SAAO,IAAI,KAAK,CAAC,EACtB,KAAK,UAAQ,QAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,SAAS,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,EAC9F,MAAM,SAAO;AAAE,gBAAQ,MAAM,GAAG;AAAG,gBAAQ,KAAK,CAAC;AAAA,MAAG,CAAC;AACxD;AAAA,IACF;AAEA,WAAO,oCAAC,YAAS,QAAgB,CAAE;AAAA,EACrC,CAAC;AAED,SAAO;AACT;;;AClTA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AASX,SAAS,qBAA8B;AAC5C,QAAM,MAAM,IAAID,SAAQ,OAAO,EAC5B,YAAY,0FAAyB,EACrC,OAAO,UAAU,gCAAY,EAC7B,OAAO,OAAO,SAAS;AACtB,UAAM,SAAS,QAAQ,IAAI,mBAAmB;AAE9C,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,GAAG,MAAM,YAAY;AAC7C,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AACjD,YAAM,QAAgB,MAAM,IAAI,KAAK;AAErC,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,SAAS,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;AACvF;AAAA,MACF;AAEA,cAAQ,IAAIC,OAAM,KAAK,KAAK,sCAAW,CAAC;AACxC,iBAAW,QAAQ,OAAO;AACxB,gBAAQ,IAAI,KAAK,KAAK,IAAI,IAAIA,OAAM,MAAM,KAAK,IAAI,CAAC,MAAMA,OAAM,KAAK,KAAK,eAAe,EAAE,CAAC,EAAE;AAC9F,gBAAQ,IAAI,OAAOA,OAAM,KAAK,KAAK,GAAG,CAAC;AAAA,CAAI;AAAA,MAC7C;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAMA,OAAM,IAAI,yCAAW,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE,CAAC;AAC9E,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SAAO;AACT;;;ACvCA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAUX,SAAS,wBAAiC;AAC/C,QAAM,MAAM,IAAID,SAAQ,UAAU,EAC/B,YAAY,sCAAQ,EACpB,OAAO,UAAU,gCAAY,EAC7B,OAAO,OAAO,SAAS;AACtB,UAAM,SAAS,QAAQ,IAAI,mBAAmB;AAE9C,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,GAAG,MAAM,eAAe;AAChD,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AACjD,YAAM,WAAsB,MAAM,IAAI,KAAK;AAE3C,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,YAAY,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC;AAC7F;AAAA,MACF;AAEA,cAAQ,IAAIC,OAAM,KAAK,KAAK,sCAAW,CAAC;AACxC,iBAAW,WAAW,UAAU;AAC9B,gBAAQ,IAAI,KAAK,QAAQ,IAAI,IAAIA,OAAM,MAAM,KAAK,QAAQ,IAAI,CAAC,IAAIA,OAAM,KAAK,IAAI,QAAQ,QAAQ,GAAG,CAAC,EAAE;AACxG,gBAAQ,IAAI,OAAO,QAAQ,WAAW,EAAE;AACxC,YAAI,QAAQ,KAAK;AACf,kBAAQ,IAAI,OAAOA,OAAM,KAAK,QAAQ,GAAG,CAAC,EAAE;AAAA,QAC9C;AACA,gBAAQ,IAAI,EAAE;AAAA,MAChB;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAMA,OAAM,IAAI,yCAAW,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE,CAAC;AAC9E,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SAAO;AACT;;;AC5CA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAUX,SAAS,qBAA8B;AAC5C,QAAM,MAAM,IAAID,SAAQ,OAAO,EAC5B,YAAY,sCAAQ,EACpB,OAAO,UAAU,gCAAY,EAC7B,OAAO,OAAO,SAAS;AACtB,UAAM,SAAS,QAAQ,IAAI,mBAAmB;AAE9C,QAAI;AACF,YAAM,MAAM,MAAM,MAAM,GAAG,MAAM,YAAY;AAC7C,UAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,QAAQ,IAAI,MAAM,EAAE;AACjD,YAAM,QAAgB,MAAM,IAAI,KAAK;AAErC,UAAI,KAAK,MAAM;AACb,gBAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,SAAS,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC;AACvF;AAAA,MACF;AAEA,YAAM,aAAa,MAAM,OAAO,CAAC,KAAK,SAAS;AAC7C,YAAI,CAAC,IAAI,KAAK,QAAQ,EAAG,KAAI,KAAK,QAAQ,IAAI,CAAC;AAC/C,YAAI,KAAK,QAAQ,EAAE,KAAK,IAAI;AAC5B,eAAO;AAAA,MACT,GAAG,CAAC,CAA2B;AAE/B,YAAM,gBAAwC;AAAA,QAC5C,UAAU;AAAA,QACV,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAEA,cAAQ,IAAIC,OAAM,KAAK,KAAK,sCAAW,CAAC;AAExC,iBAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,UAAU,GAAG;AACrD,gBAAQ,IAAIA,OAAM,MAAM,KAAK,KAAK,cAAc,GAAG,KAAK,GAAG,EAAE,CAAC;AAC9D,mBAAW,QAAQ,OAAO;AACxB,gBAAM,SAAS,KAAK,MAAM,IAAIA,OAAM,KAAK,KAAK,GAAG,CAAC,KAAK;AACvD,kBAAQ,IAAI,OAAO,KAAK,IAAI,IAAI,KAAK,IAAI,MAAMA,OAAM,KAAK,KAAK,WAAW,CAAC,GAAG,MAAM,EAAE;AAAA,QACxF;AACA,gBAAQ,IAAI,EAAE;AAAA,MAChB;AAAA,IACF,SAAS,KAAK;AACZ,cAAQ,MAAMA,OAAM,IAAI,yCAAW,eAAe,QAAQ,IAAI,UAAU,GAAG,EAAE,CAAC;AAC9E,cAAQ,KAAK,CAAC;AAAA,IAChB;AAAA,EACF,CAAC;AAEH,SAAO;AACT;;;ACzDA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAOlB,IAAM,UAAuB;AAAA,EAC3B,OAAO;AAAA,EACP,MAAM;AACR;AAEO,SAAS,uBAAgC;AAC9C,QAAM,MAAM,IAAID,SAAQ,SAAS,EAC9B,YAAY,sGAA2B,EACvC,OAAO,UAAU,gCAAY,EAC7B,OAAO,CAAC,SAAS;AAChB,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,WAAW,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC;AAC3F;AAAA,IACF;AAEA,YAAQ,IAAIC,OAAM,KAAK,KAAK,kDAAa,CAAC;AAC1C,YAAQ,IAAI,KAAKA,OAAM,MAAM,cAAI,CAAC,KAAKA,OAAM,KAAK,QAAQ,KAAK,CAAC,EAAE;AAClE,YAAQ,IAAI,KAAKA,OAAM,KAAK,QAAQ,IAAI,CAAC,EAAE;AAC3C,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AC9BA,SAAS,WAAAC,gBAAe;AACxB,OAAOC,YAAW;AAQlB,IAAM,SAAkB;AAAA,EACtB;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,cAAI;AAAA,EACnB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,cAAI;AAAA,EACnB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,oBAAK;AAAA,EACpB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,MAAM,cAAI;AAAA,EACnB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,cAAI;AAAA,EACnB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,oBAAK;AAAA,EACpB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,sBAAO,cAAI;AAAA,EACpB;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,OAAO;AAAA,IACP,MAAM,CAAC,gBAAM,cAAI;AAAA,EACnB;AACF;AAEA,IAAM,aAA6C;AAAA,EACjD,QAAQA,OAAM,MAAM,oBAAK;AAAA,EACzB,YAAYA,OAAM,OAAO,cAAI;AAAA,EAC7B,UAAUA,OAAM,KAAK,QAAG;AAC1B;AAEO,SAAS,sBAA+B;AAC7C,QAAM,MAAM,IAAID,SAAQ,QAAQ,EAC7B,YAAY,gGAA0B,EACtC,OAAO,UAAU,gCAAY,EAC7B,OAAO,CAAC,SAAS;AAChB,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,UAAU,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC;AACzF;AAAA,IACF;AAEA,YAAQ,IAAIC,OAAM,KAAK,KAAK,sCAAW,CAAC;AAExC,UAAM,UAAU,OAAO,OAAO,CAAC,KAAK,UAAU;AAC5C,YAAM,MAAM,MAAM,KAAK,CAAC;AACxB,UAAI,CAAC,IAAI,GAAG,EAAG,KAAI,GAAG,IAAI,CAAC;AAC3B,UAAI,GAAG,EAAE,KAAK,KAAK;AACnB,aAAO;AAAA,IACT,GAAG,CAAC,CAA4B;AAEhC,UAAM,aAAqC;AAAA,MACzC,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,oBAAK;AAAA,MACL,IAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,cAAI;AAAA,MACJ,oBAAK;AAAA,MACL,oBAAK;AAAA,MACL,cAAI;AAAA,IACN;AAEA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,cAAQ,IAAIA,OAAM,MAAM,KAAK,KAAK,WAAW,GAAG,KAAK,GAAG,EAAE,CAAC;AAC3D,iBAAW,SAAS,OAAO;AACzB,cAAM,QAAQ,WAAW,MAAM,KAAK;AACpC,cAAM,OAAO,MAAM,KAAK,MAAM,CAAC,EAAE,IAAI,OAAKA,OAAM,KAAK,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,GAAG;AACvE,gBAAQ,IAAI,OAAO,KAAK,IAAIA,OAAM,MAAM,MAAM,IAAI,CAAC,IAAIA,OAAM,KAAK,MAAG,CAAC,IAAIA,OAAM,IAAI,MAAM,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE;AAAA,MAC9G;AACA,cAAQ,IAAI,EAAE;AAAA,IAChB;AAEA,YAAQ,IAAIA,OAAM,KAAK,mFAAuB,CAAC;AAC/C,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AC7GA,SAAS,WAAAC,iBAAe;AACxB,OAAOC,aAAW;AASlB,SAAS,YAAwB;AAG/B,QAAM,QAAO,oBAAI,KAAK,GAAE,SAAS;AACjC,QAAM,YAAY,CAAC,GAAG,CAAC,EAAE,UAAS,oBAAI,KAAK,GAAE,OAAO,CAAC;AAErD,MAAI,SAA+B;AACnC,MAAI,QAAQ;AACZ,MAAI,cAAc;AAElB,MAAI,WAAW;AACb,aAAS;AACT,YAAQ;AACR,kBAAc;AAAA,EAChB,WAAW,OAAO,KAAK,QAAQ,IAAI;AACjC,aAAS;AACT,YAAQ;AACR,kBAAc;AAAA,EAChB,WAAW,QAAQ,IAAI;AACrB,aAAS;AACT,YAAQ;AACR,kBAAc;AAAA,EAChB;AAEA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,EACpC;AACF;AAEA,IAAM,eAAqD;AAAA,EACzD,WAAWA,QAAM;AAAA,EACjB,SAASA,QAAM;AAAA,EACf,MAAMA,QAAM;AAAA,EACZ,WAAWA,QAAM;AACnB;AAEO,SAAS,sBAA+B;AAC7C,QAAM,MAAM,IAAID,UAAQ,QAAQ,EAC7B,YAAY,sGAA2B,EACvC,OAAO,UAAU,gCAAY,EAC7B,OAAO,CAAC,SAAS;AAChB,UAAM,OAAO,UAAU;AACvB,UAAM,QAAQ,aAAa,KAAK,MAAM;AAEtC,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,UAAU,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC;AACvF;AAAA,IACF;AAEA,YAAQ,IAAIC,QAAM,KAAK,KAAK,yCAAW,CAAC;AACxC,YAAQ,IAAI,KAAK,MAAM,KAAK,KAAK,KAAK,CAAC,EAAE;AACzC,YAAQ,IAAI,KAAKA,QAAM,KAAK,KAAK,WAAW,CAAC,EAAE;AAC/C,YAAQ,IAAI,EAAE;AAEd,YAAQ,IAAIA,QAAM,KAAK,6BAAS,CAAC;AACjC,YAAQ,IAAIA,QAAM,MAAM,wBAAiB,IAAIA,QAAM,KAAK,iDAAc,CAAC;AACvE,YAAQ,IAAIA,QAAM,KAAK,wBAAiB,IAAIA,QAAM,KAAK,wCAAU,CAAC;AAClE,YAAQ,IAAIA,QAAM,OAAO,wBAAiB,IAAIA,QAAM,KAAK,kCAAS,CAAC;AACnE,YAAQ,IAAIA,QAAM,QAAQ,4BAAkB,IAAIA,QAAM,KAAK,sBAAO,CAAC;AACnE,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAIA,QAAM,KAAK,0IAA4B,CAAC;AACpD,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;AC9EA,SAAS,WAAAC,iBAAe;AACxB,OAAOC,aAAW;AAmBlB,SAASC,aAA8B;AACrC,QAAM,QAAO,oBAAI,KAAK,GAAE,SAAS;AACjC,QAAM,YAAY,CAAC,GAAG,CAAC,EAAE,UAAS,oBAAI,KAAK,GAAE,OAAO,CAAC;AAErD,MAAI,WAAW;AACb,WAAO,EAAE,QAAQ,aAAa,OAAO,sCAAW,aAAa,mDAAW;AAAA,EAC1E;AACA,MAAI,OAAO,KAAK,QAAQ,IAAI;AAC1B,WAAO,EAAE,QAAQ,aAAa,OAAO,gCAAU,aAAa,iCAAQ;AAAA,EACtE;AACA,MAAI,QAAQ,IAAI;AACd,WAAO,EAAE,QAAQ,QAAQ,OAAO,gCAAU,aAAa,2BAAO;AAAA,EAChE;AACA,SAAO,EAAE,QAAQ,WAAW,OAAO,gCAAU,aAAa,uCAAS;AACrE;AAEO,SAAS,sBAA+B;AAC7C,QAAM,MAAM,IAAIF,UAAQ,QAAQ,EAC7B,YAAY,oFAAwB,EACpC,OAAO,UAAU,gCAAY,EAC7B,OAAO,CAAC,SAAS;AAChB,UAAM,SAASE,WAAU;AACzB,UAAM,SAAiB;AAAA,MACrB,MAAM;AAAA,MACN,KAAK;AAAA,MACL,UAAU;AAAA,MACV,SAAS;AAAA,MACT,OAAO;AAAA,MACP,WAAW,CAAC,0BAAM;AAAA,MAClB;AAAA,MACA,QAAQ,CAAC,cAAc,iBAAiB,WAAW,YAAY,kCAAS,SAAS;AAAA,MACjF,SAAS;AAAA,MACT,YAAW,oBAAI,KAAK,GAAE,YAAY;AAAA,IACpC;AAEA,QAAI,KAAK,MAAM;AACb,cAAQ,IAAI,KAAK,UAAU,EAAE,MAAM,WAAW,SAAS,UAAU,MAAM,OAAO,GAAG,MAAM,CAAC,CAAC;AACzF;AAAA,IACF;AAEA,YAAQ,IAAID,QAAM,KAAK,KAAK,0BAAS,CAAC;AACtC,YAAQ,IAAI,KAAKA,QAAM,MAAM,OAAO,GAAG,CAAC,EAAE;AAC1C,YAAQ,IAAI,KAAKA,QAAM,KAAK,WAAI,CAAC,IAAIA,QAAM,KAAK,OAAO,QAAQ,CAAC,EAAE;AAClE,YAAQ,IAAI,KAAKA,QAAM,KAAK,WAAI,CAAC,IAAIA,QAAM,KAAK,OAAO,OAAO,CAAC,EAAE;AACjE,YAAQ,IAAI,KAAKA,QAAM,KAAK,WAAI,CAAC,IAAIA,QAAM,KAAK,UAAU,OAAO,OAAO,CAAC,EAAE;AAC3E,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,KAAK,OAAO,OAAO,KAAK,IAAIA,QAAM,KAAK,OAAO,OAAO,WAAW,CAAC,EAAE;AAC/E,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,KAAKA,QAAM,KAAK,WAAI,CAAC,IAAIA,QAAM,KAAK,OAAO,KAAK,CAAC,EAAE;AAC/D,YAAQ,IAAI,KAAKA,QAAM,KAAK,QAAG,CAAC,IAAIA,QAAM,KAAK,OAAO,UAAU,KAAK,QAAK,CAAC,CAAC,EAAE;AAC9E,YAAQ,IAAI,EAAE;AACd,YAAQ,IAAI,KAAKA,QAAM,KAAK,8BAAQ,CAAC,IAAI,OAAO,OAAO,KAAKA,QAAM,KAAK,QAAK,CAAC,CAAC,EAAE;AAChF,YAAQ,IAAI,EAAE;AAAA,EAChB,CAAC;AAEH,SAAO;AACT;;;ACvEO,SAAS,gBAAwB;AACtC,QAAM,YAAY,IAAI,KAAK,MAAM,GAAG,EAAE;AACtC,QAAM,QAAQ,oBAAI,KAAK;AAEvB,MAAI,MAAM,MAAM,YAAY,IAAI,UAAU,YAAY;AACtD,QAAM,YAAY,MAAM,SAAS,IAAI,UAAU,SAAS;AAGxD,MAAI,YAAY,KAAM,cAAc,KAAK,MAAM,QAAQ,IAAI,UAAU,QAAQ,GAAI;AAC/E;AAAA,EACF;AAIA,SAAO,GAAG,GAAG;AACf;AAKO,SAAS,iBAA+F;AAC7G,QAAM,YAAY,IAAI,KAAK,MAAM,GAAG,EAAE;AACtC,QAAM,QAAQ,oBAAI,KAAK;AAEvB,MAAI,aAAa,MAAM,YAAY,IAAI,UAAU,YAAY;AAC7D,QAAM,YAAY,MAAM,SAAS,IAAI,UAAU,SAAS;AAGxD,QAAM,eAAe,IAAI,KAAK,MAAM,YAAY,GAAG,UAAU,SAAS,GAAG,UAAU,QAAQ,CAAC;AAE5F,MAAI,YAAY,KAAM,cAAc,KAAK,MAAM,QAAQ,IAAI,UAAU,QAAQ,GAAI;AAC/E;AAAA,EACF,OAAO;AACL,iBAAa,YAAY,MAAM,YAAY,IAAI,CAAC;AAAA,EAClD;AAEA,QAAM,UAAU,GAAG,UAAU;AAE7B,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AdjCA,IAAM,UAAU,IAAIE,UAAQ;AAG5B,IAAM,cAAc,eAAe;AAEnC,QACG,KAAK,SAAS,EACd,YAAY,iFAAqB,EACjC,QAAQ,cAAc,GAAG,iBAAiB,8DAAY;AAGzD,QACG,QAAQ,UAAU,EAClB,YAAY,wDAAW,EACvB,OAAO,MAAM;AACZ,QAAM,EAAE,WAAW,YAAY,cAAc,QAAQ,IAAI;AAEzD,UAAQ,IAAI,sDAAY;AACxB,UAAQ,IAAI,EAAE;AACd,UAAQ,IAAI,6BAAS,UAAU,mBAAmB,SAAS,EAAE,MAAM,WAAW,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,EAAE;AAChH,UAAQ,IAAI,6BAAS,UAAU,SAAI;AACnC,UAAQ,IAAI,6BAAS,OAAO,6BAAS;AACrC,UAAQ,IAAI,mCAAU,aAAa,mBAAmB,SAAS,EAAE,MAAM,WAAW,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,EAAE;AAEpH,QAAM,wBAAwB,KAAK,MAAM,aAAa,QAAQ,KAAI,oBAAI,KAAK,GAAE,QAAQ,MAAM,MAAO,KAAK,KAAK,GAAG;AAC/G,UAAQ,IAAI,yCAAW,qBAAqB,SAAI;AAEhD,MAAI,yBAAyB,IAAI;AAC/B,YAAQ,IAAI,sDAAY;AAAA,EAC1B;AACF,CAAC;AAEH,IAAM,YAAY,oBAAoB;AACtC,IAAM,SAAS,iBAAiB;AAChC,IAAM,WAAW,mBAAmB;AACpC,IAAM,WAAW,mBAAmB;AACpC,IAAM,cAAc,sBAAsB;AAC1C,IAAM,WAAW,mBAAmB;AACpC,IAAM,aAAa,qBAAqB;AACxC,IAAM,YAAY,oBAAoB;AACtC,IAAM,YAAY,oBAAoB;AACtC,IAAM,YAAY,oBAAoB;AAEtC,QAAQ,WAAW,SAAS;AAC5B,QAAQ,WAAW,MAAM;AACzB,QAAQ,WAAW,QAAQ;AAC3B,QAAQ,WAAW,QAAQ;AAC3B,QAAQ,WAAW,WAAW;AAC9B,QAAQ,WAAW,QAAQ;AAC3B,QAAQ,WAAW,UAAU;AAC7B,QAAQ,WAAW,SAAS;AAC5B,QAAQ,WAAW,SAAS;AAC5B,QAAQ,WAAW,SAAS;AAE5B,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,EAAE,QAAQ;AACjC,QAAM,UAAU,kBAAkB;AAClC,UAAQ,MAAM,QAAQ,IAAI;AAC5B,OAAO;AACL,UAAQ,MAAM,QAAQ,IAAI;AAC5B;",
6
- "names": ["Command", "chalk", "chalk", "cmd", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "getStatus", "Command"]
4
+ "sourcesContent": ["#!/usr/bin/env node\n\nimport { Command } from 'commander';\nimport { createHomeCommand } from './commands/home';\nimport { createCareerCommand } from './commands/career';\nimport { createCatCommand } from './commands/cat';\nimport { createPostsCommand } from './commands/posts';\nimport { createLinksCommand } from './commands/links';\nimport { createProjectsCommand } from './commands/projects';\nimport { createToolsCommand } from './commands/tools';\nimport { createContactCommand } from './commands/contact';\nimport { createSkillsCommand } from './commands/skills';\nimport { createStatusCommand } from './commands/status';\nimport { createWhoAmICommand } from './commands/whoami';\nimport { getAgeVersion, getVersionInfo } from './utils/version';\n\nconst program = new Command();\n\n// \u52A8\u6001\u8BA1\u7B97\u5E74\u9F84\u7248\u672C\u53F7\nconst versionInfo = getVersionInfo();\n\nprogram\n .name('maidang')\n .description('\u4E86\u89E3\u9EA6\u5F53 - \u4E00\u4E2A AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005')\n .version(getAgeVersion(), '-v, --version', '\u663E\u793A\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7');\n\n// \u6DFB\u52A0\u4E00\u4E2A\u7279\u6B8A\u7684\u751F\u65E5\u4FE1\u606F\u547D\u4EE4\nprogram\n .command('birthday')\n .description('\u663E\u793A\u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F')\n .action(() => {\n const { birthDate, currentAge, nextBirthday, version } = versionInfo;\n\n console.log(`\uD83C\uDF82 \u9EA6\u5F53\u7684\u751F\u65E5\u4FE1\u606F`);\n console.log('');\n console.log(`\u51FA\u751F\u65E5\u671F: ${birthDate.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n console.log(`\u5F53\u524D\u5E74\u9F84: ${currentAge} \u5C81`);\n console.log(`\u5F53\u524D\u7248\u672C: ${version} (\u5E74\u9F84\u7248\u672C)`);\n console.log(`\u4E0B\u4E00\u4E2A\u751F\u65E5: ${nextBirthday.toLocaleDateString('zh-CN', { year: 'numeric', month: 'long', day: 'numeric' })}`);\n\n const daysUntilNextBirthday = Math.ceil((nextBirthday.getTime() - new Date().getTime()) / (1000 * 60 * 60 * 24));\n console.log(`\u8DDD\u79BB\u751F\u65E5\u8FD8\u6709: ${daysUntilNextBirthday} \u5929`);\n\n if (daysUntilNextBirthday <= 30) {\n console.log(`\uD83C\uDF89 \u5FEB\u8981\u8FC7\u751F\u65E5\u4E86\uFF01`);\n }\n });\n\nconst careerCmd = createCareerCommand();\nconst catCmd = createCatCommand();\nconst postsCmd = createPostsCommand();\nconst linksCmd = createLinksCommand();\nconst projectsCmd = createProjectsCommand();\nconst toolsCmd = createToolsCommand();\nconst contactCmd = createContactCommand();\nconst skillsCmd = createSkillsCommand();\nconst statusCmd = createStatusCommand();\nconst whoamiCmd = createWhoAmICommand();\n\nprogram.addCommand(careerCmd);\nprogram.addCommand(catCmd);\nprogram.addCommand(postsCmd);\nprogram.addCommand(linksCmd);\nprogram.addCommand(projectsCmd);\nprogram.addCommand(toolsCmd);\nprogram.addCommand(contactCmd);\nprogram.addCommand(skillsCmd);\nprogram.addCommand(statusCmd);\nprogram.addCommand(whoamiCmd);\n\nif (!process.argv.slice(2).length) {\n const homeCmd = createHomeCommand();\n homeCmd.parse(process.argv);\n} else {\n program.parse(process.argv);\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport { createSpinner } from '../utils/display';\n\nconst commands = [\n { name: 'whoami', desc: '\u4E86\u89E3\u6211' },\n { name: 'skills', desc: '\u6280\u80FD & \u5174\u8DA3' },\n { name: 'career', desc: '\u5DE5\u4F5C' },\n { name: 'posts', desc: '\u63A8\u6587' },\n { name: 'links', desc: '\u94FE\u63A5' },\n { name: 'projects', desc: '\u9879\u76EE' },\n { name: 'cat | meow', desc: '\u9EA6\u9EA6' },\n];\n\nexport function createHomeCommand(): Command {\n const cmd = new Command('maidang')\n .description('\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C')\n .action(async () => {\n const spinner = createSpinner('\u6B63\u5728\u53EC\u5524...');\n spinner.start();\n\n await new Promise(resolve => setTimeout(resolve, 800));\n\n spinner.stop();\n console.clear();\n\n console.log(chalk.bold('\u6211\u662F \u9EA6\u5F53'));\n console.log(chalk.dim('\u676D\u5DDE\uFF0C\u71D5\u9EA6\u62FF\u94C1\u7231\u597D\u8005\uFF0C\u4E3E\u94C1\uFF0C\u98DE\u76D8\uFF0C\u5076\u5C14\u5F39\u7434\uFF0C\u5199\u4EE3\u7801'));\n console.log('');\n console.log(chalk.dim('\u2500'.repeat(40)));\n console.log('');\n\n for (const cmd of commands) {\n console.log(` ${chalk.white(cmd.name.padEnd(12))} ${chalk.dim(cmd.desc)}`);\n }\n\n console.log('');\n console.log(chalk.dim('\u2500'.repeat(40)));\n console.log('');\n });\n\n return cmd;\n}\n", "import chalk from 'chalk';\nimport boxen from 'boxen';\nimport figlet from 'figlet';\nimport ora, { Ora } from 'ora';\n\nexport async function displayTitle(text: string): Promise<void> {\n return new Promise((resolve) => {\n figlet.text(text, {\n font: 'Big',\n horizontalLayout: 'default',\n verticalLayout: 'default'\n }, (err, data) => {\n if (err) {\n console.log(chalk.cyan.bold(text));\n } else {\n console.log(chalk.cyan(data));\n }\n resolve();\n });\n });\n}\n\nexport function displayBox(content: string, options?: {\n title?: string;\n borderColor?: string;\n padding?: number;\n}): void {\n const borderOptions: any = {\n padding: options?.padding || 1,\n borderColor: options?.borderColor || 'cyan',\n borderStyle: 'round'\n };\n\n if (options?.title) {\n borderOptions.title = options.title;\n borderOptions.titleAlignment = 'center';\n }\n\n console.log(boxen(content, borderOptions));\n}\n\nexport function createSpinner(text: string): Ora {\n return ora({\n text,\n color: 'cyan'\n });\n}\n\nexport function displaySeparator(char: string = '\u2500', length: number = 50): void {\n console.log(chalk.gray(char.repeat(length)));\n}\n\nexport function displayItem(icon: string, text: string, color: string = 'cyan'): void {\n const colorMethod = (chalk as any)[color];\n if (colorMethod) {\n console.log(colorMethod(icon), text);\n } else {\n console.log(chalk.cyan(icon), text);\n }\n}\n\nexport function displaySection(title: string): void {\n displaySeparator();\n console.log(chalk.bold.cyan(`\\n${title}`));\n displaySeparator();\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport careerData from '../data/career.json';\nimport { displaySection } from '../utils/display';\n\nexport function createCareerCommand(): Command {\n const cmd = new Command('career')\n .description('\u67E5\u770B\u6211\u7684\u5DE5\u4F5C\u7ECF\u5386 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'career', data: careerData }, null, 2));\n return;\n }\n\n displaySection('\uD83D\uDCBC \u5DE5\u4F5C\u7ECF\u5386');\n\n careerData.career.forEach((job, index) => {\n console.log('');\n\n console.log(chalk.yellow.bold(`\uD83D\uDCCB ${job.company}`));\n console.log(chalk.cyan(` ${job.role}`));\n console.log(chalk.gray(` ${job.period}`));\n console.log('');\n\n console.log(chalk.white(' \uD83D\uDCDD ' + job.description));\n console.log('');\n\n if (job.achievements && job.achievements.length > 0) {\n console.log(chalk.gray(' \u4E3B\u8981\u6210\u5C31:'));\n job.achievements.forEach(achievement => {\n console.log(chalk.green(' \u2713 ' + achievement));\n });\n }\n\n if (index < careerData.career.length - 1) {\n console.log('');\n console.log(chalk.gray('\u2500'.repeat(40)));\n }\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"career\": [\n {\n \"company\": \"\u5F71\u5200 RPA\uFF08AI Power \u56E2\u961F\uFF09\",\n \"role\": \"\u5168\u6808\u5DE5\u7A0B\u5E08 / AI Agent \u5F00\u53D1\u8005\",\n \"period\": \"2025.10 - \u81F3\u4ECA\",\n \"description\": \"\u805A\u7126 AI \u5DE5\u4F5C\u6D41\u5EFA\u8BBE\uFF0C\u4E3B\u5BFC AI Agent \u65B9\u6848\u8BBE\u8BA1\u4E0E\u843D\u5730\uFF0C\u63A8\u52A8\u4E1A\u52A1\u4ECE\u529F\u80FD\u5F00\u53D1\u8D70\u5411\u667A\u80FD\u5316\u6D41\u7A0B\u7F16\u6392\u3002\",\n \"achievements\": [\n \"\u8D1F\u8D23 AI \u5DE5\u4F5C\u6D41\u76F8\u5173\u80FD\u529B\u5EFA\u8BBE\uFF0C\u63A8\u52A8\u56E2\u961F\u5F62\u6210\u53EF\u590D\u7528\u7684\u6D41\u7A0B\u5316\u4EA4\u4ED8\u65B9\u5F0F\",\n \"\u62C5\u4EFB AI Agent \u6838\u5FC3\u5F00\u53D1\u8005\uFF0C\u8986\u76D6\u4ECE\u9700\u6C42\u62C6\u89E3\u3001\u63D0\u793A\u8BCD\u8BBE\u8BA1\u5230\u670D\u52A1\u7AEF\u843D\u5730\u7684\u5B8C\u6574\u94FE\u8DEF\",\n \"\u4EE5\u5168\u6808\u65B9\u5F0F\u534F\u540C\u524D\u540E\u7AEF\u5F00\u53D1\uFF0C\u63D0\u5347\u590D\u6742\u4E1A\u52A1\u5728\u7814\u53D1\u4FA7\u7684\u843D\u5730\u6548\u7387\",\n \"\u5728\u56E2\u961F\u5185\u63A8\u8FDB AI \u5DE5\u7A0B\u5316\u5B9E\u8DF5\uFF0C\u6301\u7EED\u63D0\u5347\u9879\u76EE\u7A33\u5B9A\u6027\u4E0E\u8FED\u4EE3\u901F\u5EA6\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u4E0D\u5FD8\u667A\u80FD\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u5168\u6808\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2024.10 - 2025.09\",\n \"description\": \"\u53C2\u4E0E AI \u89C6\u9891\u751F\u6210\u4E0E\u5E7F\u544A\u6295\u653E\u4EA7\u54C1\u5EFA\u8BBE\uFF0C\u8D1F\u8D23\u524D\u540E\u7AEF\u8054\u52A8\u548C\u6838\u5FC3\u529F\u80FD\u843D\u5730\u3002\",\n \"achievements\": [\n \"\u57FA\u4E8E Next.js + React + Node.js \u53C2\u4E0E\u9AD8\u4EA4\u4E92\u5E94\u7528\u4E0E\u4E2D\u53F0\u670D\u52A1\u5F00\u53D1\",\n \"\u53C2\u4E0E ASR\u3001LLM\u3001\u89C6\u9891\u4EFB\u52A1\u94FE\u8DEF\u7B49 AI \u76F8\u5173\u529F\u80FD\u5EFA\u8BBE\",\n \"\u53C2\u4E0E\u81EA\u52A8\u5316\u6295\u653E\u4E0E\u5DE5\u7A0B\u5316\u6D41\u7A0B\u5EFA\u8BBE\uFF0C\u63D0\u5347\u4E1A\u52A1\u5904\u7406\u6548\u7387\"\n ]\n },\n {\n \"company\": \"\u676D\u5DDE\u89C6\u674F\u79D1\u6280\u6709\u9650\u516C\u53F8\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2022.10 - 2024.06\",\n \"description\": \"\u8D1F\u8D23\u524D\u7AEF\u5DE5\u7A0B\u5316\u3001\u4E1A\u52A1\u7CFB\u7EDF\u5F00\u53D1\u4E0E\u56E2\u961F\u534F\u4F5C\u6D41\u7A0B\u4F18\u5316\u3002\",\n \"achievements\": [\n \"\u63A8\u52A8\u89C4\u8303\u4F53\u7CFB\u843D\u5730\uFF08Lint\u3001Commit \u89C4\u8303\u3001\u811A\u624B\u67B6\u7B49\uFF09\uFF0C\u63D0\u5347\u56E2\u961F\u7814\u53D1\u4E00\u81F4\u6027\",\n \"\u53C2\u4E0E\u6784\u5EFA\u79C1\u6709\u5E93\u4E0E\u5DE5\u7A0B\u5316\u4F53\u7CFB\uFF0C\u63D0\u5347\u591A\u9879\u76EE\u590D\u7528\u6548\u7387\",\n \"\u652F\u6491\u540E\u53F0\u7CFB\u7EDF\u4E0E\u6838\u5FC3\u4E1A\u52A1\u9875\u9762\u7684\u6301\u7EED\u8FED\u4EE3\"\n ]\n },\n {\n \"company\": \"\u534E\u76D6\u5BB6\u5C45\u3001\u9177\u5BB6\u4E50\uFF08\u4E0D\u540C\u516C\u53F8\uFF09\",\n \"role\": \"\u524D\u7AEF\u5F00\u53D1\u5DE5\u7A0B\u5E08\",\n \"period\": \"2020.11 - 2022.06\",\n \"description\": \"\u65E9\u671F\u7ECF\u5386\uFF0C\u4E3B\u8981\u8D1F\u8D23 2D Canvas \u76F8\u5173\u529F\u80FD\u5F00\u53D1\u4E0E\u7EF4\u62A4\u3002\",\n \"achievements\": [\n \"\u53C2\u4E0E 2D \u8BBE\u8BA1\u5DE5\u5177\u4E0E\u4E3B\u7AD9\u76F8\u5173\u524D\u7AEF\u529F\u80FD\u5F00\u53D1\",\n \"\u8D1F\u8D23\u753B\u5E03\u4EA4\u4E92\u3001\u5386\u53F2\u8BB0\u5F55\u4E0E\u5FEB\u6377\u952E\u7B49\u80FD\u529B\u8FED\u4EE3\",\n \"\u4E0E\u4EA7\u54C1\u3001\u8BBE\u8BA1\u3001\u6D4B\u8BD5\u534F\u4F5C\u63A8\u8FDB\u7248\u672C\u4EA4\u4ED8\"\n ]\n }\n ]\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\nimport path from 'path';\nimport fs from 'fs';\n\nconst RETRO_PIXEL_WIDTH = 28;\nconst RETRO_PIXEL_HEIGHT = 16;\n\nconst resolveExecutableDir = (): string => {\n if (!process.argv[1]) {\n return process.cwd();\n }\n\n const executablePath = path.resolve(process.argv[1]);\n try {\n const resolvedExecutablePath = fs.realpathSync(executablePath);\n return path.dirname(resolvedExecutablePath);\n } catch {\n return path.dirname(executablePath);\n }\n};\n\nconst resolveCatImagePath = (): string | null => {\n const executableDir = resolveExecutableDir();\n const packageRootDir = path.resolve(executableDir, '..');\n const candidatePaths = [\n path.resolve(process.cwd(), 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'src/assets/cat.jpg'),\n path.resolve(packageRootDir, 'dist/assets/cat.jpg'),\n path.resolve(executableDir, 'assets/cat.jpg'),\n path.resolve(executableDir, '../assets/cat.jpg')\n ];\n\n for (const candidatePath of candidatePaths) {\n if (fs.existsSync(candidatePath)) {\n return candidatePath;\n }\n }\n\n return null;\n};\n\nexport function createCatCommand(): Command {\n const cmd = new Command('cat')\n .alias('meow')\n .description('\u67E5\u770B\u9EA6\u9EA6')\n .action(async () => {\n console.log(chalk.yellow.bold('\u9EA6\u9EA6'));\n console.log('');\n\n try {\n const catImagePath = resolveCatImagePath();\n\n if (catImagePath) {\n try {\n const { default: terminalImage } = await import('terminal-image');\n const image = await terminalImage.file(catImagePath, {\n width: RETRO_PIXEL_WIDTH,\n height: RETRO_PIXEL_HEIGHT,\n preserveAspectRatio: true\n });\n\n console.log(image);\n } catch (error) {\n console.log(chalk.red('\u56FE\u7247\u6E32\u67D3\u5931\u8D25'));\n }\n } else {\n console.log(chalk.gray('\u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n } catch (error) {\n console.log(chalk.gray('\uD83D\uDCF8 \u8BF7\u5C06\u732B\u54AA\u56FE\u7247\u653E\u5728 src/assets/cat.jpg'));\n }\n\n console.log('');\n });\n\n return cmd;\n}\n", "import React, { useState, useEffect } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\n\ninterface PostItem {\n slug: string;\n title?: string | null;\n content: string;\n summary?: string | null;\n author?: string | null;\n handle?: string | null;\n date?: string | null;\n time?: string | null;\n tags?: string[];\n publishedAt?: string | null;\n}\n\ntype View = 'LIST' | 'DETAIL';\n\n// \u2500\u2500 List view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst ListView: React.FC<{\n posts: PostItem[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n onEnter: () => void;\n onQuit: () => void;\n}> = ({ posts, selectedIndex, onSelect, onEnter, onQuit }) => {\n useInput((input, key) => {\n if (input === 'q' || input === 'Q') {\n onQuit();\n return;\n }\n if (key.upArrow) {\n onSelect(Math.max(0, selectedIndex - 1));\n } else if (key.downArrow) {\n onSelect(Math.min(posts.length - 1, selectedIndex + 1));\n } else if (key.return) {\n onEnter();\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\uD83D\uDC26 \u63A8\u6587\u5217\u8868</Text>\n <Text dimColor> \u00B7 {posts.length} \u6761</Text>\n </Box>\n <Text dimColor marginBottom={1}>\u2191\u2193 \u9009\u62E9 \u00B7 Enter \u67E5\u770B\u8BE6\u60C5 \u00B7 q \u9000\u51FA</Text>\n\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\" paddingX={0} paddingY={0}>\n {posts.map((post, index) => {\n const isSelected = selectedIndex === index;\n const num = String(index + 1).padStart(2, ' ');\n const title = post.title || post.summary?.substring(0, 40) || post.content.substring(0, 40);\n const meta = [post.date, post.time].filter(Boolean).join(' ');\n return (\n <Box\n key={post.slug}\n paddingX={1}\n paddingY={0}\n marginY={0}\n borderStyle=\"single\"\n borderColor={isSelected ? 'cyan' : 'gray'}\n >\n <Text dimColor>{num}</Text>\n <Text dimColor> \u2502 </Text>\n <Box flexDirection=\"column\" flexGrow={1}>\n <Text bold={isSelected} color={isSelected ? 'cyan' : undefined}>\n {title}\n </Text>\n {meta && (\n <Text dimColor>{meta}</Text>\n )}\n </Box>\n {isSelected && (\n <Text dimColor> \u2190</Text>\n )}\n </Box>\n );\n })}\n </Box>\n </Box>\n );\n};\n\n// \u2500\u2500 Detail view \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst DetailView: React.FC<{\n post: PostItem;\n onBack: () => void;\n onQuit: () => void;\n onPrev: () => void;\n onNext: () => void;\n hasPrev: boolean;\n hasNext: boolean;\n}> = ({ post, onBack, onQuit, onPrev, onNext, hasPrev, hasNext }) => {\n useInput((input, key) => {\n if (input === 'q' || input === 'Q') {\n onQuit();\n return;\n }\n if (key.escape || input === 'b' || input === 'B') {\n onBack();\n return;\n }\n if (key.leftArrow && hasPrev) {\n onPrev();\n } else if (key.rightArrow && hasNext) {\n onNext();\n }\n });\n\n const paragraphs = post.content\n .split('\\n')\n .reduce<string[][]>((acc, line) => {\n if (line.trim() === '') {\n acc.push([]);\n } else {\n if (acc.length === 0 || acc[acc.length - 1].length === 0) {\n acc.push([line]);\n } else {\n acc[acc.length - 1].push(line);\n }\n }\n return acc;\n }, [])\n .filter(p => p.length > 0);\n\n const tags = post.tags || [];\n const meta = [post.date, post.time].filter(Boolean).join(' ');\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1} flexShrink={0}>\n {/* Header */}\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\uD83D\uDCC4 \u63A8\u6587\u8BE6\u60C5</Text>\n <Text dimColor> \u00B7 Esc/q \u8FD4\u56DE \u00B7 \u2190\u2192 \u5207\u6362</Text>\n </Box>\n\n {/* Meta */}\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"cyan\" paddingX={1} marginBottom={0} flexShrink={0}>\n <Box>\n <Text bold color=\"white\">{post.author || '\u9EA6\u5F53\u52B3'}</Text>\n <Text dimColor> {post.handle || '@maidang'}</Text>\n {meta && <Text dimColor> \u00B7 {meta}</Text>}\n </Box>\n {post.title && (\n <Text bold color=\"cyan\">{post.title}</Text>\n )}\n </Box>\n\n {/* Content */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor=\"gray\"\n paddingX={1}\n marginY={0}\n flexShrink={1}\n overflow=\"hidden\"\n >\n {paragraphs.map((para, pi) => (\n <Box key={pi} flexDirection=\"column\" marginBottom={pi < paragraphs.length - 1 ? 1 : 0} flexShrink={0}>\n {para.map((line, li) => (\n <Text key={li} wrap=\"wrap\">{line}</Text>\n ))}\n </Box>\n ))}\n </Box>\n\n {/* Tags */}\n {tags.length > 0 && (\n <Box borderStyle=\"single\" borderColor=\"gray\" paddingX={1} marginY={0} flexShrink={0}>\n <Text dimColor>\n {tags.map(tag => <Text key={tag} color=\"cyan\">#{tag} </Text>)}\n </Text>\n </Box>\n )}\n\n {/* Footer */}\n <Box marginTop={1} flexShrink={0}>\n <Text dimColor>\n \u2190 {hasPrev ? '\u4E0A\u4E00\u7BC7' : '\u65E0'}\u3000\u3000\u2192 {hasNext ? '\u4E0B\u4E00\u7BC7' : '\u65E0'}\u3000\u3000Esc \u8FD4\u56DE\n </Text>\n </Box>\n </Box>\n );\n};\n\n// \u2500\u2500 App \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst PostsApp: React.FC<{ apiUrl: string }> = ({ apiUrl }) => {\n const [posts, setPosts] = useState<PostItem[]>([]);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [view, setView] = useState<View>('LIST');\n const [loading, setLoading] = useState(true);\n const [error, setError] = useState<string | null>(null);\n\n useEffect(() => {\n fetch(apiUrl)\n .then((res) => {\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n return res.json();\n })\n .then((data) => {\n setPosts(data);\n setLoading(false);\n })\n .catch((err) => {\n setError(err.message);\n setLoading(false);\n });\n }, [apiUrl]);\n\n const handleQuit = () => {\n process.exit(0);\n };\n\n const handleEnter = () => {\n setView('DETAIL');\n };\n\n const handleBack = () => {\n setView('LIST');\n };\n\n const handlePrev = () => {\n setSelectedIndex(i => Math.max(0, i - 1));\n };\n\n const handleNext = () => {\n setSelectedIndex(i => Math.min(posts.length - 1, i + 1));\n };\n\n if (loading) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text dimColor>\u52A0\u8F7D\u4E2D...</Text>\n </Box>\n );\n }\n\n if (error) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text color=\"red\">\u52A0\u8F7D\u5931\u8D25: {error}</Text>\n <Text dimColor>\u8BF7\u68C0\u67E5\u7F51\u7EDC\u6216API\u5730\u5740</Text>\n </Box>\n );\n }\n\n if (posts.length === 0) {\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Text color=\"yellow\">\u6682\u65E0\u63A8\u6587</Text>\n </Box>\n );\n }\n\n if (view === 'DETAIL') {\n return (\n <DetailView\n post={posts[selectedIndex]}\n onBack={handleBack}\n onQuit={handleQuit}\n onPrev={handlePrev}\n onNext={handleNext}\n hasPrev={selectedIndex > 0}\n hasNext={selectedIndex < posts.length - 1}\n />\n );\n }\n\n return (\n <ListView\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onEnter={handleEnter}\n onQuit={handleQuit}\n />\n );\n};\n\nexport function createPostsCommand(): Command {\n const apiUrl = 'https://www.maidang.me/api/social-posts?type=social';\n const cmd = new Command('posts')\n .description('\u63A8\u6587\u5217\u8868\uFF0C\u8FDB\u5165\u540E\u53EF\u67E5\u770B\u8BE6\u60C5 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F');\n\n cmd.action((opts) => {\n const wantsJson = opts.json;\n\n if (wantsJson) {\n fetch(apiUrl)\n .then(res => res.json())\n .then(data => console.log(JSON.stringify({ tool: 'maidang', command: 'posts', data }, null, 2)))\n .catch(err => { console.error(err); process.exit(1); });\n return;\n }\n\n render(<PostsApp apiUrl={apiUrl} />);\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Link {\n name: string;\n url: string;\n icon: string;\n description: string | null;\n}\n\nexport function createLinksCommand(): Command {\n const cmd = new Command('links')\n .description('\u67E5\u770B\u793E\u4EA4\u94FE\u63A5 (--json \u8F93\u51FA\u7ED3\u6784\u5316\u6570\u636E)')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/links`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const links: Link[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'links', data: links }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83C\uDF10 \u793E\u4EA4\u94FE\u63A5\\n'));\n for (const link of links) {\n console.log(` ${link.icon} ${chalk.white(link.name)} - ${chalk.gray(link.description || '')}`);\n console.log(` ${chalk.blue(link.url)}\\n`);\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u94FE\u63A5\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Project {\n name: string;\n description: string;\n url: string | null;\n icon: string;\n category: string;\n}\n\nexport function createProjectsCommand(): Command {\n const cmd = new Command('projects')\n .description('\u67E5\u770B\u4E2A\u4EBA\u9879\u76EE')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/projects`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const projects: Project[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'projects', data: projects }, null, 2));\n return;\n }\n\n console.log(chalk.cyan.bold('\uD83D\uDE80 \u4E2A\u4EBA\u9879\u76EE\\n'));\n for (const project of projects) {\n console.log(` ${project.icon} ${chalk.white.bold(project.name)} ${chalk.gray(`[${project.category}]`)}`);\n console.log(` ${project.description}`);\n if (project.url) {\n console.log(` ${chalk.blue(project.url)}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u9879\u76EE\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Tool {\n name: string;\n description: string;\n icon: string;\n url: string | null;\n category: string;\n}\n\nexport function createToolsCommand(): Command {\n const cmd = new Command('tools')\n .description('\u67E5\u770B\u5E38\u7528\u5DE5\u5177')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action(async (opts) => {\n const apiUrl = process.env.MAIDANG_API_URL || 'http://localhost:3000';\n\n try {\n const res = await fetch(`${apiUrl}/api/tools`);\n if (!res.ok) throw new Error(`HTTP ${res.status}`);\n const tools: Tool[] = await res.json();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'tools', data: tools }, null, 2));\n return;\n }\n\n const byCategory = tools.reduce((acc, tool) => {\n if (!acc[tool.category]) acc[tool.category] = [];\n acc[tool.category].push(tool);\n return acc;\n }, {} as Record<string, Tool[]>);\n\n const categoryNames: Record<string, string> = {\n software: '\u5E38\u7528\u8F6F\u4EF6',\n device: '\u8BBE\u5907',\n desktop: '\u684C\u9762\u88C5\u5907',\n };\n\n console.log(chalk.cyan.bold('\uD83D\uDD27 \u5E38\u7528\u5DE5\u5177\\n'));\n\n for (const [cat, items] of Object.entries(byCategory)) {\n console.log(chalk.white.bold(` ${categoryNames[cat] || cat}`));\n for (const tool of items) {\n const urlStr = tool.url ? ` ${chalk.blue(tool.url)}` : '';\n console.log(` ${tool.icon} ${tool.name} - ${chalk.gray(tool.description)}${urlStr}`);\n }\n console.log('');\n }\n } catch (err) {\n console.error(chalk.red(`\u83B7\u53D6\u5DE5\u5177\u5931\u8D25: ${err instanceof Error ? err.message : err}`));\n process.exit(1);\n }\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\nfunction hr(char = '\u2500', len = 40) {\n console.log(chalk.dim(char.repeat(len)));\n}\n\nexport function createContactCommand(): Command {\n const cmd = new Command('contact')\n .description('\u8054\u7CFB\u65B9\u5F0F')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n const data = { email: 'borisdunk@sina.com', note: '\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE' };\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'contact', data }, null, 2));\n return;\n }\n\n console.log('');\n console.log(chalk.bold('\u8054\u7CFB\u65B9\u5F0F'));\n console.log('');\n hr();\n console.log('');\n console.log(` Email ${chalk.blue('borisdunk@sina.com')}`);\n console.log('');\n console.log(` ${chalk.dim('\u56DE\u590D\u53EF\u80FD\u8F83\u6162\uFF0C\u770B\u5230\u4F1A\u56DE')}`);\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface Skill {\n name: string;\n tags: string[];\n}\n\nconst skills: Skill[] = [\n // \u751F\u6D3B\u65B9\u5F0F\n { name: '\u4E3E\u94C1 / \u5065\u8EAB', tags: ['life'] },\n { name: '\u98DE\u76D8', tags: ['life'] },\n { name: '\u5409\u4ED6', tags: ['life'] },\n { name: '\u71D5\u9EA6\u62FF\u94C1', tags: ['life'] },\n // \u6280\u672F\n { name: 'TypeScript', tags: ['tech'] },\n { name: 'Next.js / React', tags: ['tech'] },\n { name: 'Node.js', tags: ['tech'] },\n { name: 'AI Agent / LLM', tags: ['tech'] },\n { name: 'CLI / TUI \u5F00\u53D1', tags: ['tech'] },\n { name: '\u524D\u7AEF\u5DE5\u7A0B\u5316', tags: ['tech'] },\n { name: 'Prisma / PostgreSQL', tags: ['tech'] },\n];\n\nfunction hr(char = '\u2500', len = 40) {\n console.log(chalk.dim(char.repeat(len)));\n}\n\nexport function createSkillsCommand(): Command {\n const cmd = new Command('skills')\n .description('\u6280\u80FD\u4E0E\u5174\u8DA3')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'skills', data: skills }, null, 2));\n return;\n }\n\n const life = skills.filter(s => s.tags.includes('life'));\n const tech = skills.filter(s => s.tags.includes('tech'));\n\n console.log('');\n console.log(chalk.bold('\u751F\u6D3B'));\n console.log('');\n console.log(' ' + life.map(s => chalk.white(s.name)).join(chalk.dim(' \u00B7 ')));\n console.log('');\n hr();\n console.log('');\n console.log(chalk.bold('\u6280\u672F'));\n console.log('');\n console.log(' ' + tech.map(s => chalk.white(s.name)).join(chalk.dim(' \u00B7 ')));\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface StatusInfo {\n status: 'available' | 'working' | 'busy' | 'traveling';\n label: string;\n description: string;\n updatedAt: string;\n}\n\nfunction getStatus(): StatusInfo {\n const hour = new Date().getHours();\n const isWeekend = [0, 6].includes(new Date().getDay());\n\n if (isWeekend) return { status: 'available', label: '\u5468\u672B\u53EF\u7EA6', description: '\u65F6\u95F4\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A' };\n if (hour < 9 || hour >= 22) return { status: 'available', label: '\u7A7A\u95F2\u4E2D', description: '\u975E\u5DE5\u4F5C\u65F6\u95F4' };\n if (hour >= 19) return { status: 'busy', label: '\u4E0B\u73ED\u4E86', description: '\u4F11\u606F\u4E2D\uFF0C\u770B\u5230\u4F1A\u56DE' };\n return { status: 'working', label: '\u5DE5\u4F5C\u4E2D', description: '\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5' };\n}\n\nfunction hr(char = '\u2500', len = 40) {\n console.log(chalk.dim(char.repeat(len)));\n}\n\nexport function createStatusCommand(): Command {\n const cmd = new Command('status')\n .description('\u5F53\u524D\u72B6\u6001')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n const info = getStatus();\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'status', data: info }, null, 2));\n return;\n }\n\n console.log('');\n console.log(chalk.bold('\u5F53\u524D\u72B6\u6001'));\n console.log('');\n hr();\n console.log('');\n console.log(` ${chalk.cyan('\u25CF')} ${chalk.white(info.label)}`);\n console.log(` ${chalk.dim(info.description)}`);\n console.log('');\n });\n\n return cmd;\n}\n", "import { Command } from 'commander';\nimport chalk from 'chalk';\n\ninterface WhoAmI {\n tagline: string;\n location: string;\n status: {\n status: 'available' | 'working' | 'busy' | 'traveling';\n label: string;\n description: string;\n };\n links: { label: string; url: string }[];\n contact: string;\n website: string;\n updatedAt: string;\n}\n\nfunction getStatus(): WhoAmI['status'] {\n const hour = new Date().getHours();\n const isWeekend = [0, 6].includes(new Date().getDay());\n\n if (isWeekend) return { status: 'available', label: '\u5468\u672B\u53EF\u7EA6', description: '\u65F6\u95F4\u7075\u6D3B\uFF0C\u53EF\u4EE5\u804A\u804A' };\n if (hour < 9 || hour >= 22) return { status: 'available', label: '\u7A7A\u95F2\u4E2D', description: '\u975E\u5DE5\u4F5C\u65F6\u95F4' };\n if (hour >= 19) return { status: 'busy', label: '\u4E0B\u73ED\u4E86', description: '\u4F11\u606F\u4E2D\uFF0C\u770B\u5230\u4F1A\u56DE' };\n return { status: 'working', label: '\u5DE5\u4F5C\u4E2D', description: '\u6B63\u5E38\u5DE5\u4F5C\u65F6\u6BB5' };\n}\n\nfunction hr(char = '\u2500', len = 40) {\n console.log(chalk.dim(char.repeat(len)));\n}\n\nexport function createWhoAmICommand(): Command {\n const cmd = new Command('whoami')\n .description('\u4E86\u89E3\u6211')\n .option('--json', '\u8F93\u51FA JSON \u683C\u5F0F')\n .action((opts) => {\n const status = getStatus();\n const whoami: WhoAmI = {\n tagline: '\u5728\u676D\u5DDE\u3002\u71D5\u9EA6\u62FF\u94C1\u7231\u597D\u8005\uFF0C\u4E3E\u94C1\uFF0C\u98DE\u76D8\uFF0C\u5076\u5C14\u5F39\u7434\uFF0C\u5199\u4EE3\u7801\u3002',\n location: '\u676D\u5DDE \u00B7 EFC',\n status,\n links: [\n { label: 'Blog', url: 'https://www.maidang.me' },\n ],\n contact: 'borisdunk@sina.com',\n website: 'https://www.maidang.me',\n updatedAt: new Date().toISOString(),\n };\n\n if (opts.json) {\n console.log(JSON.stringify({ tool: 'maidang', command: 'whoami', data: whoami }, null, 2));\n return;\n }\n\n console.log('');\n console.log(chalk.bold('\u6211\u662F \u9EA6\u5F53'));\n console.log('');\n console.log(' ' + whoami.tagline);\n console.log('');\n hr();\n console.log('');\n console.log(` ${chalk.cyan('\uD83D\uDCCD')} ${whoami.location}`);\n console.log(` ${chalk.cyan('\u23F1')} ${whoami.status.label} \u00B7 ${chalk.dim(whoami.status.description)}`);\n console.log('');\n hr();\n console.log('');\n console.log(` Blog ${chalk.blue.underline(whoami.website)}`);\n console.log(` Email ${chalk.blue(whoami.contact)}`);\n console.log('');\n hr();\n console.log('');\n console.log(` ${chalk.dim('\u60F3\u4E86\u89E3\u66F4\u591A\uFF1F')}`);\n console.log(` ${chalk.dim('maidang skills / career / posts / links')}`);\n console.log('');\n });\n\n return cmd;\n}\n", "/**\n * \u8BA1\u7B97\u9EA6\u5F53\u7684\u5E74\u9F84\u7248\u672C\u53F7\n * \u51FA\u751F\u65E5\u671F\uFF1A1997\u5E743\u670810\u65E5\n * \u8FD4\u56DE\u683C\u5F0F\uFF1A\u5E74\u9F84.\u5C0F\u7248\u672C\u53F7.\u8865\u4E01\u53F7\n */\nexport function getAgeVersion(): string {\n const birthDate = new Date(1997, 2, 10); // \u6708\u4EFD\u4ECE0\u5F00\u59CB\uFF0C\u6240\u4EE52\u662F3\u6708\n const today = new Date();\n\n let age = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u5982\u679C\u8FD8\u6CA1\u8FC7\u751F\u65E5\uFF0C\u5E74\u9F84\u51CF1\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n age--;\n }\n\n // \u8FD9\u91CC\u7684\u5C0F\u7248\u672C\u548C\u8865\u4E01\u53F7\u53EF\u4EE5\u540E\u7EED\u4ECE package.json \u8BFB\u53D6\u6216\u56FA\u5B9A\n // \u73B0\u5728\u5148\u8FD4\u56DE\u7B80\u5355\u683C\u5F0F\n return `${age}.0.0`;\n}\n\n/**\n * \u83B7\u53D6\u7248\u672C\u53F7\u548C\u751F\u65E5\u4FE1\u606F\n */\nexport function getVersionInfo(): { version: string; birthDate: Date; currentAge: number; nextBirthday: Date } {\n const birthDate = new Date(1997, 2, 10); // 1997\u5E743\u670810\u65E5\n const today = new Date();\n\n let currentAge = today.getFullYear() - birthDate.getFullYear();\n const monthDiff = today.getMonth() - birthDate.getMonth();\n\n // \u8BA1\u7B97\u4E0B\u4E00\u4E2A\u751F\u65E5\n const nextBirthday = new Date(today.getFullYear(), birthDate.getMonth(), birthDate.getDate());\n\n if (monthDiff < 0 || (monthDiff === 0 && today.getDate() < birthDate.getDate())) {\n currentAge--;\n } else {\n nextBirthday.setFullYear(today.getFullYear() + 1);\n }\n\n const version = `${currentAge}.0.0`;\n\n return {\n version,\n birthDate,\n currentAge,\n nextBirthday\n };\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Command", "chalk", "chalk", "cmd", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "hr", "Command", "chalk", "hr", "Command", "chalk", "getStatus", "hr", "Command"]
7
7
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "maidang",
3
- "version": "29.4.6",
3
+ "version": "29.4.7",
4
4
  "type": "module",
5
5
  "description": "一个展示个人信息与职业经历的命令行工具",
6
6
  "main": "dist/index.js",