maidang 1.1.1 → 29.3.1
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/README.md +1 -1
- package/dist/index.js +9 -0
- package/dist/index.js.map +2 -2
- package/package.json +11 -10
package/README.md
CHANGED
package/dist/index.js
CHANGED
|
@@ -370,6 +370,15 @@ var posts_default = {
|
|
|
370
370
|
time: "10:00",
|
|
371
371
|
content: "\u5982\u4F55\u9009\u62E9 Coding Plan\n\n\u4E00\u4E2A\u6700\u5F3A\u7684\u6A21\u578B + \u4E00\u4E2A\u7B2C\u4E00\u68AF\u961F\u6A21\u578B\uFF0C\u5E94\u5BF9\u4EFB\u610F\u6E20\u9053\u7684\u7A81\u53D1\u9650\u6D41\u3001\u65AD\u4F9B\u3001\u5C01\u53F7\n\n\u7248\u672C\u6700\u5F3A\u6A21\u578B\uFF1AClaude\uFF08\u95F2\u9C7C\u968F\u4FBF\u627E\u4E00\u4E2A\uFF09\n\u56FD\u4EA7\u7B2C\u4E00\u68AF\u961F\uFF1Akimi\u3001GLM\u3001Minimax\n\n\u4F7F\u7528 cc-switch \u5207\u6362\u6A21\u578B\u63D0\u4F9B\u5546\u3002\u5F53\u4F9B\u5E94\u5546\u9650\u6D41\u3001\u65AD\u4F9B\u4EE5\u540E\uFF0C\u5FEB\u901F\u5207\u6362\u53E6\u4E00\u4E2A\u3002\n\nhttps://github.com/farion1231/cc-switch",
|
|
372
372
|
tags: ["AI", "Claude", "\u6A21\u578B\u9009\u62E9"]
|
|
373
|
+
},
|
|
374
|
+
{
|
|
375
|
+
id: "2",
|
|
376
|
+
author: "\u9EA6\u5F53",
|
|
377
|
+
handle: "@maidang",
|
|
378
|
+
date: "2026-03-23",
|
|
379
|
+
time: "20:00",
|
|
380
|
+
content: "\u804C\u573A\u53D1\u5C0F\u8981\u79BB\u804C\u4E86\n\n\u8BF4\u5B9E\u8BDD\u633A\u4E0D\u820D\u5F97\uFF0C\u516C\u53F8\u7684\u4F01\u4E1A\u6587\u5316\u624B\u518C\u91CC\u5199\u7740\uFF0C\u5E94\u8BE5\u62DB\u4EC0\u4E48\u6837\u7684\u4EBA\uFF1F\u5C31\u662F\u90A3\u79CD\u79BB\u804C\u7684\u65F6\u5019\u4F60\u4F1A\u6781\u529B\u633D\u7559\u7684\u4EBA\uFF0C\u4F46\u6700\u8FD1\u5DE5\u4F5C\u5F3A\u5EA6\u8D8A\u6765\u8D8A\u5927\uFF0C\u6709\u7684\u540C\u4E8B\u5F00\u6446\u7B49\u793C\u5305\uFF0C\u6709\u7684\u4E0A\u4E86\u730E\u6740\u540D\u5355\uFF0C\u6709\u7684\u4EBA\u8F9E\u804C\u521B\u4E1A\uFF0CAI \u66FF\u4EE3\u5DE5\u4F5C\u7684\u6D6A\u6F6E\u4ECA\u5E74\u4F1A\u6B63\u5F0F\u5F00\u59CB\uFF0C\u4EBA\u4EBA\u81EA\u5371\u7684\u65F6\u5019\uFF0C\u4F60\u53EA\u5E0C\u671B\u4F60\u7684\u670B\u53CB\u8FC7\u5F97\u5065\u5EB7\u5FEB\u4E50\n\n\u524D\u5929\u770B\u4E86\u4E00\u90E8\u7535\u5F71\uFF0C\u53EB\u300A\u6B7B\u4EA1\u7ADE\u8D70\u300B\uFF0C\u6211\u89C9\u5F97\u548C\u73B0\u5728\u7684\u5DE5\u4F5C\u72B6\u6001\u5F88\u50CF\uFF0C\u4F60\u8981\u4E48\u5F80\u524D\u8D70\uFF0C\u8981\u4E48\u51FA\u5C40\uFF08\u6216\u4E3B\u52A8\u6216\u88AB\u52A8\uFF09\uFF0C\u4F46\u4E0D\u8BBA\u662F\u8C01\u80FD\u8D70\u5230\u7EC8\u70B9\uFF0C\u540C\u884C\u7684\u4EBA\u90FD\u662F\u73CD\u8D35\u7684\u4F19\u4F34\n\n\u795D\u4ED6\u4EEC\u4E00\u8DEF\u987A\u98CE",
|
|
381
|
+
tags: ["\u804C\u573A", "\u79BB\u804C", "\u670B\u53CB"]
|
|
373
382
|
}
|
|
374
383
|
]
|
|
375
384
|
};
|
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/data/home.json", "../src/utils/display.ts", "../src/commands/career.ts", "../src/data/career.json", "../src/commands/cat.ts", "../src/commands/blog.tsx", "../src/data/blog.json", "../src/commands/posts.tsx", "../src/data/posts.json", "../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 { createBlogCommand } from './commands/blog';\nimport { createPostsCommand } from './commands/posts';\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 blogCmd = createBlogCommand();\nconst postsCmd = createPostsCommand();\n\nprogram.addCommand(careerCmd);\nprogram.addCommand(catCmd);\nprogram.addCommand(blogCmd);\nprogram.addCommand(postsCmd);\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 homeData from '../data/home.json';\nimport { displayTitle, displayBox, createSpinner } from '../utils/display';\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 randomGreeting = homeData.greetings[Math.floor(Math.random() * homeData.greetings.length)];\n\n const spinner = createSpinner('\u6B63\u5728\u53EC\u5524\u9EA6\u5F53...');\n spinner.start();\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n spinner.stop();\n\n console.clear();\n\n await displayTitle('MAIDANG');\n\n console.log('');\n\n const welcomeContent = `\n${chalk.white.bold(randomGreeting)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.yellow('\uD83D\uDC64')} ${chalk.white.bold('\u59D3\u540D:')} ${chalk.cyan(homeData.basicInfo.name)}\n${chalk.yellow('\uD83D\uDCBC')} ${chalk.white.bold('\u8EAB\u4EFD:')} ${chalk.cyan(homeData.basicInfo.role)}\n${chalk.yellow('\uD83D\uDCAD')} ${chalk.white.bold('\u5EA7\u53F3\u94ED:')} ${chalk.green(homeData.basicInfo.motto)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang --help') + ' \u67E5\u770B\u6240\u6709\u547D\u4EE4')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang career') + ' \u67E5\u770B\u5DE5\u4F5C\u7ECF\u5386')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang cat') + ' \u6216 ' + chalk.cyan.bold('maidang meow') + ' \u67E5\u770B\u6211\u7684\u732B')}\n `;\n\n displayBox(welcomeContent, {\n padding: 2\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"greetings\": [\n \"\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C\uFF01\uD83D\uDC4B\",\n \"\u4F60\u597D\u5440\uFF0C\u6211\u662F\u9EA6\u5F53\uFF01\u2728\",\n \"Hey\uFF0C\u6B22\u8FCE\u6765\u4E86\u89E3\u6211\uFF01\uD83C\uDF89\",\n \"\u63A2\u7D22\u9EA6\u5F53\u7684\u79D8\u5BC6\u82B1\u56ED \uD83C\uDF38\",\n \"\u51C6\u5907\u597D\u8BA4\u8BC6\u6211\u4E86\u5417\uFF1F\uD83D\uDE80\"\n ],\n \"basicInfo\": {\n \"name\": \"\u9EA6\u5F53\",\n \"role\": \"AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005\",\n \"motto\": \"\u4FDD\u6301\u597D\u5947\uFF0C\u6301\u7EED\u63A2\u7D22\"\n }\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')\n .action(() => {\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 } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\nimport blogData from '../data/blog.json';\n\ninterface Post {\n id: string;\n title: string;\n author: string;\n date: string;\n summary: string;\n content: string[];\n tags: string[];\n}\n\n// \u6587\u7AE0\u5217\u8868\u7EC4\u4EF6\nconst PostList: React.FC<{\n posts: Post[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n}> = ({ posts, selectedIndex, onSelect }) => {\n useInput((input, key) => {\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 }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n \u9EA6\u5F53\u7684\u535A\u5BA2\n </Text>\n <Text dimColor> \u00B7 \u7528\u65B9\u5411\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u9605\u8BFB</Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {posts.map((post, index) => (\n <Box\n key={post.id}\n flexDirection=\"column\"\n borderStyle={index === selectedIndex ? 'bold' : 'single'}\n borderColor={index === selectedIndex ? 'cyan' : 'gray'}\n paddingX={1}\n marginY={0}\n >\n <Box>\n <Text bold={index === selectedIndex} color={index === selectedIndex ? 'cyan' : 'white'}>\n {post.title}\n </Text>\n </Box>\n <Box marginTop={0}>\n <Text dimColor>{post.date} \u00B7 {post.author}</Text>\n </Box>\n <Box marginTop={0}>\n <Text dimColor italic>\n {post.summary.substring(0, 60)}...\n </Text>\n </Box>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u6309 ESC \u6216 q \u8FD4\u56DE</Text>\n </Box>\n </Box>\n );\n};\n\n// \u6587\u7AE0\u8BE6\u60C5\u7EC4\u4EF6\nconst PostDetail: React.FC<{\n post: Post;\n onBack: () => void;\n}> = ({ post, onBack }) => {\n useInput((input) => {\n if (input === 'q' || input === 'Q') {\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold color=\"cyan\">\n {post.title}\n </Text>\n <Box marginTop={0}>\n <Text dimColor>\n {post.date} \u00B7 {post.author}\n </Text>\n </Box>\n <Box marginTop={0}>\n {post.tags.map(tag => (\n <Text key={tag} color=\"gray\" backgroundColor=\"black\" dimColor>\n {' '}{tag}{' '}\n </Text>\n ))}\n </Box>\n </Box>\n\n <Box borderStyle=\"single\" borderColor=\"gray\" paddingX={1} marginBottom={1}>\n <Text italic dimColor>\n {post.summary}\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {post.content.map((paragraph, index) => (\n <Box key={index} marginBottom={paragraph === '' ? 0 : 0}>\n <Text>{paragraph}</Text>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u6309 q \u8FD4\u56DE\u5217\u8868</Text>\n </Box>\n </Box>\n );\n};\n\n// \u535A\u5BA2\u5E94\u7528\u4E3B\u7EC4\u4EF6\nconst BlogApp: React.FC = () => {\n const [view, setView] = useState<'list' | 'detail'>('list');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const posts: Post[] = blogData.posts;\n\n useInput((input, key) => {\n if (view === 'list') {\n if (key.return) {\n setView('detail');\n } else if (input === 'q' || input === 'Q') {\n process.exit(0);\n }\n } else if (view === 'detail') {\n if (key.escape) {\n setView('list');\n }\n }\n });\n\n if (view === 'detail') {\n return <PostDetail post={posts[selectedIndex]} onBack={() => setView('list')} />;\n }\n\n return (\n <PostList\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n />\n );\n};\n\nexport function createBlogCommand(): Command {\n const cmd = new Command('blog')\n .description('\u9605\u8BFB\u9EA6\u5F53\u7684\u535A\u5BA2\u6587\u7AE0')\n .action(() => {\n render(<BlogApp />);\n });\n\n return cmd;\n}\n", "{\n \"posts\": [\n {\n \"id\": \"1\",\n \"title\": \"AI \u65F6\u4EE3\u7684\u7F16\u7A0B\u601D\u8003\",\n \"author\": \"\u9EA6\u5F53\",\n \"date\": \"2024-03-15\",\n \"summary\": \"\u5728\u4EBA\u5DE5\u667A\u80FD\u5FEB\u901F\u53D1\u5C55\u7684\u4ECA\u5929\uFF0C\u7A0B\u5E8F\u5458\u7684\u89D2\u8272\u6B63\u5728\u53D1\u751F\u6DF1\u523B\u53D8\u5316\u3002\u672C\u6587\u63A2\u8BA8\u5982\u4F55\u5728\u8FD9\u4E2A\u65B0\u65F6\u4EE3\u4FDD\u6301\u7ADE\u4E89\u529B\u548C\u521B\u9020\u529B\u3002\",\n \"content\": [\n \"\u4EBA\u5DE5\u667A\u80FD\u6B63\u5728\u91CD\u5851\u8F6F\u4EF6\u5F00\u53D1\u7684\u65B9\u65B9\u9762\u9762\u3002\u4ECE\u4EE3\u7801\u8865\u5168\u5230\u81EA\u52A8\u5316\u6D4B\u8BD5\uFF0CAI \u5DE5\u5177\u5DF2\u7ECF\u6210\u4E3A\u5F00\u53D1\u8005\u65E5\u5E38\u5DE5\u4F5C\u7684\u91CD\u8981\u52A9\u624B\u3002\",\n \"\",\n \"\u7136\u800C\uFF0C\u8FD9\u5E76\u4E0D\u610F\u5473\u7740\u7A0B\u5E8F\u5458\u4F1A\u88AB\u53D6\u4EE3\u3002\u76F8\u53CD\uFF0C\u6211\u4EEC\u7684\u89D2\u8272\u6B63\u5728\u4ECE\u300C\u5199\u4EE3\u7801\u300D\u8F6C\u5411\u300C\u8BBE\u8BA1\u7CFB\u7EDF\u300D\u548C\u300C\u89E3\u51B3\u95EE\u9898\u300D\u3002AI \u53EF\u4EE5\u751F\u6210\u4EE3\u7801\uFF0C\u4F46\u7406\u89E3\u4E1A\u52A1\u9700\u6C42\u3001\u8BBE\u8BA1\u67B6\u6784\u3001\u505A\u51FA\u6743\u8861\u51B3\u7B56\uFF0C\u8FD9\u4E9B\u4ECD\u7136\u9700\u8981\u4EBA\u7C7B\u7684\u667A\u6167\u548C\u7ECF\u9A8C\u3002\",\n \"\",\n \"\u5728 AI \u65F6\u4EE3\uFF0C\u6700\u91CD\u8981\u7684\u80FD\u529B\u662F\uFF1A\",\n \"\u2022 \u5FEB\u901F\u5B66\u4E60\u80FD\u529B - \u6280\u672F\u66F4\u65B0\u52A0\u901F\uFF0C\u6301\u7EED\u5B66\u4E60\u6210\u4E3A\u5E38\u6001\",\n \"\u2022 \u7CFB\u7EDF\u601D\u7EF4 - \u7406\u89E3\u590D\u6742\u7CFB\u7EDF\u7684\u6574\u4F53\u8FD0\u4F5C\",\n \"\u2022 \u521B\u9020\u529B - \u5728 AI \u8F85\u52A9\u4E0B\u63A2\u7D22\u66F4\u591A\u53EF\u80FD\u6027\",\n \"\u2022 \u6C9F\u901A\u80FD\u529B - \u51C6\u786E\u7406\u89E3\u9700\u6C42\u5E76\u6709\u6548\u534F\u4F5C\",\n \"\",\n \"\u62E5\u62B1\u53D8\u5316\uFF0C\u4FDD\u6301\u597D\u5947\uFF0C\u6211\u4EEC\u624D\u80FD\u5728\u8FD9\u4E2A\u5145\u6EE1\u673A\u9047\u7684\u65F6\u4EE3\u4E2D\u627E\u5230\u81EA\u5DF1\u7684\u4F4D\u7F6E\u3002\"\n ],\n \"tags\": [\"AI\", \"\u7F16\u7A0B\", \"\u601D\u8003\"]\n }\n ]\n}\n", "import React, { useState } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\nimport postsData from '../data/posts.json';\n\ninterface PostItem {\n id: string;\n author: string;\n handle: string;\n date: string;\n time: string;\n content: string;\n tags: string[];\n}\n\nconst FeedPost: React.FC<{\n post: PostItem;\n isSelected: boolean;\n}> = ({ post, isSelected }) => (\n <Box flexDirection=\"column\" paddingX={1} marginY={0}>\n <Box>\n <Text bold color={isSelected ? 'cyan' : 'white'}>\n {post.author}\n </Text>\n <Text dimColor> {post.handle}</Text>\n <Text dimColor> \u00B7 {post.date} {post.time}</Text>\n </Box>\n <Box marginTop={0} flexWrap=\"wrap\">\n <Text color={isSelected ? 'gray' : undefined}>{post.content}</Text>\n </Box>\n {post.tags && post.tags.length > 0 && (\n <Box marginTop={0} flexWrap=\"wrap\">\n {post.tags.map((tag) => (\n <Text key={tag} dimColor>\n #{tag}{' '}\n </Text>\n ))}\n </Box>\n )}\n </Box>\n);\n\nconst PostsFeed: React.FC<{\n posts: PostItem[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n onQuit: () => void;\n}> = ({ posts, selectedIndex, onSelect, 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 }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n \uD83D\uDC26 \u9EA6\u5F53\u7684\u63A8\u6587\n </Text>\n <Text dimColor> \u00B7 \u65B9\u5411\u952E\u6D4F\u89C8\uFF0Cq \u9000\u51FA</Text>\n </Box>\n\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\" paddingX={0} paddingY={0}>\n {posts.map((post, index) => (\n <Box\n key={post.id}\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={selectedIndex === index ? 'cyan' : 'gray'}\n paddingX={1}\n paddingY={0}\n marginY={0}\n >\n <FeedPost post={post} isSelected={selectedIndex === index} />\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u2191\u2193 \u9009\u62E9 \u00B7 q \u9000\u51FA</Text>\n </Box>\n </Box>\n );\n};\n\nconst PostsApp: React.FC = () => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const posts: PostItem[] = postsData.posts;\n\n const handleQuit = (): void => {\n process.exit(0);\n };\n\n return (\n <PostsFeed\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onQuit={handleQuit}\n />\n );\n};\n\nexport function createPostsCommand(): Command {\n const cmd = new Command('posts')\n .description('\u9EA6\u5F53\u7684\u63A8\u6587\u65F6\u95F4\u7EBF\uFF08\u63A8\u7279\u98CE\u683C\uFF09')\n .action(() => {\n render(<PostsApp />);\n });\n\n return cmd;\n}\n", "{\n \"posts\": [\n {\n \"id\": \"1\",\n \"author\": \"\u9EA6\u5F53\",\n \"handle\": \"@maidang\",\n \"date\": \"2025-03-13\",\n \"time\": \"10:00\",\n \"content\": \"\u5982\u4F55\u9009\u62E9 Coding Plan\\n\\n\u4E00\u4E2A\u6700\u5F3A\u7684\u6A21\u578B + \u4E00\u4E2A\u7B2C\u4E00\u68AF\u961F\u6A21\u578B\uFF0C\u5E94\u5BF9\u4EFB\u610F\u6E20\u9053\u7684\u7A81\u53D1\u9650\u6D41\u3001\u65AD\u4F9B\u3001\u5C01\u53F7\\n\\n\u7248\u672C\u6700\u5F3A\u6A21\u578B\uFF1AClaude\uFF08\u95F2\u9C7C\u968F\u4FBF\u627E\u4E00\u4E2A\uFF09\\n\u56FD\u4EA7\u7B2C\u4E00\u68AF\u961F\uFF1Akimi\u3001GLM\u3001Minimax\\n\\n\u4F7F\u7528 cc-switch \u5207\u6362\u6A21\u578B\u63D0\u4F9B\u5546\u3002\u5F53\u4F9B\u5E94\u5546\u9650\u6D41\u3001\u65AD\u4F9B\u4EE5\u540E\uFF0C\u5FEB\u901F\u5207\u6362\u53E6\u4E00\u4E2A\u3002\\n\\nhttps://github.com/farion1231/cc-switch\",\n \"tags\": [\"AI\", \"Claude\", \"\u6A21\u578B\u9009\u62E9\"]\n }\n ]\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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",
|
|
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 { createBlogCommand } from './commands/blog';\nimport { createPostsCommand } from './commands/posts';\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 blogCmd = createBlogCommand();\nconst postsCmd = createPostsCommand();\n\nprogram.addCommand(careerCmd);\nprogram.addCommand(catCmd);\nprogram.addCommand(blogCmd);\nprogram.addCommand(postsCmd);\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 homeData from '../data/home.json';\nimport { displayTitle, displayBox, createSpinner } from '../utils/display';\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 randomGreeting = homeData.greetings[Math.floor(Math.random() * homeData.greetings.length)];\n\n const spinner = createSpinner('\u6B63\u5728\u53EC\u5524\u9EA6\u5F53...');\n spinner.start();\n\n await new Promise(resolve => setTimeout(resolve, 1000));\n\n spinner.stop();\n\n console.clear();\n\n await displayTitle('MAIDANG');\n\n console.log('');\n\n const welcomeContent = `\n${chalk.white.bold(randomGreeting)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.yellow('\uD83D\uDC64')} ${chalk.white.bold('\u59D3\u540D:')} ${chalk.cyan(homeData.basicInfo.name)}\n${chalk.yellow('\uD83D\uDCBC')} ${chalk.white.bold('\u8EAB\u4EFD:')} ${chalk.cyan(homeData.basicInfo.role)}\n${chalk.yellow('\uD83D\uDCAD')} ${chalk.white.bold('\u5EA7\u53F3\u94ED:')} ${chalk.green(homeData.basicInfo.motto)}\n\n${chalk.gray('\u2500'.repeat(40))}\n\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang --help') + ' \u67E5\u770B\u6240\u6709\u547D\u4EE4')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang career') + ' \u67E5\u770B\u5DE5\u4F5C\u7ECF\u5386')}\n${chalk.gray('\u8F93\u5165 ' + chalk.cyan.bold('maidang cat') + ' \u6216 ' + chalk.cyan.bold('maidang meow') + ' \u67E5\u770B\u6211\u7684\u732B')}\n `;\n\n displayBox(welcomeContent, {\n padding: 2\n });\n\n console.log('');\n });\n\n return cmd;\n}\n", "{\n \"greetings\": [\n \"\u6B22\u8FCE\u6765\u5230\u9EA6\u5F53\u7684\u4E16\u754C\uFF01\uD83D\uDC4B\",\n \"\u4F60\u597D\u5440\uFF0C\u6211\u662F\u9EA6\u5F53\uFF01\u2728\",\n \"Hey\uFF0C\u6B22\u8FCE\u6765\u4E86\u89E3\u6211\uFF01\uD83C\uDF89\",\n \"\u63A2\u7D22\u9EA6\u5F53\u7684\u79D8\u5BC6\u82B1\u56ED \uD83C\uDF38\",\n \"\u51C6\u5907\u597D\u8BA4\u8BC6\u6211\u4E86\u5417\uFF1F\uD83D\uDE80\"\n ],\n \"basicInfo\": {\n \"name\": \"\u9EA6\u5F53\",\n \"role\": \"AI \u65F6\u4EE3\u7684\u63A2\u7D22\u8005\",\n \"motto\": \"\u4FDD\u6301\u597D\u5947\uFF0C\u6301\u7EED\u63A2\u7D22\"\n }\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')\n .action(() => {\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 } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\nimport blogData from '../data/blog.json';\n\ninterface Post {\n id: string;\n title: string;\n author: string;\n date: string;\n summary: string;\n content: string[];\n tags: string[];\n}\n\n// \u6587\u7AE0\u5217\u8868\u7EC4\u4EF6\nconst PostList: React.FC<{\n posts: Post[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n}> = ({ posts, selectedIndex, onSelect }) => {\n useInput((input, key) => {\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 }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n \u9EA6\u5F53\u7684\u535A\u5BA2\n </Text>\n <Text dimColor> \u00B7 \u7528\u65B9\u5411\u952E\u9009\u62E9\uFF0C\u56DE\u8F66\u9605\u8BFB</Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {posts.map((post, index) => (\n <Box\n key={post.id}\n flexDirection=\"column\"\n borderStyle={index === selectedIndex ? 'bold' : 'single'}\n borderColor={index === selectedIndex ? 'cyan' : 'gray'}\n paddingX={1}\n marginY={0}\n >\n <Box>\n <Text bold={index === selectedIndex} color={index === selectedIndex ? 'cyan' : 'white'}>\n {post.title}\n </Text>\n </Box>\n <Box marginTop={0}>\n <Text dimColor>{post.date} \u00B7 {post.author}</Text>\n </Box>\n <Box marginTop={0}>\n <Text dimColor italic>\n {post.summary.substring(0, 60)}...\n </Text>\n </Box>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u6309 ESC \u6216 q \u8FD4\u56DE</Text>\n </Box>\n </Box>\n );\n};\n\n// \u6587\u7AE0\u8BE6\u60C5\u7EC4\u4EF6\nconst PostDetail: React.FC<{\n post: Post;\n onBack: () => void;\n}> = ({ post, onBack }) => {\n useInput((input) => {\n if (input === 'q' || input === 'Q') {\n onBack();\n }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" marginBottom={1}>\n <Text bold color=\"cyan\">\n {post.title}\n </Text>\n <Box marginTop={0}>\n <Text dimColor>\n {post.date} \u00B7 {post.author}\n </Text>\n </Box>\n <Box marginTop={0}>\n {post.tags.map(tag => (\n <Text key={tag} color=\"gray\" backgroundColor=\"black\" dimColor>\n {' '}{tag}{' '}\n </Text>\n ))}\n </Box>\n </Box>\n\n <Box borderStyle=\"single\" borderColor=\"gray\" paddingX={1} marginBottom={1}>\n <Text italic dimColor>\n {post.summary}\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n {post.content.map((paragraph, index) => (\n <Box key={index} marginBottom={paragraph === '' ? 0 : 0}>\n <Text>{paragraph}</Text>\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u6309 q \u8FD4\u56DE\u5217\u8868</Text>\n </Box>\n </Box>\n );\n};\n\n// \u535A\u5BA2\u5E94\u7528\u4E3B\u7EC4\u4EF6\nconst BlogApp: React.FC = () => {\n const [view, setView] = useState<'list' | 'detail'>('list');\n const [selectedIndex, setSelectedIndex] = useState(0);\n const posts: Post[] = blogData.posts;\n\n useInput((input, key) => {\n if (view === 'list') {\n if (key.return) {\n setView('detail');\n } else if (input === 'q' || input === 'Q') {\n process.exit(0);\n }\n } else if (view === 'detail') {\n if (key.escape) {\n setView('list');\n }\n }\n });\n\n if (view === 'detail') {\n return <PostDetail post={posts[selectedIndex]} onBack={() => setView('list')} />;\n }\n\n return (\n <PostList\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n />\n );\n};\n\nexport function createBlogCommand(): Command {\n const cmd = new Command('blog')\n .description('\u9605\u8BFB\u9EA6\u5F53\u7684\u535A\u5BA2\u6587\u7AE0')\n .action(() => {\n render(<BlogApp />);\n });\n\n return cmd;\n}\n", "{\n \"posts\": [\n {\n \"id\": \"1\",\n \"title\": \"AI \u65F6\u4EE3\u7684\u7F16\u7A0B\u601D\u8003\",\n \"author\": \"\u9EA6\u5F53\",\n \"date\": \"2024-03-15\",\n \"summary\": \"\u5728\u4EBA\u5DE5\u667A\u80FD\u5FEB\u901F\u53D1\u5C55\u7684\u4ECA\u5929\uFF0C\u7A0B\u5E8F\u5458\u7684\u89D2\u8272\u6B63\u5728\u53D1\u751F\u6DF1\u523B\u53D8\u5316\u3002\u672C\u6587\u63A2\u8BA8\u5982\u4F55\u5728\u8FD9\u4E2A\u65B0\u65F6\u4EE3\u4FDD\u6301\u7ADE\u4E89\u529B\u548C\u521B\u9020\u529B\u3002\",\n \"content\": [\n \"\u4EBA\u5DE5\u667A\u80FD\u6B63\u5728\u91CD\u5851\u8F6F\u4EF6\u5F00\u53D1\u7684\u65B9\u65B9\u9762\u9762\u3002\u4ECE\u4EE3\u7801\u8865\u5168\u5230\u81EA\u52A8\u5316\u6D4B\u8BD5\uFF0CAI \u5DE5\u5177\u5DF2\u7ECF\u6210\u4E3A\u5F00\u53D1\u8005\u65E5\u5E38\u5DE5\u4F5C\u7684\u91CD\u8981\u52A9\u624B\u3002\",\n \"\",\n \"\u7136\u800C\uFF0C\u8FD9\u5E76\u4E0D\u610F\u5473\u7740\u7A0B\u5E8F\u5458\u4F1A\u88AB\u53D6\u4EE3\u3002\u76F8\u53CD\uFF0C\u6211\u4EEC\u7684\u89D2\u8272\u6B63\u5728\u4ECE\u300C\u5199\u4EE3\u7801\u300D\u8F6C\u5411\u300C\u8BBE\u8BA1\u7CFB\u7EDF\u300D\u548C\u300C\u89E3\u51B3\u95EE\u9898\u300D\u3002AI \u53EF\u4EE5\u751F\u6210\u4EE3\u7801\uFF0C\u4F46\u7406\u89E3\u4E1A\u52A1\u9700\u6C42\u3001\u8BBE\u8BA1\u67B6\u6784\u3001\u505A\u51FA\u6743\u8861\u51B3\u7B56\uFF0C\u8FD9\u4E9B\u4ECD\u7136\u9700\u8981\u4EBA\u7C7B\u7684\u667A\u6167\u548C\u7ECF\u9A8C\u3002\",\n \"\",\n \"\u5728 AI \u65F6\u4EE3\uFF0C\u6700\u91CD\u8981\u7684\u80FD\u529B\u662F\uFF1A\",\n \"\u2022 \u5FEB\u901F\u5B66\u4E60\u80FD\u529B - \u6280\u672F\u66F4\u65B0\u52A0\u901F\uFF0C\u6301\u7EED\u5B66\u4E60\u6210\u4E3A\u5E38\u6001\",\n \"\u2022 \u7CFB\u7EDF\u601D\u7EF4 - \u7406\u89E3\u590D\u6742\u7CFB\u7EDF\u7684\u6574\u4F53\u8FD0\u4F5C\",\n \"\u2022 \u521B\u9020\u529B - \u5728 AI \u8F85\u52A9\u4E0B\u63A2\u7D22\u66F4\u591A\u53EF\u80FD\u6027\",\n \"\u2022 \u6C9F\u901A\u80FD\u529B - \u51C6\u786E\u7406\u89E3\u9700\u6C42\u5E76\u6709\u6548\u534F\u4F5C\",\n \"\",\n \"\u62E5\u62B1\u53D8\u5316\uFF0C\u4FDD\u6301\u597D\u5947\uFF0C\u6211\u4EEC\u624D\u80FD\u5728\u8FD9\u4E2A\u5145\u6EE1\u673A\u9047\u7684\u65F6\u4EE3\u4E2D\u627E\u5230\u81EA\u5DF1\u7684\u4F4D\u7F6E\u3002\"\n ],\n \"tags\": [\"AI\", \"\u7F16\u7A0B\", \"\u601D\u8003\"]\n }\n ]\n}\n", "import React, { useState } from 'react';\nimport { render, Box, Text, useInput } from 'ink';\nimport { Command } from 'commander';\nimport postsData from '../data/posts.json';\n\ninterface PostItem {\n id: string;\n author: string;\n handle: string;\n date: string;\n time: string;\n content: string;\n tags: string[];\n}\n\nconst FeedPost: React.FC<{\n post: PostItem;\n isSelected: boolean;\n}> = ({ post, isSelected }) => (\n <Box flexDirection=\"column\" paddingX={1} marginY={0}>\n <Box>\n <Text bold color={isSelected ? 'cyan' : 'white'}>\n {post.author}\n </Text>\n <Text dimColor> {post.handle}</Text>\n <Text dimColor> \u00B7 {post.date} {post.time}</Text>\n </Box>\n <Box marginTop={0} flexWrap=\"wrap\">\n <Text color={isSelected ? 'gray' : undefined}>{post.content}</Text>\n </Box>\n {post.tags && post.tags.length > 0 && (\n <Box marginTop={0} flexWrap=\"wrap\">\n {post.tags.map((tag) => (\n <Text key={tag} dimColor>\n #{tag}{' '}\n </Text>\n ))}\n </Box>\n )}\n </Box>\n);\n\nconst PostsFeed: React.FC<{\n posts: PostItem[];\n selectedIndex: number;\n onSelect: (index: number) => void;\n onQuit: () => void;\n}> = ({ posts, selectedIndex, onSelect, 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 }\n });\n\n return (\n <Box flexDirection=\"column\" paddingX={2} paddingY={1}>\n <Box marginBottom={1}>\n <Text bold color=\"cyan\">\n \uD83D\uDC26 \u9EA6\u5F53\u7684\u63A8\u6587\n </Text>\n <Text dimColor> \u00B7 \u65B9\u5411\u952E\u6D4F\u89C8\uFF0Cq \u9000\u51FA</Text>\n </Box>\n\n <Box flexDirection=\"column\" borderStyle=\"single\" borderColor=\"gray\" paddingX={0} paddingY={0}>\n {posts.map((post, index) => (\n <Box\n key={post.id}\n flexDirection=\"column\"\n borderStyle=\"single\"\n borderColor={selectedIndex === index ? 'cyan' : 'gray'}\n paddingX={1}\n paddingY={0}\n marginY={0}\n >\n <FeedPost post={post} isSelected={selectedIndex === index} />\n </Box>\n ))}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>\u2191\u2193 \u9009\u62E9 \u00B7 q \u9000\u51FA</Text>\n </Box>\n </Box>\n );\n};\n\nconst PostsApp: React.FC = () => {\n const [selectedIndex, setSelectedIndex] = useState(0);\n const posts: PostItem[] = postsData.posts;\n\n const handleQuit = (): void => {\n process.exit(0);\n };\n\n return (\n <PostsFeed\n posts={posts}\n selectedIndex={selectedIndex}\n onSelect={setSelectedIndex}\n onQuit={handleQuit}\n />\n );\n};\n\nexport function createPostsCommand(): Command {\n const cmd = new Command('posts')\n .description('\u9EA6\u5F53\u7684\u63A8\u6587\u65F6\u95F4\u7EBF\uFF08\u63A8\u7279\u98CE\u683C\uFF09')\n .action(() => {\n render(<PostsApp />);\n });\n\n return cmd;\n}\n", "{\n \"posts\": [\n {\n \"id\": \"1\",\n \"author\": \"\u9EA6\u5F53\",\n \"handle\": \"@maidang\",\n \"date\": \"2025-03-13\",\n \"time\": \"10:00\",\n \"content\": \"\u5982\u4F55\u9009\u62E9 Coding Plan\\n\\n\u4E00\u4E2A\u6700\u5F3A\u7684\u6A21\u578B + \u4E00\u4E2A\u7B2C\u4E00\u68AF\u961F\u6A21\u578B\uFF0C\u5E94\u5BF9\u4EFB\u610F\u6E20\u9053\u7684\u7A81\u53D1\u9650\u6D41\u3001\u65AD\u4F9B\u3001\u5C01\u53F7\\n\\n\u7248\u672C\u6700\u5F3A\u6A21\u578B\uFF1AClaude\uFF08\u95F2\u9C7C\u968F\u4FBF\u627E\u4E00\u4E2A\uFF09\\n\u56FD\u4EA7\u7B2C\u4E00\u68AF\u961F\uFF1Akimi\u3001GLM\u3001Minimax\\n\\n\u4F7F\u7528 cc-switch \u5207\u6362\u6A21\u578B\u63D0\u4F9B\u5546\u3002\u5F53\u4F9B\u5E94\u5546\u9650\u6D41\u3001\u65AD\u4F9B\u4EE5\u540E\uFF0C\u5FEB\u901F\u5207\u6362\u53E6\u4E00\u4E2A\u3002\\n\\nhttps://github.com/farion1231/cc-switch\",\n \"tags\": [\"AI\", \"Claude\", \"\u6A21\u578B\u9009\u62E9\"]\n },\n {\n \"id\": \"2\",\n \"author\": \"\u9EA6\u5F53\",\n \"handle\": \"@maidang\",\n \"date\": \"2026-03-23\",\n \"time\": \"20:00\",\n \"content\": \"\u804C\u573A\u53D1\u5C0F\u8981\u79BB\u804C\u4E86\\n\\n\u8BF4\u5B9E\u8BDD\u633A\u4E0D\u820D\u5F97\uFF0C\u516C\u53F8\u7684\u4F01\u4E1A\u6587\u5316\u624B\u518C\u91CC\u5199\u7740\uFF0C\u5E94\u8BE5\u62DB\u4EC0\u4E48\u6837\u7684\u4EBA\uFF1F\u5C31\u662F\u90A3\u79CD\u79BB\u804C\u7684\u65F6\u5019\u4F60\u4F1A\u6781\u529B\u633D\u7559\u7684\u4EBA\uFF0C\u4F46\u6700\u8FD1\u5DE5\u4F5C\u5F3A\u5EA6\u8D8A\u6765\u8D8A\u5927\uFF0C\u6709\u7684\u540C\u4E8B\u5F00\u6446\u7B49\u793C\u5305\uFF0C\u6709\u7684\u4E0A\u4E86\u730E\u6740\u540D\u5355\uFF0C\u6709\u7684\u4EBA\u8F9E\u804C\u521B\u4E1A\uFF0CAI \u66FF\u4EE3\u5DE5\u4F5C\u7684\u6D6A\u6F6E\u4ECA\u5E74\u4F1A\u6B63\u5F0F\u5F00\u59CB\uFF0C\u4EBA\u4EBA\u81EA\u5371\u7684\u65F6\u5019\uFF0C\u4F60\u53EA\u5E0C\u671B\u4F60\u7684\u670B\u53CB\u8FC7\u5F97\u5065\u5EB7\u5FEB\u4E50\\n\\n\u524D\u5929\u770B\u4E86\u4E00\u90E8\u7535\u5F71\uFF0C\u53EB\u300A\u6B7B\u4EA1\u7ADE\u8D70\u300B\uFF0C\u6211\u89C9\u5F97\u548C\u73B0\u5728\u7684\u5DE5\u4F5C\u72B6\u6001\u5F88\u50CF\uFF0C\u4F60\u8981\u4E48\u5F80\u524D\u8D70\uFF0C\u8981\u4E48\u51FA\u5C40\uFF08\u6216\u4E3B\u52A8\u6216\u88AB\u52A8\uFF09\uFF0C\u4F46\u4E0D\u8BBA\u662F\u8C01\u80FD\u8D70\u5230\u7EC8\u70B9\uFF0C\u540C\u884C\u7684\u4EBA\u90FD\u662F\u73CD\u8D35\u7684\u4F19\u4F34\\n\\n\u795D\u4ED6\u4EEC\u4E00\u8DEF\u987A\u98CE\",\n \"tags\": [\"\u804C\u573A\", \"\u79BB\u804C\", \"\u670B\u53CB\"]\n }\n ]\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
6
|
"names": ["Command", "chalk", "chalk", "Command", "chalk", "Command", "chalk", "Command", "chalk", "Command", "Command", "React", "useState", "render", "Box", "Text", "useInput", "Command", "React", "Box", "Text", "useInput", "useState", "Command", "render", "Command"]
|
|
7
7
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "maidang",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "29.3.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "一个展示个人信息与职业经历的命令行工具",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -10,6 +10,15 @@
|
|
|
10
10
|
"bin": {
|
|
11
11
|
"maidang": "dist/index.js"
|
|
12
12
|
},
|
|
13
|
+
"scripts": {
|
|
14
|
+
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --sourcemap --loader:.tsx=tsx --external:commander --external:chalk --external:boxen --external:figlet --external:ora --external:terminal-image --external:ink --external:react && node scripts/copy-assets.mjs",
|
|
15
|
+
"dev": "tsx src/index.ts",
|
|
16
|
+
"start": "node dist/index.js",
|
|
17
|
+
"test": "jest",
|
|
18
|
+
"test:watch": "jest --watch",
|
|
19
|
+
"test:coverage": "jest --coverage",
|
|
20
|
+
"prepublishOnly": "pnpm test && pnpm build"
|
|
21
|
+
},
|
|
13
22
|
"keywords": [
|
|
14
23
|
"cli",
|
|
15
24
|
"maidang",
|
|
@@ -52,13 +61,5 @@
|
|
|
52
61
|
"ts-jest": "^29.4.6",
|
|
53
62
|
"tsx": "^4.21.0",
|
|
54
63
|
"typescript": "^5.9.3"
|
|
55
|
-
},
|
|
56
|
-
"scripts": {
|
|
57
|
-
"build": "esbuild src/index.ts --bundle --platform=node --format=esm --outfile=dist/index.js --sourcemap --loader:.tsx=tsx --external:commander --external:chalk --external:boxen --external:figlet --external:ora --external:terminal-image --external:ink --external:react && node scripts/copy-assets.mjs",
|
|
58
|
-
"dev": "tsx src/index.ts",
|
|
59
|
-
"start": "node dist/index.js",
|
|
60
|
-
"test": "jest",
|
|
61
|
-
"test:watch": "jest --watch",
|
|
62
|
-
"test:coverage": "jest --coverage"
|
|
63
64
|
}
|
|
64
|
-
}
|
|
65
|
+
}
|