@edtools/cli 0.4.0 → 0.4.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.
@@ -0,0 +1,528 @@
1
+ // src/types/adapter.ts
2
+ var AdapterRegistry = class {
3
+ adapters;
4
+ constructor() {
5
+ this.adapters = /* @__PURE__ */ new Map();
6
+ }
7
+ register(adapter) {
8
+ this.adapters.set(adapter.name, adapter);
9
+ }
10
+ get(name) {
11
+ return this.adapters.get(name);
12
+ }
13
+ async detectAdapter(projectPath) {
14
+ for (const adapter of this.adapters.values()) {
15
+ if (await adapter.detect(projectPath)) {
16
+ return adapter;
17
+ }
18
+ }
19
+ return null;
20
+ }
21
+ list() {
22
+ return Array.from(this.adapters.keys());
23
+ }
24
+ };
25
+
26
+ // src/adapters/html/index.ts
27
+ import fs from "fs-extra";
28
+ import path from "path";
29
+ import { fileURLToPath } from "url";
30
+ import ejs from "ejs";
31
+ import { marked } from "marked";
32
+ var __filename = fileURLToPath(import.meta.url);
33
+ var __dirname = path.dirname(__filename);
34
+ var HTMLAdapter = class {
35
+ name = "html";
36
+ async detect(projectPath) {
37
+ try {
38
+ const files = await fs.readdir(projectPath);
39
+ const hasHtml = files.some((f) => f.endsWith(".html"));
40
+ const hasIndexHtml = await fs.pathExists(path.join(projectPath, "index.html"));
41
+ return hasHtml || hasIndexHtml;
42
+ } catch (error) {
43
+ return false;
44
+ }
45
+ }
46
+ async render(content) {
47
+ const templatePath = path.join(__dirname, "templates", "blog-post.html.ejs");
48
+ if (!await fs.pathExists(templatePath)) {
49
+ throw new Error(`Template not found at: ${templatePath}`);
50
+ }
51
+ const template = await fs.readFile(templatePath, "utf-8");
52
+ const templateData = {
53
+ metadata: content.metadata,
54
+ schemaOrg: JSON.stringify(content.schemaOrg, null, 2),
55
+ intro: await this.markdownToHTML(content.content.intro),
56
+ sections: await Promise.all(
57
+ content.content.sections.map(async (section) => ({
58
+ ...section,
59
+ content: await this.renderSectionContent(section)
60
+ }))
61
+ ),
62
+ conclusion: await this.markdownToHTML(content.content.conclusion),
63
+ cta: content.content.cta,
64
+ relatedPosts: content.relatedPosts || [],
65
+ seoScore: content.seo.score
66
+ };
67
+ const html = ejs.render(template, templateData);
68
+ return html;
69
+ }
70
+ async write(output, outputPath) {
71
+ await fs.ensureDir(path.dirname(outputPath));
72
+ await fs.writeFile(outputPath, output, "utf-8");
73
+ }
74
+ getFileExtension() {
75
+ return ".html";
76
+ }
77
+ transformPath(basePath) {
78
+ if (!basePath.endsWith(".html")) {
79
+ return basePath + "/index.html";
80
+ }
81
+ return basePath;
82
+ }
83
+ /**
84
+ * Convert markdown to HTML
85
+ */
86
+ async markdownToHTML(markdown) {
87
+ return marked(markdown);
88
+ }
89
+ /**
90
+ * Render section content based on type
91
+ */
92
+ async renderSectionContent(section) {
93
+ switch (section.type) {
94
+ case "text":
95
+ return await this.markdownToHTML(section.content);
96
+ case "comparison":
97
+ return this.renderComparisonTable(section.data);
98
+ case "list":
99
+ return this.renderList(section.data);
100
+ case "code":
101
+ return this.renderCode(section.data);
102
+ default:
103
+ return await this.markdownToHTML(section.content);
104
+ }
105
+ }
106
+ /**
107
+ * Render comparison table
108
+ */
109
+ renderComparisonTable(data) {
110
+ if (!data || !data.headers || !data.rows) {
111
+ return "";
112
+ }
113
+ let html = '<table class="comparison-table">\n';
114
+ html += " <thead>\n <tr>\n";
115
+ data.headers.forEach((header) => {
116
+ html += ` <th>${header}</th>
117
+ `;
118
+ });
119
+ html += " </tr>\n </thead>\n";
120
+ html += " <tbody>\n";
121
+ data.rows.forEach((row) => {
122
+ html += " <tr>\n";
123
+ row.forEach((cell) => {
124
+ html += ` <td>${cell}</td>
125
+ `;
126
+ });
127
+ html += " </tr>\n";
128
+ });
129
+ html += " </tbody>\n";
130
+ html += "</table>";
131
+ return html;
132
+ }
133
+ /**
134
+ * Render list
135
+ */
136
+ renderList(data) {
137
+ if (!data || !data.items) {
138
+ return "";
139
+ }
140
+ const tag = data.ordered ? "ol" : "ul";
141
+ let html = `<${tag} class="content-list">
142
+ `;
143
+ data.items.forEach((item) => {
144
+ html += " <li>\n";
145
+ html += ` <strong>${item.title}</strong>
146
+ `;
147
+ if (item.description) {
148
+ html += ` <p>${item.description}</p>
149
+ `;
150
+ }
151
+ html += " </li>\n";
152
+ });
153
+ html += `</${tag}>`;
154
+ return html;
155
+ }
156
+ /**
157
+ * Render code block
158
+ */
159
+ renderCode(data) {
160
+ if (!data || !data.code) {
161
+ return "";
162
+ }
163
+ let html = '<div class="code-block">\n';
164
+ if (data.caption) {
165
+ html += ` <div class="code-caption">${data.caption}</div>
166
+ `;
167
+ }
168
+ html += ` <pre><code class="language-${data.language || "plaintext"}">${this.escapeHtml(data.code)}</code></pre>
169
+ `;
170
+ html += "</div>";
171
+ return html;
172
+ }
173
+ /**
174
+ * Escape HTML entities
175
+ */
176
+ escapeHtml(text) {
177
+ const map = {
178
+ "&": "&amp;",
179
+ "<": "&lt;",
180
+ ">": "&gt;",
181
+ '"': "&quot;",
182
+ "'": "&#039;"
183
+ };
184
+ return text.replace(/[&<>"']/g, (m) => map[m]);
185
+ }
186
+ };
187
+
188
+ // src/core/generator.ts
189
+ import Anthropic from "@anthropic-ai/sdk";
190
+ import OpenAI from "openai";
191
+ import path2 from "path";
192
+ import fs2 from "fs-extra";
193
+ import slugify from "slugify";
194
+ var ContentGenerator = class {
195
+ anthropic = null;
196
+ openai = null;
197
+ provider;
198
+ adapters;
199
+ constructor(apiKey, provider = "anthropic") {
200
+ this.provider = provider;
201
+ if (provider === "anthropic") {
202
+ this.anthropic = new Anthropic({
203
+ apiKey: apiKey || process.env.ANTHROPIC_API_KEY || ""
204
+ });
205
+ } else if (provider === "openai") {
206
+ this.openai = new OpenAI({
207
+ apiKey: apiKey || process.env.OPENAI_API_KEY || ""
208
+ });
209
+ }
210
+ this.adapters = new AdapterRegistry();
211
+ this.adapters.register(new HTMLAdapter());
212
+ }
213
+ /**
214
+ * Main generate method
215
+ */
216
+ async generate(config) {
217
+ const results = {
218
+ success: true,
219
+ posts: [],
220
+ warnings: [],
221
+ errors: []
222
+ };
223
+ try {
224
+ const adapter = await this.adapters.detectAdapter(config.projectPath);
225
+ if (!adapter) {
226
+ throw new Error("No suitable adapter found for this project");
227
+ }
228
+ console.log(`\u2713 Using adapter: ${adapter.name}`);
229
+ const topics = config.topics || await this.generateTopics(config.productInfo, config.count || 3);
230
+ for (const topic of topics.slice(0, config.count || 3)) {
231
+ try {
232
+ console.log(`
233
+ \u{1F4DD} Generating: ${topic}`);
234
+ const content = await this.generateContent(config.productInfo, topic);
235
+ const output = await adapter.render(content);
236
+ const slug = content.metadata.slug;
237
+ const fileName = adapter.transformPath?.(slug) || `${slug}/index${adapter.getFileExtension()}`;
238
+ const outputPath = path2.join(config.outputDir, fileName);
239
+ await adapter.write(output, outputPath);
240
+ results.posts.push({
241
+ title: content.metadata.title,
242
+ slug,
243
+ path: outputPath,
244
+ seoScore: content.seo.score
245
+ });
246
+ console.log(`\u2713 Generated: ${outputPath}`);
247
+ console.log(` SEO Score: ${content.seo.score}/100`);
248
+ } catch (error) {
249
+ results.errors?.push(`Failed to generate "${topic}": ${error.message}`);
250
+ results.success = false;
251
+ }
252
+ }
253
+ if (results.posts.length > 0) {
254
+ await this.updateSitemap(config.projectPath, config.outputDir, results.posts);
255
+ }
256
+ } catch (error) {
257
+ results.success = false;
258
+ results.errors?.push(error.message);
259
+ }
260
+ return results;
261
+ }
262
+ /**
263
+ * Generate blog post content using the selected AI provider
264
+ */
265
+ async generateContent(productInfo, topic) {
266
+ const prompt = this.buildPrompt(productInfo, topic);
267
+ let contentData;
268
+ if (this.provider === "anthropic") {
269
+ contentData = await this.generateWithAnthropic(prompt);
270
+ } else if (this.provider === "openai") {
271
+ contentData = await this.generateWithOpenAI(prompt);
272
+ } else {
273
+ throw new Error(`Unsupported provider: ${this.provider}`);
274
+ }
275
+ const slug = slugify(contentData.metadata.title, { lower: true, strict: true });
276
+ const content = {
277
+ metadata: {
278
+ ...contentData.metadata,
279
+ slug,
280
+ datePublished: (/* @__PURE__ */ new Date()).toISOString(),
281
+ author: productInfo.name
282
+ },
283
+ schemaOrg: this.generateSchemaOrg({
284
+ ...contentData.metadata,
285
+ slug,
286
+ datePublished: (/* @__PURE__ */ new Date()).toISOString(),
287
+ author: productInfo.name
288
+ }, productInfo),
289
+ content: contentData.content,
290
+ relatedPosts: [],
291
+ seo: await this.calculateSEOScore(contentData)
292
+ };
293
+ return content;
294
+ }
295
+ /**
296
+ * Generate content using Anthropic's Claude API
297
+ */
298
+ async generateWithAnthropic(prompt) {
299
+ if (!this.anthropic) {
300
+ throw new Error("Anthropic client not initialized");
301
+ }
302
+ const response = await this.anthropic.messages.create({
303
+ model: "claude-3-5-sonnet-20241022",
304
+ max_tokens: 4096,
305
+ temperature: 0.7,
306
+ messages: [
307
+ {
308
+ role: "user",
309
+ content: prompt
310
+ }
311
+ ]
312
+ });
313
+ const textContent = response.content[0].type === "text" ? response.content[0].text : "";
314
+ const jsonMatch = textContent.match(/\{[\s\S]*\}/);
315
+ if (!jsonMatch) {
316
+ throw new Error("Failed to extract JSON from Claude response");
317
+ }
318
+ return JSON.parse(jsonMatch[0]);
319
+ }
320
+ /**
321
+ * Generate content using OpenAI's ChatGPT API
322
+ */
323
+ async generateWithOpenAI(prompt) {
324
+ if (!this.openai) {
325
+ throw new Error("OpenAI client not initialized");
326
+ }
327
+ const response = await this.openai.chat.completions.create({
328
+ model: "gpt-4-turbo-preview",
329
+ max_tokens: 4096,
330
+ temperature: 0.7,
331
+ messages: [
332
+ {
333
+ role: "user",
334
+ content: prompt
335
+ }
336
+ ],
337
+ response_format: { type: "json_object" }
338
+ });
339
+ const textContent = response.choices[0]?.message?.content || "";
340
+ if (!textContent) {
341
+ throw new Error("Failed to get response from OpenAI");
342
+ }
343
+ return JSON.parse(textContent);
344
+ }
345
+ /**
346
+ * Build prompt for Claude API
347
+ */
348
+ buildPrompt(productInfo, topic) {
349
+ return `You are an expert SEO content writer. Generate a comprehensive blog post about: "${topic}"
350
+
351
+ Product context:
352
+ - Name: ${productInfo.name}
353
+ - Tagline: ${productInfo.tagline || ""}
354
+ - Category: ${productInfo.category}
355
+ - Features: ${productInfo.features.join(", ")}
356
+ - Pricing: ${productInfo.pricingModel || "Not specified"}
357
+ ${productInfo.useCases ? `- Use cases: ${productInfo.useCases.join(", ")}` : ""}
358
+
359
+ IMPORTANT INSTRUCTIONS:
360
+ 1. Write for users searching on Google and being recommended by AI assistants (Claude, ChatGPT)
361
+ 2. Focus on being helpful, not promotional
362
+ 3. Include comparisons with alternatives when relevant
363
+ 4. Use natural language, avoid keyword stuffing
364
+ 5. Make it comprehensive (1000-1500 words worth of content)
365
+ 6. Structure with clear sections (intro, 3-5 main sections, conclusion)
366
+ 7. Be factual - do NOT invent statistics or make false claims
367
+
368
+ Output ONLY valid JSON in this exact format (no markdown, no code blocks):
369
+ {
370
+ "metadata": {
371
+ "title": "SEO-optimized title (under 60 chars)",
372
+ "description": "Meta description (under 160 chars)",
373
+ "keywords": ["keyword1", "keyword2", "keyword3"],
374
+ "category": "${productInfo.category}"
375
+ },
376
+ "content": {
377
+ "intro": "Engaging introduction paragraph in markdown format",
378
+ "sections": [
379
+ {
380
+ "heading": "Section title",
381
+ "level": 2,
382
+ "content": "Section content in markdown format",
383
+ "type": "text"
384
+ }
385
+ ],
386
+ "conclusion": "Conclusion paragraph in markdown",
387
+ "cta": {
388
+ "text": "Try ${productInfo.name}",
389
+ "url": "${productInfo.websiteUrl || "/signup"}"
390
+ }
391
+ }
392
+ }`;
393
+ }
394
+ /**
395
+ * Generate Schema.org structured data
396
+ */
397
+ generateSchemaOrg(metadata, productInfo) {
398
+ return {
399
+ "@context": "https://schema.org",
400
+ "@type": "BlogPosting",
401
+ headline: metadata.title,
402
+ description: metadata.description,
403
+ author: {
404
+ "@type": "Organization",
405
+ name: productInfo.name,
406
+ url: productInfo.websiteUrl
407
+ },
408
+ datePublished: metadata.datePublished,
409
+ publisher: {
410
+ "@type": "Organization",
411
+ name: productInfo.name
412
+ },
413
+ keywords: metadata.keywords.join(", "),
414
+ articleSection: metadata.category
415
+ };
416
+ }
417
+ /**
418
+ * Calculate SEO score
419
+ */
420
+ async calculateSEOScore(content) {
421
+ let score = 100;
422
+ const suggestions = [];
423
+ if (content.metadata.title.length > 60) {
424
+ score -= 10;
425
+ suggestions.push("Title is too long (should be under 60 chars)");
426
+ }
427
+ if (content.metadata.description.length > 160) {
428
+ score -= 10;
429
+ suggestions.push("Meta description is too long (should be under 160 chars)");
430
+ }
431
+ if (content.metadata.keywords.length < 3) {
432
+ score -= 5;
433
+ suggestions.push("Add more keywords (at least 3)");
434
+ }
435
+ if (content.content.sections.length < 3) {
436
+ score -= 10;
437
+ suggestions.push("Add more sections for better structure (at least 3)");
438
+ }
439
+ return {
440
+ score: Math.max(0, score),
441
+ suggestions
442
+ };
443
+ }
444
+ /**
445
+ * Generate topic suggestions
446
+ */
447
+ async generateTopics(productInfo, count) {
448
+ const prompt = `Generate ${count} SEO-friendly blog post topics for a product called "${productInfo.name}" in the ${productInfo.category} category.
449
+
450
+ Product description: ${productInfo.description}
451
+ Features: ${productInfo.features.join(", ")}
452
+
453
+ Requirements:
454
+ - Topics should be helpful for potential customers
455
+ - Focus on solving problems or answering questions
456
+ - Include comparisons, guides, and use cases
457
+ - Optimize for search engines and AI recommendations
458
+
459
+ Output ONLY a JSON array of topic strings, no markdown:
460
+ ["Topic 1", "Topic 2", "Topic 3"]`;
461
+ try {
462
+ if (this.provider === "anthropic" && this.anthropic) {
463
+ const response = await this.anthropic.messages.create({
464
+ model: "claude-3-5-sonnet-20241022",
465
+ max_tokens: 1024,
466
+ messages: [{ role: "user", content: prompt }]
467
+ });
468
+ const textContent = response.content[0].type === "text" ? response.content[0].text : "";
469
+ const jsonMatch = textContent.match(/\[[\s\S]*\]/);
470
+ if (jsonMatch) {
471
+ return JSON.parse(jsonMatch[0]);
472
+ }
473
+ } else if (this.provider === "openai" && this.openai) {
474
+ const response = await this.openai.chat.completions.create({
475
+ model: "gpt-4-turbo-preview",
476
+ max_tokens: 1024,
477
+ messages: [{ role: "user", content: prompt }],
478
+ response_format: { type: "json_object" }
479
+ });
480
+ const textContent = response.choices[0]?.message?.content || "";
481
+ if (textContent) {
482
+ const data = JSON.parse(textContent);
483
+ const topicsArray = data.topics || data;
484
+ if (Array.isArray(topicsArray)) {
485
+ return topicsArray;
486
+ }
487
+ if (typeof topicsArray === "object") {
488
+ return Object.values(topicsArray).filter((v) => typeof v === "string");
489
+ }
490
+ }
491
+ }
492
+ } catch (error) {
493
+ console.warn("Failed to generate topics with AI, using fallback");
494
+ }
495
+ return [
496
+ `Best ${productInfo.category} software ${(/* @__PURE__ */ new Date()).getFullYear()}`,
497
+ `How to choose ${productInfo.category} solution`,
498
+ `${productInfo.name} vs alternatives: Complete comparison`
499
+ ];
500
+ }
501
+ /**
502
+ * Update sitemap.xml
503
+ */
504
+ async updateSitemap(projectPath, blogDir, posts) {
505
+ const sitemapPath = path2.join(projectPath, "sitemap.xml");
506
+ const urls = posts.map((post) => {
507
+ return ` <url>
508
+ <loc>${post.slug}/</loc>
509
+ <lastmod>${(/* @__PURE__ */ new Date()).toISOString().split("T")[0]}</lastmod>
510
+ <changefreq>weekly</changefreq>
511
+ <priority>0.8</priority>
512
+ </url>`;
513
+ }).join("\n");
514
+ const sitemap = `<?xml version="1.0" encoding="UTF-8"?>
515
+ <urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
516
+ ${urls}
517
+ </urlset>`;
518
+ await fs2.writeFile(sitemapPath, sitemap, "utf-8");
519
+ console.log(`
520
+ \u2713 Updated sitemap.xml`);
521
+ }
522
+ };
523
+
524
+ export {
525
+ AdapterRegistry,
526
+ HTMLAdapter,
527
+ ContentGenerator
528
+ };
package/dist/cli/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  ContentGenerator
4
- } from "../chunk-HQMZIHQM.js";
4
+ } from "../chunk-QGUKVOMJ.js";
5
5
 
6
6
  // src/cli/index.ts
7
7
  import { Command } from "commander";
@@ -55,7 +55,7 @@ function showWelcome() {
55
55
  }
56
56
  function getVersion() {
57
57
  try {
58
- return "0.4.0";
58
+ return "0.4.1";
59
59
  } catch {
60
60
  return "dev";
61
61
  }
@@ -721,7 +721,7 @@ Error: ${error.message}
721
721
 
722
722
  // src/cli/index.ts
723
723
  var program = new Command();
724
- program.name("edtools").description("AI-Powered Content Marketing CLI").version("0.4.0");
724
+ program.name("edtools").description("AI-Powered Content Marketing CLI").version("0.4.1");
725
725
  program.command("init").description("Initialize edtools in your project").option("-p, --path <path>", "Project path", process.cwd()).action(initCommand);
726
726
  program.command("generate").description("Generate blog posts").option("-n, --posts <number>", "Number of posts to generate", "3").option("-t, --topics <topics...>", "Specific topics to write about").option("-o, --output <dir>", "Output directory", "./blog").option("--api-key <key>", "Anthropic API key (or set ANTHROPIC_API_KEY env var)").option("--from-csv", "Generate from CSV analysis opportunities").action(generateCommand);
727
727
  program.command("analyze").description("Analyze Google Search Console CSV data").option("-f, --file <path>", "Path to CSV file (auto-detects if not provided)").option("--min-impressions <number>", "Minimum impressions for opportunities", "50").option("--min-position <number>", "Minimum position for opportunities", "20").option("--limit <number>", "Number of opportunities to show", "10").action(analyzeCommand);
@@ -1 +1 @@
1
- {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"AAUA,OAAO,EAKL,cAAc,EACd,cAAc,EAEd,UAAU,EACX,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,UAAwB;IAuBzD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAsEjD,eAAe;YA2Cf,qBAAqB;YA+BrB,kBAAkB;IA8BhC,OAAO,CAAC,WAAW;IAkDnB,OAAO,CAAC,iBAAiB;YAwBX,iBAAiB;YAsCjB,cAAc;YA2Dd,aAAa;CAyB5B"}
1
+ {"version":3,"file":"generator.d.ts","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"AAUA,OAAO,EAKL,cAAc,EACd,cAAc,EAEd,UAAU,EACX,MAAM,mBAAmB,CAAC;AAI3B,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAa;IAC7B,OAAO,CAAC,QAAQ,CAAkB;gBAEtB,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAE,UAAwB;IAuBzD,QAAQ,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC;YAsEjD,eAAe;YA2Cf,qBAAqB;YA+BrB,kBAAkB;IA8BhC,OAAO,CAAC,WAAW;IAkDnB,OAAO,CAAC,iBAAiB;YAwBX,iBAAiB;YAsCjB,cAAc;YAqEd,aAAa;CAyB5B"}
@@ -275,7 +275,13 @@ Output ONLY a JSON array of topic strings, no markdown:
275
275
  const textContent = response.choices[0]?.message?.content || '';
276
276
  if (textContent) {
277
277
  const data = JSON.parse(textContent);
278
- return data.topics || data;
278
+ const topicsArray = data.topics || data;
279
+ if (Array.isArray(topicsArray)) {
280
+ return topicsArray;
281
+ }
282
+ if (typeof topicsArray === 'object') {
283
+ return Object.values(topicsArray).filter(v => typeof v === 'string');
284
+ }
279
285
  }
280
286
  }
281
287
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"generator.js","sourceRoot":"","sources":["../../src/core/generator.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -2,7 +2,7 @@ import {
2
2
  AdapterRegistry,
3
3
  ContentGenerator,
4
4
  HTMLAdapter
5
- } from "./chunk-HQMZIHQM.js";
5
+ } from "./chunk-QGUKVOMJ.js";
6
6
  export {
7
7
  AdapterRegistry,
8
8
  ContentGenerator,
package/dist/ui/banner.js CHANGED
@@ -35,7 +35,7 @@ export function showWelcome() {
35
35
  }
36
36
  function getVersion() {
37
37
  try {
38
- return '0.4.0';
38
+ return '0.4.1';
39
39
  }
40
40
  catch {
41
41
  return 'dev';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@edtools/cli",
3
- "version": "0.4.0",
3
+ "version": "0.4.1",
4
4
  "description": "AI-Powered Content Marketing CLI - Generate SEO-optimized content with Google Search Console analysis",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",