@astro-minimax/cli 0.5.0 → 0.7.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 +69 -0
- package/dist/commands/ai.d.ts +2 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +99 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/data.d.ts +2 -0
- package/dist/commands/data.d.ts.map +1 -0
- package/dist/commands/data.js +111 -0
- package/dist/commands/data.js.map +1 -0
- package/dist/commands/hooks.d.ts +2 -0
- package/dist/commands/hooks.d.ts.map +1 -0
- package/dist/commands/hooks.js +378 -0
- package/dist/commands/hooks.js.map +1 -0
- package/dist/commands/init.d.ts +2 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +50 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/podcast.d.ts +2 -0
- package/dist/commands/podcast.d.ts.map +1 -0
- package/dist/commands/podcast.js +89 -0
- package/dist/commands/podcast.js.map +1 -0
- package/dist/commands/post.d.ts +2 -0
- package/dist/commands/post.d.ts.map +1 -0
- package/dist/commands/post.js +190 -0
- package/dist/commands/post.js.map +1 -0
- package/dist/commands/profile.d.ts +2 -0
- package/dist/commands/profile.d.ts.map +1 -0
- package/dist/commands/profile.js +88 -0
- package/dist/commands/profile.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +81 -0
- package/dist/index.js.map +1 -0
- package/dist/tools/ai-process.d.ts +20 -0
- package/dist/tools/ai-process.d.ts.map +1 -0
- package/dist/tools/ai-process.js +607 -0
- package/dist/tools/ai-process.js.map +1 -0
- package/dist/tools/build-author-context.d.ts +13 -0
- package/dist/tools/build-author-context.d.ts.map +1 -0
- package/dist/tools/build-author-context.js +313 -0
- package/dist/tools/build-author-context.js.map +1 -0
- package/dist/tools/build-voice-profile.d.ts +12 -0
- package/dist/tools/build-voice-profile.d.ts.map +1 -0
- package/dist/tools/build-voice-profile.js +270 -0
- package/dist/tools/build-voice-profile.js.map +1 -0
- package/dist/tools/eval-ai-chat.d.ts +17 -0
- package/dist/tools/eval-ai-chat.d.ts.map +1 -0
- package/dist/tools/eval-ai-chat.js +362 -0
- package/dist/tools/eval-ai-chat.js.map +1 -0
- package/dist/tools/generate-author-profile.d.ts +14 -0
- package/dist/tools/generate-author-profile.d.ts.map +1 -0
- package/dist/tools/generate-author-profile.js +289 -0
- package/dist/tools/generate-author-profile.js.map +1 -0
- package/dist/tools/generate-cover.d.ts +14 -0
- package/dist/tools/generate-cover.d.ts.map +1 -0
- package/dist/tools/generate-cover.js +95 -0
- package/dist/tools/generate-cover.js.map +1 -0
- package/dist/tools/generate-og.d.ts +3 -0
- package/dist/tools/generate-og.d.ts.map +1 -0
- package/dist/tools/generate-og.js +254 -0
- package/dist/tools/generate-og.js.map +1 -0
- package/dist/tools/generate-related.d.ts +11 -0
- package/dist/tools/generate-related.d.ts.map +1 -0
- package/dist/tools/generate-related.js +124 -0
- package/dist/tools/generate-related.js.map +1 -0
- package/dist/tools/generate-tags.d.ts +14 -0
- package/dist/tools/generate-tags.d.ts.map +1 -0
- package/dist/tools/generate-tags.js +182 -0
- package/dist/tools/generate-tags.js.map +1 -0
- package/dist/tools/lib/ai-provider.d.ts +43 -0
- package/dist/tools/lib/ai-provider.d.ts.map +1 -0
- package/dist/tools/lib/ai-provider.js +146 -0
- package/dist/tools/lib/ai-provider.js.map +1 -0
- package/dist/tools/lib/audio-processor.d.ts +46 -0
- package/dist/tools/lib/audio-processor.d.ts.map +1 -0
- package/dist/tools/lib/audio-processor.js +188 -0
- package/dist/tools/lib/audio-processor.js.map +1 -0
- package/dist/tools/lib/frontmatter.d.ts +11 -0
- package/dist/tools/lib/frontmatter.d.ts.map +1 -0
- package/dist/tools/lib/frontmatter.js +80 -0
- package/dist/tools/lib/frontmatter.js.map +1 -0
- package/dist/tools/lib/index.d.ts +7 -0
- package/dist/tools/lib/index.d.ts.map +1 -0
- package/{template/tools/lib/index.ts → dist/tools/lib/index.js} +1 -0
- package/dist/tools/lib/index.js.map +1 -0
- package/dist/tools/lib/markdown.d.ts +6 -0
- package/dist/tools/lib/markdown.d.ts.map +1 -0
- package/dist/tools/lib/markdown.js +34 -0
- package/dist/tools/lib/markdown.js.map +1 -0
- package/dist/tools/lib/posts.d.ts +25 -0
- package/dist/tools/lib/posts.d.ts.map +1 -0
- package/dist/tools/lib/posts.js +63 -0
- package/dist/tools/lib/posts.js.map +1 -0
- package/dist/tools/lib/script-generator.d.ts +61 -0
- package/dist/tools/lib/script-generator.d.ts.map +1 -0
- package/dist/tools/lib/script-generator.js +182 -0
- package/dist/tools/lib/script-generator.js.map +1 -0
- package/dist/tools/lib/tts-provider.d.ts +65 -0
- package/dist/tools/lib/tts-provider.d.ts.map +1 -0
- package/dist/tools/lib/tts-provider.js +116 -0
- package/dist/tools/lib/tts-provider.js.map +1 -0
- package/dist/tools/lib/types.d.ts +129 -0
- package/dist/tools/lib/types.d.ts.map +1 -0
- package/dist/tools/lib/types.js +64 -0
- package/dist/tools/lib/types.js.map +1 -0
- package/dist/tools/lib/utils.d.ts +18 -0
- package/dist/tools/lib/utils.d.ts.map +1 -0
- package/dist/tools/lib/utils.js +121 -0
- package/dist/tools/lib/utils.js.map +1 -0
- package/dist/tools/lib/vectors.d.ts +27 -0
- package/dist/tools/lib/vectors.d.ts.map +1 -0
- package/dist/tools/lib/vectors.js +64 -0
- package/dist/tools/lib/vectors.js.map +1 -0
- package/dist/tools/podcast-feed.d.ts +6 -0
- package/dist/tools/podcast-feed.d.ts.map +1 -0
- package/dist/tools/podcast-feed.js +121 -0
- package/dist/tools/podcast-feed.js.map +1 -0
- package/dist/tools/podcast-generate.d.ts +15 -0
- package/dist/tools/podcast-generate.d.ts.map +1 -0
- package/dist/tools/podcast-generate.js +318 -0
- package/dist/tools/podcast-generate.js.map +1 -0
- package/dist/tools/podcast-list.d.ts +6 -0
- package/dist/tools/podcast-list.d.ts.map +1 -0
- package/dist/tools/podcast-list.js +66 -0
- package/dist/tools/podcast-list.js.map +1 -0
- package/dist/tools/summarize.d.ts +16 -0
- package/dist/tools/summarize.d.ts.map +1 -0
- package/dist/tools/summarize.js +108 -0
- package/dist/tools/summarize.js.map +1 -0
- package/dist/tools/translate.d.ts +13 -0
- package/dist/tools/translate.d.ts.map +1 -0
- package/dist/tools/translate.js +46 -0
- package/dist/tools/translate.js.map +1 -0
- package/dist/tools/vectorize.d.ts +13 -0
- package/dist/tools/vectorize.d.ts.map +1 -0
- package/dist/tools/vectorize.js +87 -0
- package/dist/tools/vectorize.js.map +1 -0
- package/package.json +14 -9
- package/template/astro.config.ts +8 -28
- package/template/datas/ai-seo.json +8 -0
- package/template/datas/ai-skip-list.json +1 -0
- package/template/datas/author-profile-context.json +21 -0
- package/template/datas/author-profile-report.json +21 -0
- package/template/datas/eval/gold-set.json +72 -0
- package/template/functions/README.md +82 -0
- package/template/functions/api/ai-info.ts +2 -2
- package/template/functions/api/chat.ts +4 -1
- package/template/functions/api/notify/comment.ts +140 -68
- package/template/functions/api/notify/debug.ts +41 -0
- package/template/functions/api/notify/status.ts +97 -0
- package/template/functions/api/notify/test-ai-chat.ts +67 -0
- package/template/package.json +22 -25
- package/template/src/config.ts +11 -0
- package/template/src/content.config.ts +29 -16
- package/template/src/env.d.ts +0 -5
- package/index.js +0 -36
- package/template/tools/README.md +0 -169
- package/template/tools/ai-process.ts +0 -816
- package/template/tools/build-author-context.ts +0 -405
- package/template/tools/build-voice-profile.ts +0 -322
- package/template/tools/generate-author-profile.ts +0 -369
- package/template/tools/generate-cover.ts +0 -123
- package/template/tools/generate-og.ts +0 -280
- package/template/tools/generate-related.ts +0 -146
- package/template/tools/generate-tags.ts +0 -251
- package/template/tools/lib/ai-provider.ts +0 -240
- package/template/tools/lib/frontmatter.ts +0 -94
- package/template/tools/lib/markdown.ts +0 -40
- package/template/tools/lib/posts.ts +0 -89
- package/template/tools/lib/utils.ts +0 -138
- package/template/tools/lib/vectors.ts +0 -96
- package/template/tools/summarize.ts +0 -142
- package/template/tools/translate.ts +0 -60
- package/template/tools/vectorize.ts +0 -105
|
@@ -0,0 +1,190 @@
|
|
|
1
|
+
import { existsSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
export async function postCommand(args) {
|
|
4
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
|
|
5
|
+
console.log(`
|
|
6
|
+
Manage blog posts
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
astro-minimax post <subcommand> [options]
|
|
10
|
+
|
|
11
|
+
Subcommands:
|
|
12
|
+
new <title> Create a new blog post
|
|
13
|
+
list List all posts
|
|
14
|
+
stats Show post statistics
|
|
15
|
+
|
|
16
|
+
Options for "new":
|
|
17
|
+
--lang=<zh|en> Post language (default: zh)
|
|
18
|
+
--category=<path> Category path (e.g., "Tutorial/Frontend")
|
|
19
|
+
|
|
20
|
+
Description:
|
|
21
|
+
The "new" subcommand creates a markdown file with proper frontmatter
|
|
22
|
+
in the correct language directory (src/data/blog/<lang>/).
|
|
23
|
+
|
|
24
|
+
Examples:
|
|
25
|
+
astro-minimax post new "Hello World"
|
|
26
|
+
astro-minimax post new "Getting Started" --lang=en
|
|
27
|
+
astro-minimax post new "Tutorial" --category="Tutorial/Frontend"
|
|
28
|
+
astro-minimax post list
|
|
29
|
+
astro-minimax post stats
|
|
30
|
+
`);
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const subcommand = args[0];
|
|
34
|
+
const subArgs = args.slice(1);
|
|
35
|
+
const contentDir = join(process.cwd(), "src", "data", "blog");
|
|
36
|
+
if (!existsSync(contentDir)) {
|
|
37
|
+
console.error("Error: Not in an astro-minimax blog directory.");
|
|
38
|
+
console.error("Run this command from your blog's root directory.");
|
|
39
|
+
process.exit(1);
|
|
40
|
+
}
|
|
41
|
+
switch (subcommand) {
|
|
42
|
+
case "new":
|
|
43
|
+
await createNewPost(subArgs);
|
|
44
|
+
break;
|
|
45
|
+
case "list":
|
|
46
|
+
await listPosts();
|
|
47
|
+
break;
|
|
48
|
+
case "stats":
|
|
49
|
+
await showStats();
|
|
50
|
+
break;
|
|
51
|
+
default:
|
|
52
|
+
console.error(`Unknown subcommand: ${subcommand}`);
|
|
53
|
+
console.error("Available: new, list, stats");
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
async function createNewPost(args) {
|
|
58
|
+
if (args.length === 0 || args[0].startsWith("--")) {
|
|
59
|
+
console.error("Error: Post title is required.");
|
|
60
|
+
console.error('Usage: astro-minimax post new "<title>"');
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
const title = args.find((a) => !a.startsWith("--")) || "";
|
|
64
|
+
const langArg = args.find((a) => a.startsWith("--lang="));
|
|
65
|
+
const categoryArg = args.find((a) => a.startsWith("--category="));
|
|
66
|
+
const lang = langArg ? langArg.split("=")[1] : "zh";
|
|
67
|
+
const category = categoryArg ? categoryArg.split("=")[1] : "Blog";
|
|
68
|
+
const slug = title
|
|
69
|
+
.toLowerCase()
|
|
70
|
+
.replace(/[^a-z0-9\u4e00-\u9fff]+/g, "-")
|
|
71
|
+
.replace(/^-|-$/g, "");
|
|
72
|
+
const date = new Date().toISOString().split("T")[0];
|
|
73
|
+
const frontmatter = `---
|
|
74
|
+
title: "${title}"
|
|
75
|
+
date: ${date}
|
|
76
|
+
updated: ${date}
|
|
77
|
+
categories:
|
|
78
|
+
- ${category}
|
|
79
|
+
tags:
|
|
80
|
+
- draft
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
# ${title}
|
|
84
|
+
|
|
85
|
+
Write your content here...
|
|
86
|
+
`;
|
|
87
|
+
const { writeFile, mkdir } = await import("node:fs/promises");
|
|
88
|
+
const postDir = join(process.cwd(), "src", "data", "blog", lang);
|
|
89
|
+
const postPath = join(postDir, `${slug}.md`);
|
|
90
|
+
await mkdir(postDir, { recursive: true });
|
|
91
|
+
await writeFile(postPath, frontmatter);
|
|
92
|
+
console.log(`\n ✅ Created: ${postPath}\n`);
|
|
93
|
+
console.log(` Title: ${title}`);
|
|
94
|
+
console.log(` Language: ${lang}`);
|
|
95
|
+
console.log(` Category: ${category}\n`);
|
|
96
|
+
}
|
|
97
|
+
async function collectMarkdownFiles(dir) {
|
|
98
|
+
const { readdir } = await import("node:fs/promises");
|
|
99
|
+
const files = [];
|
|
100
|
+
async function walk(d) {
|
|
101
|
+
if (!existsSync(d))
|
|
102
|
+
return;
|
|
103
|
+
const entries = await readdir(d, { withFileTypes: true });
|
|
104
|
+
for (const entry of entries) {
|
|
105
|
+
const fullPath = join(d, entry.name);
|
|
106
|
+
if (entry.isDirectory() && !entry.name.startsWith("_")) {
|
|
107
|
+
await walk(fullPath);
|
|
108
|
+
}
|
|
109
|
+
else if (entry.isFile() && (entry.name.endsWith(".md") || entry.name.endsWith(".mdx"))) {
|
|
110
|
+
files.push(fullPath);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
await walk(dir);
|
|
115
|
+
return files;
|
|
116
|
+
}
|
|
117
|
+
function parseTitle(content, fallback) {
|
|
118
|
+
const m = content.match(/^title:\s*(?:["'](.+?)["']|(.+))$/m);
|
|
119
|
+
return m?.[1] ?? m?.[2]?.trim() ?? fallback;
|
|
120
|
+
}
|
|
121
|
+
function parseDate(content) {
|
|
122
|
+
const m = content.match(/^pubDatetime:\s*(.+)$/m);
|
|
123
|
+
if (!m)
|
|
124
|
+
return "";
|
|
125
|
+
try {
|
|
126
|
+
return new Date(m[1].trim()).toISOString().slice(0, 10);
|
|
127
|
+
}
|
|
128
|
+
catch {
|
|
129
|
+
return m[1].trim().slice(0, 10);
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
function isDraft(content) {
|
|
133
|
+
return /^draft:\s*true$/m.test(content);
|
|
134
|
+
}
|
|
135
|
+
async function getPostInfos(langDir, lang) {
|
|
136
|
+
const { readFile } = await import("node:fs/promises");
|
|
137
|
+
const files = await collectMarkdownFiles(langDir);
|
|
138
|
+
const posts = [];
|
|
139
|
+
for (const filePath of files) {
|
|
140
|
+
const content = await readFile(filePath, "utf-8");
|
|
141
|
+
const relativePath = filePath.replace(langDir + "/", "");
|
|
142
|
+
posts.push({
|
|
143
|
+
title: parseTitle(content, relativePath),
|
|
144
|
+
date: parseDate(content),
|
|
145
|
+
draft: isDraft(content),
|
|
146
|
+
filePath,
|
|
147
|
+
relativePath,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
posts.sort((a, b) => (b.date || "").localeCompare(a.date || ""));
|
|
151
|
+
return posts;
|
|
152
|
+
}
|
|
153
|
+
async function listPosts() {
|
|
154
|
+
const blogDir = join(process.cwd(), "src", "data", "blog");
|
|
155
|
+
const zhDir = join(blogDir, "zh");
|
|
156
|
+
const enDir = join(blogDir, "en");
|
|
157
|
+
console.log("\n Blog Posts\n");
|
|
158
|
+
for (const [lang, dir] of [["zh", zhDir], ["en", enDir]]) {
|
|
159
|
+
if (!existsSync(dir))
|
|
160
|
+
continue;
|
|
161
|
+
const posts = await getPostInfos(dir, lang);
|
|
162
|
+
const published = posts.filter(p => !p.draft);
|
|
163
|
+
const drafts = posts.filter(p => p.draft);
|
|
164
|
+
console.log(` [${lang === "zh" ? "中文" : "English"}] ${published.length} published${drafts.length ? `, ${drafts.length} draft(s)` : ""}`);
|
|
165
|
+
console.log(` ${"─".repeat(50)}`);
|
|
166
|
+
for (const post of published) {
|
|
167
|
+
const dateStr = post.date ? `${post.date} ` : "";
|
|
168
|
+
console.log(` ${dateStr} ${post.title}`);
|
|
169
|
+
}
|
|
170
|
+
if (drafts.length) {
|
|
171
|
+
console.log(`\n Drafts:`);
|
|
172
|
+
for (const post of drafts) {
|
|
173
|
+
console.log(` ✏️ ${post.title}`);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
console.log();
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function showStats() {
|
|
180
|
+
const blogDir = join(process.cwd(), "src", "data", "blog");
|
|
181
|
+
const zhDir = join(blogDir, "zh");
|
|
182
|
+
const enDir = join(blogDir, "en");
|
|
183
|
+
const zhPosts = existsSync(zhDir) ? await collectMarkdownFiles(zhDir) : [];
|
|
184
|
+
const enPosts = existsSync(enDir) ? await collectMarkdownFiles(enDir) : [];
|
|
185
|
+
console.log("\n Post Statistics\n");
|
|
186
|
+
console.log(` Chinese (zh): ${zhPosts.length}`);
|
|
187
|
+
console.log(` English (en): ${enPosts.length}`);
|
|
188
|
+
console.log(` Total: ${zhPosts.length + enPosts.length}\n`);
|
|
189
|
+
}
|
|
190
|
+
//# sourceMappingURL=post.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"post.js","sourceRoot":"","sources":["../../src/commands/post.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.d.ts","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"AAQA,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmElE"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
import { existsSync } from "node:fs";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { fileURLToPath } from "node:url";
|
|
5
|
+
const __dirname = fileURLToPath(new URL("..", import.meta.url));
|
|
6
|
+
const toolsDir = join(__dirname, "tools");
|
|
7
|
+
export async function profileCommand(args) {
|
|
8
|
+
if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
|
|
9
|
+
console.log(`
|
|
10
|
+
Author profile management
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
astro-minimax profile <subcommand>
|
|
14
|
+
|
|
15
|
+
Subcommands:
|
|
16
|
+
build Build complete author profile (context + voice + report)
|
|
17
|
+
context Build author context from posts
|
|
18
|
+
voice Build writing style profile
|
|
19
|
+
report Generate author profile report
|
|
20
|
+
|
|
21
|
+
Description:
|
|
22
|
+
Generates author-related data for AI-powered features:
|
|
23
|
+
- Author context: Writing patterns, topics, expertise
|
|
24
|
+
- Voice profile: Style characteristics for AI responses
|
|
25
|
+
- Profile report: Structured author profile for About page
|
|
26
|
+
|
|
27
|
+
These profiles help the AI chat feature respond in a style
|
|
28
|
+
consistent with the blog author's voice.
|
|
29
|
+
|
|
30
|
+
Examples:
|
|
31
|
+
astro-minimax profile build
|
|
32
|
+
astro-minimax profile context
|
|
33
|
+
astro-minimax profile voice
|
|
34
|
+
astro-minimax profile report
|
|
35
|
+
`);
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const subcommand = args[0];
|
|
39
|
+
const subArgs = args.slice(1);
|
|
40
|
+
const blogDir = process.cwd();
|
|
41
|
+
const contentDir = join(blogDir, "src", "data", "blog");
|
|
42
|
+
if (!existsSync(contentDir)) {
|
|
43
|
+
console.error("Error: Not in an astro-minimax blog directory.");
|
|
44
|
+
process.exit(1);
|
|
45
|
+
}
|
|
46
|
+
const scriptMap = {
|
|
47
|
+
build: [
|
|
48
|
+
"build-author-context.js",
|
|
49
|
+
"build-voice-profile.js",
|
|
50
|
+
"generate-author-profile.js",
|
|
51
|
+
],
|
|
52
|
+
context: "build-author-context.js",
|
|
53
|
+
voice: "build-voice-profile.js",
|
|
54
|
+
report: "generate-author-profile.js",
|
|
55
|
+
};
|
|
56
|
+
const scripts = scriptMap[subcommand];
|
|
57
|
+
if (!scripts) {
|
|
58
|
+
console.error(`Unknown subcommand: ${subcommand}`);
|
|
59
|
+
console.error("Available: build, context, voice, report");
|
|
60
|
+
process.exit(1);
|
|
61
|
+
}
|
|
62
|
+
if (Array.isArray(scripts)) {
|
|
63
|
+
for (const script of scripts) {
|
|
64
|
+
await runTool(script, subArgs, blogDir);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
await runTool(scripts, subArgs, blogDir);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
async function runTool(script, args, cwd) {
|
|
72
|
+
const scriptPath = join(toolsDir, script);
|
|
73
|
+
return new Promise((resolve, reject) => {
|
|
74
|
+
const child = spawn("npx", ["tsx", scriptPath, ...args], {
|
|
75
|
+
stdio: "inherit",
|
|
76
|
+
shell: true,
|
|
77
|
+
cwd,
|
|
78
|
+
});
|
|
79
|
+
child.on("close", (code) => {
|
|
80
|
+
if (code === 0)
|
|
81
|
+
resolve();
|
|
82
|
+
else
|
|
83
|
+
reject(new Error(`Process exited with code ${code}`));
|
|
84
|
+
});
|
|
85
|
+
child.on("error", reject);
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
//# sourceMappingURL=profile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../../src/commands/profile.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { fileURLToPath } from "node:url";
|
|
3
|
+
import { initCommand } from "./commands/init.js";
|
|
4
|
+
import { postCommand } from "./commands/post.js";
|
|
5
|
+
import { aiCommand } from "./commands/ai.js";
|
|
6
|
+
import { profileCommand } from "./commands/profile.js";
|
|
7
|
+
import { dataCommand } from "./commands/data.js";
|
|
8
|
+
import { hooksCommand } from "./commands/hooks.js";
|
|
9
|
+
const __dirname = fileURLToPath(new URL(".", import.meta.url));
|
|
10
|
+
const VERSION = "0.6.0";
|
|
11
|
+
const commands = [
|
|
12
|
+
{ name: "init", description: "Create a new blog project", run: initCommand },
|
|
13
|
+
{ name: "post", description: "Manage blog posts", run: postCommand },
|
|
14
|
+
{ name: "ai", description: "AI content processing (process, seo, summary, eval)", run: aiCommand },
|
|
15
|
+
{ name: "profile", description: "Author profile (build, context, voice, report)", run: profileCommand },
|
|
16
|
+
{ name: "data", description: "Data status and management", run: dataCommand },
|
|
17
|
+
{ name: "hooks", description: "Git hooks setup (install, uninstall)", run: hooksCommand },
|
|
18
|
+
];
|
|
19
|
+
function printHelp() {
|
|
20
|
+
console.log(`
|
|
21
|
+
astro-minimax v${VERSION} - A minimalist Astro blog CLI
|
|
22
|
+
|
|
23
|
+
Usage:
|
|
24
|
+
astro-minimax <command> [subcommand] [options]
|
|
25
|
+
|
|
26
|
+
Commands:
|
|
27
|
+
init <project> Create a new blog project
|
|
28
|
+
post Manage blog posts (new, list, stats)
|
|
29
|
+
ai AI content processing (process, seo, summary, eval)
|
|
30
|
+
profile Author profile (build, context, voice, report)
|
|
31
|
+
data Data management (status, clear)
|
|
32
|
+
hooks Git hooks setup (install, uninstall)
|
|
33
|
+
|
|
34
|
+
Run "astro-minimax <command> --help" for detailed usage.
|
|
35
|
+
|
|
36
|
+
Examples:
|
|
37
|
+
astro-minimax init my-blog
|
|
38
|
+
astro-minimax post new "Hello World"
|
|
39
|
+
astro-minimax ai process
|
|
40
|
+
astro-minimax profile build
|
|
41
|
+
astro-minimax hooks install
|
|
42
|
+
|
|
43
|
+
Documentation: https://github.com/souloss/astro-minimax
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
function printVersion() {
|
|
47
|
+
console.log(`astro-minimax v${VERSION}`);
|
|
48
|
+
}
|
|
49
|
+
async function main() {
|
|
50
|
+
const args = process.argv.slice(2);
|
|
51
|
+
if (args.length === 0) {
|
|
52
|
+
printHelp();
|
|
53
|
+
process.exit(0);
|
|
54
|
+
}
|
|
55
|
+
if (args[0] === "--help" || args[0] === "-h") {
|
|
56
|
+
printHelp();
|
|
57
|
+
process.exit(0);
|
|
58
|
+
}
|
|
59
|
+
if (args[0] === "--version" || args[0] === "-v") {
|
|
60
|
+
printVersion();
|
|
61
|
+
process.exit(0);
|
|
62
|
+
}
|
|
63
|
+
const commandName = args[0];
|
|
64
|
+
const command = commands.find((c) => c.name === commandName);
|
|
65
|
+
if (!command) {
|
|
66
|
+
console.error(`Unknown command: ${commandName}`);
|
|
67
|
+
console.error("\nAvailable commands: init, post, ai, profile, data, hooks");
|
|
68
|
+
console.error('Run "astro-minimax --help" for usage.');
|
|
69
|
+
process.exit(1);
|
|
70
|
+
}
|
|
71
|
+
try {
|
|
72
|
+
await command.run(args.slice(1));
|
|
73
|
+
}
|
|
74
|
+
catch (error) {
|
|
75
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
76
|
+
console.error(`\nError: ${message}\n`);
|
|
77
|
+
process.exit(1);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
main();
|
|
81
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
#!/usr/bin/env npx tsx
|
|
2
|
+
/**
|
|
3
|
+
* AI 文章批处理脚本 (适配 astro-minimax)
|
|
4
|
+
*
|
|
5
|
+
* 用法:
|
|
6
|
+
* pnpm ai:process 处理所有文章(跳过已缓存且未变更的)
|
|
7
|
+
* pnpm ai:process --force 强制重新处理所有文章
|
|
8
|
+
* pnpm ai:process --slug=xxx 只处理指定文章(如 zh/getting-started)
|
|
9
|
+
* pnpm ai:process --task=summary 只运行摘要任务
|
|
10
|
+
* pnpm ai:process --task=seo 只运行 SEO 任务
|
|
11
|
+
* pnpm ai:process --recent=10 处理最近 10 篇文章
|
|
12
|
+
* pnpm ai:process --new-only 只处理没有缓存的文章
|
|
13
|
+
* pnpm ai:process --dry-run 只显示会处理哪些文章
|
|
14
|
+
* pnpm ai:process --concurrency=10 设置并发数(默认 10)
|
|
15
|
+
* pnpm ai:process --no-skip 忽略跳过列表,重试所有文章
|
|
16
|
+
* pnpm ai:process --clear-skip 清空跳过列表后再处理
|
|
17
|
+
* pnpm ai:process --lang=zh 只处理指定语言的文章
|
|
18
|
+
*/
|
|
19
|
+
export {};
|
|
20
|
+
//# sourceMappingURL=ai-process.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ai-process.d.ts","sourceRoot":"","sources":["../../src/tools/ai-process.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;GAgBG"}
|