@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
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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"}
|