@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.
Files changed (174) hide show
  1. package/README.md +69 -0
  2. package/dist/commands/ai.d.ts +2 -0
  3. package/dist/commands/ai.d.ts.map +1 -0
  4. package/dist/commands/ai.js +99 -0
  5. package/dist/commands/ai.js.map +1 -0
  6. package/dist/commands/data.d.ts +2 -0
  7. package/dist/commands/data.d.ts.map +1 -0
  8. package/dist/commands/data.js +111 -0
  9. package/dist/commands/data.js.map +1 -0
  10. package/dist/commands/hooks.d.ts +2 -0
  11. package/dist/commands/hooks.d.ts.map +1 -0
  12. package/dist/commands/hooks.js +378 -0
  13. package/dist/commands/hooks.js.map +1 -0
  14. package/dist/commands/init.d.ts +2 -0
  15. package/dist/commands/init.d.ts.map +1 -0
  16. package/dist/commands/init.js +50 -0
  17. package/dist/commands/init.js.map +1 -0
  18. package/dist/commands/podcast.d.ts +2 -0
  19. package/dist/commands/podcast.d.ts.map +1 -0
  20. package/dist/commands/podcast.js +89 -0
  21. package/dist/commands/podcast.js.map +1 -0
  22. package/dist/commands/post.d.ts +2 -0
  23. package/dist/commands/post.d.ts.map +1 -0
  24. package/dist/commands/post.js +190 -0
  25. package/dist/commands/post.js.map +1 -0
  26. package/dist/commands/profile.d.ts +2 -0
  27. package/dist/commands/profile.d.ts.map +1 -0
  28. package/dist/commands/profile.js +88 -0
  29. package/dist/commands/profile.js.map +1 -0
  30. package/dist/index.d.ts +3 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +81 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/tools/ai-process.d.ts +20 -0
  35. package/dist/tools/ai-process.d.ts.map +1 -0
  36. package/dist/tools/ai-process.js +607 -0
  37. package/dist/tools/ai-process.js.map +1 -0
  38. package/dist/tools/build-author-context.d.ts +13 -0
  39. package/dist/tools/build-author-context.d.ts.map +1 -0
  40. package/dist/tools/build-author-context.js +313 -0
  41. package/dist/tools/build-author-context.js.map +1 -0
  42. package/dist/tools/build-voice-profile.d.ts +12 -0
  43. package/dist/tools/build-voice-profile.d.ts.map +1 -0
  44. package/dist/tools/build-voice-profile.js +270 -0
  45. package/dist/tools/build-voice-profile.js.map +1 -0
  46. package/dist/tools/eval-ai-chat.d.ts +17 -0
  47. package/dist/tools/eval-ai-chat.d.ts.map +1 -0
  48. package/dist/tools/eval-ai-chat.js +362 -0
  49. package/dist/tools/eval-ai-chat.js.map +1 -0
  50. package/dist/tools/generate-author-profile.d.ts +14 -0
  51. package/dist/tools/generate-author-profile.d.ts.map +1 -0
  52. package/dist/tools/generate-author-profile.js +289 -0
  53. package/dist/tools/generate-author-profile.js.map +1 -0
  54. package/dist/tools/generate-cover.d.ts +14 -0
  55. package/dist/tools/generate-cover.d.ts.map +1 -0
  56. package/dist/tools/generate-cover.js +95 -0
  57. package/dist/tools/generate-cover.js.map +1 -0
  58. package/dist/tools/generate-og.d.ts +3 -0
  59. package/dist/tools/generate-og.d.ts.map +1 -0
  60. package/dist/tools/generate-og.js +254 -0
  61. package/dist/tools/generate-og.js.map +1 -0
  62. package/dist/tools/generate-related.d.ts +11 -0
  63. package/dist/tools/generate-related.d.ts.map +1 -0
  64. package/dist/tools/generate-related.js +124 -0
  65. package/dist/tools/generate-related.js.map +1 -0
  66. package/dist/tools/generate-tags.d.ts +14 -0
  67. package/dist/tools/generate-tags.d.ts.map +1 -0
  68. package/dist/tools/generate-tags.js +182 -0
  69. package/dist/tools/generate-tags.js.map +1 -0
  70. package/dist/tools/lib/ai-provider.d.ts +43 -0
  71. package/dist/tools/lib/ai-provider.d.ts.map +1 -0
  72. package/dist/tools/lib/ai-provider.js +146 -0
  73. package/dist/tools/lib/ai-provider.js.map +1 -0
  74. package/dist/tools/lib/audio-processor.d.ts +46 -0
  75. package/dist/tools/lib/audio-processor.d.ts.map +1 -0
  76. package/dist/tools/lib/audio-processor.js +188 -0
  77. package/dist/tools/lib/audio-processor.js.map +1 -0
  78. package/dist/tools/lib/frontmatter.d.ts +11 -0
  79. package/dist/tools/lib/frontmatter.d.ts.map +1 -0
  80. package/dist/tools/lib/frontmatter.js +80 -0
  81. package/dist/tools/lib/frontmatter.js.map +1 -0
  82. package/dist/tools/lib/index.d.ts +7 -0
  83. package/dist/tools/lib/index.d.ts.map +1 -0
  84. package/{template/tools/lib/index.ts → dist/tools/lib/index.js} +1 -0
  85. package/dist/tools/lib/index.js.map +1 -0
  86. package/dist/tools/lib/markdown.d.ts +6 -0
  87. package/dist/tools/lib/markdown.d.ts.map +1 -0
  88. package/dist/tools/lib/markdown.js +34 -0
  89. package/dist/tools/lib/markdown.js.map +1 -0
  90. package/dist/tools/lib/posts.d.ts +25 -0
  91. package/dist/tools/lib/posts.d.ts.map +1 -0
  92. package/dist/tools/lib/posts.js +63 -0
  93. package/dist/tools/lib/posts.js.map +1 -0
  94. package/dist/tools/lib/script-generator.d.ts +61 -0
  95. package/dist/tools/lib/script-generator.d.ts.map +1 -0
  96. package/dist/tools/lib/script-generator.js +182 -0
  97. package/dist/tools/lib/script-generator.js.map +1 -0
  98. package/dist/tools/lib/tts-provider.d.ts +65 -0
  99. package/dist/tools/lib/tts-provider.d.ts.map +1 -0
  100. package/dist/tools/lib/tts-provider.js +116 -0
  101. package/dist/tools/lib/tts-provider.js.map +1 -0
  102. package/dist/tools/lib/types.d.ts +129 -0
  103. package/dist/tools/lib/types.d.ts.map +1 -0
  104. package/dist/tools/lib/types.js +64 -0
  105. package/dist/tools/lib/types.js.map +1 -0
  106. package/dist/tools/lib/utils.d.ts +18 -0
  107. package/dist/tools/lib/utils.d.ts.map +1 -0
  108. package/dist/tools/lib/utils.js +121 -0
  109. package/dist/tools/lib/utils.js.map +1 -0
  110. package/dist/tools/lib/vectors.d.ts +27 -0
  111. package/dist/tools/lib/vectors.d.ts.map +1 -0
  112. package/dist/tools/lib/vectors.js +64 -0
  113. package/dist/tools/lib/vectors.js.map +1 -0
  114. package/dist/tools/podcast-feed.d.ts +6 -0
  115. package/dist/tools/podcast-feed.d.ts.map +1 -0
  116. package/dist/tools/podcast-feed.js +121 -0
  117. package/dist/tools/podcast-feed.js.map +1 -0
  118. package/dist/tools/podcast-generate.d.ts +15 -0
  119. package/dist/tools/podcast-generate.d.ts.map +1 -0
  120. package/dist/tools/podcast-generate.js +318 -0
  121. package/dist/tools/podcast-generate.js.map +1 -0
  122. package/dist/tools/podcast-list.d.ts +6 -0
  123. package/dist/tools/podcast-list.d.ts.map +1 -0
  124. package/dist/tools/podcast-list.js +66 -0
  125. package/dist/tools/podcast-list.js.map +1 -0
  126. package/dist/tools/summarize.d.ts +16 -0
  127. package/dist/tools/summarize.d.ts.map +1 -0
  128. package/dist/tools/summarize.js +108 -0
  129. package/dist/tools/summarize.js.map +1 -0
  130. package/dist/tools/translate.d.ts +13 -0
  131. package/dist/tools/translate.d.ts.map +1 -0
  132. package/dist/tools/translate.js +46 -0
  133. package/dist/tools/translate.js.map +1 -0
  134. package/dist/tools/vectorize.d.ts +13 -0
  135. package/dist/tools/vectorize.d.ts.map +1 -0
  136. package/dist/tools/vectorize.js +87 -0
  137. package/dist/tools/vectorize.js.map +1 -0
  138. package/package.json +14 -9
  139. package/template/astro.config.ts +8 -28
  140. package/template/datas/ai-seo.json +8 -0
  141. package/template/datas/ai-skip-list.json +1 -0
  142. package/template/datas/author-profile-context.json +21 -0
  143. package/template/datas/author-profile-report.json +21 -0
  144. package/template/datas/eval/gold-set.json +72 -0
  145. package/template/functions/README.md +82 -0
  146. package/template/functions/api/ai-info.ts +2 -2
  147. package/template/functions/api/chat.ts +4 -1
  148. package/template/functions/api/notify/comment.ts +140 -68
  149. package/template/functions/api/notify/debug.ts +41 -0
  150. package/template/functions/api/notify/status.ts +97 -0
  151. package/template/functions/api/notify/test-ai-chat.ts +67 -0
  152. package/template/package.json +22 -25
  153. package/template/src/config.ts +11 -0
  154. package/template/src/content.config.ts +29 -16
  155. package/template/src/env.d.ts +0 -5
  156. package/index.js +0 -36
  157. package/template/tools/README.md +0 -169
  158. package/template/tools/ai-process.ts +0 -816
  159. package/template/tools/build-author-context.ts +0 -405
  160. package/template/tools/build-voice-profile.ts +0 -322
  161. package/template/tools/generate-author-profile.ts +0 -369
  162. package/template/tools/generate-cover.ts +0 -123
  163. package/template/tools/generate-og.ts +0 -280
  164. package/template/tools/generate-related.ts +0 -146
  165. package/template/tools/generate-tags.ts +0 -251
  166. package/template/tools/lib/ai-provider.ts +0 -240
  167. package/template/tools/lib/frontmatter.ts +0 -94
  168. package/template/tools/lib/markdown.ts +0 -40
  169. package/template/tools/lib/posts.ts +0 -89
  170. package/template/tools/lib/utils.ts +0 -138
  171. package/template/tools/lib/vectors.ts +0 -96
  172. package/template/tools/summarize.ts +0 -142
  173. package/template/tools/translate.ts +0 -60
  174. package/template/tools/vectorize.ts +0 -105
package/README.md CHANGED
@@ -81,6 +81,75 @@ No `src/pages/` directory — all routes are injected by `@astro-minimax/core`.
81
81
  | Alerts | `> [!NOTE]` | GitHub-style alerts |
82
82
  | Tables | Markdown tables | Styled responsive tables |
83
83
 
84
+ ## CLI Commands
85
+
86
+ ### `astro-minimax init <project>`
87
+
88
+ Create a new blog project.
89
+
90
+ ### `astro-minimax post <subcommand>`
91
+
92
+ Manage blog posts:
93
+
94
+ | Subcommand | Description |
95
+ | ---------- | ----------- |
96
+ | `new "Title"` | Create a new post with frontmatter |
97
+ | `list` | List all posts |
98
+ | `stats` | Show post statistics |
99
+
100
+ ### `astro-minimax hooks <subcommand>`
101
+
102
+ Manage Git hooks for automatic date management:
103
+
104
+ | Subcommand | Description |
105
+ | ---------- | ----------- |
106
+ | `install` | Install Husky and pre-commit hook |
107
+ | `uninstall` | Remove hooks and Husky |
108
+ | `status` | Show current hooks status |
109
+
110
+ **What the pre-commit hook does:**
111
+
112
+ - Auto-fills `pubDatetime` for new `.md` files (only if empty)
113
+ - Auto-fills `modDatetime` for modified files when `draft: false` (only if empty)
114
+ - Handles `draft: first` for first-time publishing
115
+
116
+ > **Important:** Manually specified dates are NEVER overwritten. The hook only fills empty/missing values.
117
+
118
+ **Works with:**
119
+ - Single projects (created via `astro-minimax init`)
120
+ - Monorepos (detects git root automatically)
121
+
122
+ ### `astro-minimax ai <subcommand>`
123
+
124
+ AI content processing:
125
+
126
+ | Subcommand | Description |
127
+ | ---------- | ----------- |
128
+ | `process` | Process posts (summary + SEO) |
129
+ | `seo` | Generate SEO metadata |
130
+ | `summary` | Generate summaries |
131
+ | `eval` | Evaluate AI chat quality |
132
+
133
+ ### `astro-minimax profile <subcommand>`
134
+
135
+ Author profile management:
136
+
137
+ | Subcommand | Description |
138
+ | ---------- | ----------- |
139
+ | `build` | Build complete profile |
140
+ | `context` | Build author context |
141
+ | `voice` | Build voice profile |
142
+ | `report` | Generate profile report |
143
+
144
+ ### `astro-minimax data <subcommand>`
145
+
146
+ Data management:
147
+
148
+ | Subcommand | Description |
149
+ | ---------- | ----------- |
150
+ | `status` | Show data file status |
151
+ | `clear` | Clear generated cache |
152
+
84
153
  ## Customization
85
154
 
86
155
  - **Colors**: Override CSS custom properties in your own CSS file
@@ -0,0 +1,2 @@
1
+ export declare function aiCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.d.ts","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"AAQA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+E7D"}
@@ -0,0 +1,99 @@
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 aiCommand(args) {
8
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
9
+ console.log(`
10
+ AI-powered content processing
11
+
12
+ Usage:
13
+ astro-minimax ai <subcommand> [options]
14
+
15
+ Subcommands:
16
+ process Process posts with AI (summaries + SEO metadata)
17
+ seo Generate SEO metadata only
18
+ summary Generate summaries only
19
+ eval Evaluate AI chat quality with golden test set
20
+
21
+ Options for "process":
22
+ --force Reprocess all posts (ignore cache)
23
+ --slug=<slug> Process only the specified post
24
+ --recent=<n> Process only recent N posts
25
+ --new-only Process only posts without existing data
26
+ --dry-run Preview what would be processed
27
+ --lang=<zh|en> Process only specified language
28
+
29
+ Options for "eval":
30
+ --url=<url> API base URL (default: http://localhost:4321)
31
+ --category=<cat> Only evaluate specific category
32
+ --id=<case-id> Only evaluate specific test case
33
+ --verbose Show detailed output
34
+ --json Output JSON report
35
+
36
+ Description:
37
+ Processes blog posts to generate AI-powered content:
38
+ - Summaries for search and preview
39
+ - SEO metadata (keywords, descriptions)
40
+ - Caches results to avoid reprocessing
41
+
42
+ The "eval" subcommand tests the AI chat against a golden test set
43
+ (datas/eval/gold-set.json) and generates a quality report.
44
+
45
+ Examples:
46
+ astro-minimax ai process
47
+ astro-minimax ai process --force
48
+ astro-minimax ai process --slug=zh/getting-started
49
+ astro-minimax ai process --recent=5
50
+ astro-minimax ai seo --lang=en
51
+ astro-minimax ai summary
52
+ astro-minimax ai eval
53
+ astro-minimax ai eval --url=https://your-blog.com
54
+ astro-minimax ai eval --category=no_answer --verbose
55
+ `);
56
+ return;
57
+ }
58
+ const subcommand = args[0];
59
+ const subArgs = args.slice(1);
60
+ const blogDir = process.cwd();
61
+ const contentDir = join(blogDir, "src", "data", "blog");
62
+ if (!existsSync(contentDir)) {
63
+ console.error("Error: Not in an astro-minimax blog directory.");
64
+ console.error("Run this command from your blog's root directory.");
65
+ process.exit(1);
66
+ }
67
+ const scriptMap = {
68
+ process: { script: "ai-process.js" },
69
+ seo: { script: "ai-process.js", extraArgs: ["--task=seo"] },
70
+ summary: { script: "ai-process.js", extraArgs: ["--task=summary"] },
71
+ eval: { script: "eval-ai-chat.js" },
72
+ };
73
+ const config = scriptMap[subcommand];
74
+ if (!config) {
75
+ console.error(`Unknown subcommand: ${subcommand}`);
76
+ console.error("Available: process, seo, summary");
77
+ process.exit(1);
78
+ }
79
+ const toolArgs = [...(config.extraArgs || []), ...subArgs];
80
+ await runTool(config.script, toolArgs, blogDir);
81
+ }
82
+ async function runTool(script, args, cwd) {
83
+ const scriptPath = join(toolsDir, script);
84
+ return new Promise((resolve, reject) => {
85
+ const child = spawn("npx", ["tsx", scriptPath, ...args], {
86
+ stdio: "inherit",
87
+ shell: true,
88
+ cwd,
89
+ });
90
+ child.on("close", (code) => {
91
+ if (code === 0)
92
+ resolve();
93
+ else
94
+ reject(new Error(`Process exited with code ${code}`));
95
+ });
96
+ child.on("error", reject);
97
+ });
98
+ }
99
+ //# sourceMappingURL=ai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai.js","sourceRoot":"","sources":["../../src/commands/ai.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function dataCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=data.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.d.ts","sourceRoot":"","sources":["../../src/commands/data.ts"],"names":[],"mappings":"AAGA,wBAAsB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8C/D"}
@@ -0,0 +1,111 @@
1
+ import { existsSync, readFileSync, unlinkSync } from "node:fs";
2
+ import { join } from "node:path";
3
+ export async function dataCommand(args) {
4
+ if (args.length === 0 || args[0] === "--help" || args[0] === "-h") {
5
+ console.log(`
6
+ Data status and management
7
+
8
+ Usage:
9
+ astro-minimax data <subcommand>
10
+
11
+ Subcommands:
12
+ status Show data files status
13
+ clear Clear all generated data caches
14
+
15
+ Description:
16
+ View and manage the generated data files in datas/ directory:
17
+ - AI summaries and SEO metadata
18
+ - Author profiles and contexts
19
+ - Voice profiles
20
+ - Skip lists
21
+
22
+ Examples:
23
+ astro-minimax data status
24
+ astro-minimax data clear
25
+ `);
26
+ return;
27
+ }
28
+ const subcommand = args[0];
29
+ const datasDir = join(process.cwd(), "datas");
30
+ if (!existsSync(datasDir)) {
31
+ console.error("Error: Not in an astro-minimax blog directory.");
32
+ process.exit(1);
33
+ }
34
+ switch (subcommand) {
35
+ case "status":
36
+ showStatus(datasDir);
37
+ break;
38
+ case "clear":
39
+ await clearData(datasDir);
40
+ break;
41
+ default:
42
+ console.error(`Unknown subcommand: ${subcommand}`);
43
+ console.error("Available: status, clear");
44
+ process.exit(1);
45
+ }
46
+ }
47
+ function showStatus(datasDir) {
48
+ console.log("\n Data Files Status:\n");
49
+ const files = [
50
+ { name: "ai-summaries.json", desc: "AI-generated summaries" },
51
+ { name: "ai-seo.json", desc: "SEO metadata" },
52
+ { name: "ai-skip-list.json", desc: "Skipped posts list" },
53
+ { name: "author-context.json", desc: "Author context" },
54
+ { name: "author-profile-context.json", desc: "Profile context" },
55
+ { name: "author-profile-report.json", desc: "Profile report" },
56
+ { name: "voice-profile.json", desc: "Writing style profile" },
57
+ ];
58
+ for (const file of files) {
59
+ const path = join(datasDir, file.name);
60
+ if (existsSync(path)) {
61
+ const content = readFileSync(path, "utf-8");
62
+ const stat = JSON.parse(content);
63
+ const articles = stat.articles ? Object.keys(stat.articles).length : 0;
64
+ const posts = stat.posts ? stat.posts.length : 0;
65
+ const updated = stat.meta?.lastUpdated || stat.generatedAt || "never";
66
+ console.log(` ✅ ${file.name}`);
67
+ console.log(` ${file.desc}`);
68
+ if (articles > 0)
69
+ console.log(` ${articles} articles processed`);
70
+ if (posts > 0)
71
+ console.log(` ${posts} posts analyzed`);
72
+ console.log(` Last updated: ${updated}`);
73
+ console.log();
74
+ }
75
+ else {
76
+ console.log(` ⬜ ${file.name}`);
77
+ console.log(` ${file.desc} - not generated`);
78
+ console.log();
79
+ }
80
+ }
81
+ }
82
+ async function clearData(datasDir) {
83
+ const clearableFiles = [
84
+ "ai-summaries.json",
85
+ "ai-seo.json",
86
+ "ai-skip-list.json",
87
+ "author-context.json",
88
+ "author-profile-context.json",
89
+ "author-profile-report.json",
90
+ "voice-profile.json",
91
+ ];
92
+ console.log("\n Clearing generated data...\n");
93
+ let cleared = 0;
94
+ for (const file of clearableFiles) {
95
+ const path = join(datasDir, file);
96
+ if (existsSync(path)) {
97
+ unlinkSync(path);
98
+ console.log(` ✓ Removed ${file}`);
99
+ cleared++;
100
+ }
101
+ }
102
+ const sourcesDir = join(datasDir, "sources", "blog-digest.json");
103
+ if (existsSync(sourcesDir)) {
104
+ unlinkSync(sourcesDir);
105
+ console.log(` ✓ Removed sources/blog-digest.json`);
106
+ cleared++;
107
+ }
108
+ console.log(`\n Cleared ${cleared} file(s).\n`);
109
+ console.log(" Run 'astro-minimax ai process' to regenerate.\n");
110
+ }
111
+ //# sourceMappingURL=data.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"data.js","sourceRoot":"","sources":["../../src/commands/data.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function hooksCommand(args: string[]): Promise<void>;
2
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../../src/commands/hooks.ts"],"names":[],"mappings":"AA8XA,wBAAsB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDhE"}