wikimem 0.8.5 → 0.8.6

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 CHANGED
@@ -137,6 +137,7 @@ Ollama runs fully local — no API keys, no network, no data leaves your machine
137
137
  | `wikimem open` | Open vault in Obsidian |
138
138
  | `wikimem history` | Browse audit trail, restore snapshots |
139
139
  | `wikimem mcp` | Start MCP server for Claude Code / Cursor |
140
+ | `wikimem publish` | Publish wiki as static site, RSS, JSON feed, or digest (`--format html,rss,json-feed,digest`) |
140
141
  | `wikimem duplicates` | Detect and manage near-duplicate sources |
141
142
 
142
143
  ## Web UI
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerPublishCommand(program: Command): void;
3
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmF7D"}
@@ -0,0 +1,83 @@
1
+ import chalk from 'chalk';
2
+ import { resolve } from 'node:path';
3
+ import { existsSync, readFileSync } from 'node:fs';
4
+ import { getVaultConfig } from '../../core/vault.js';
5
+ import { publishWiki } from '../../core/publish.js';
6
+ const VALID_FORMATS = ['html', 'rss', 'json-feed', 'digest'];
7
+ export function registerPublishCommand(program) {
8
+ program
9
+ .command('publish')
10
+ .description('Publish wiki as static site, RSS feed, JSON feed, or digest')
11
+ .option('-v, --vault <path>', 'Vault root directory', '.')
12
+ .option('-o, --out <dir>', 'Output directory', './_site')
13
+ .option('--base-url <url>', 'Base URL for published site', 'https://example.com')
14
+ .option('--title <title>', 'Site title')
15
+ .option('--description <desc>', 'Site description')
16
+ .option('--author <name>', 'Author name')
17
+ .option('-f, --format <formats>', 'Comma-separated formats: html,rss,json-feed,digest', 'html,rss,json-feed,digest')
18
+ .action((options) => {
19
+ const vaultRoot = resolve(options.vault ?? '.');
20
+ const config = getVaultConfig(vaultRoot);
21
+ if (!existsSync(config.schemaPath)) {
22
+ console.error(chalk.red('Not a wikimem vault. Run `wikimem init` first.'));
23
+ process.exit(1);
24
+ }
25
+ // Parse formats
26
+ const formatStr = options.format ?? 'html,rss,json-feed,digest';
27
+ const formats = formatStr.split(',').map((f) => f.trim().toLowerCase());
28
+ for (const f of formats) {
29
+ if (!VALID_FORMATS.includes(f)) {
30
+ console.error(chalk.red(`Invalid format: "${f}". Valid: ${VALID_FORMATS.join(', ')}`));
31
+ process.exit(1);
32
+ }
33
+ }
34
+ // Read title/description from vault config or use defaults
35
+ let siteTitle = options.title ?? 'My Wiki';
36
+ let siteDescription = options.description ?? 'A knowledge base built with wikimem';
37
+ try {
38
+ const indexPath = config.indexPath;
39
+ if (existsSync(indexPath)) {
40
+ const indexContent = readFileSync(indexPath, 'utf-8');
41
+ const titleMatch = indexContent.match(/^title:\s*(.+)$/m);
42
+ if (titleMatch?.[1] && !options.title) {
43
+ siteTitle = titleMatch[1].replace(/^["']|["']$/g, '');
44
+ }
45
+ }
46
+ }
47
+ catch {
48
+ // Use defaults
49
+ }
50
+ const publishOpts = {
51
+ outDir: resolve(options.out ?? './_site'),
52
+ baseUrl: options.baseUrl ?? 'https://example.com',
53
+ title: siteTitle,
54
+ description: siteDescription,
55
+ author: options.author ?? 'wikimem',
56
+ format: formats,
57
+ };
58
+ console.log(chalk.blue(`Publishing wiki from ${vaultRoot}...`));
59
+ console.log(chalk.dim(` Formats: ${formats.join(', ')}`));
60
+ console.log(chalk.dim(` Output: ${publishOpts.outDir}`));
61
+ const result = publishWiki(vaultRoot, publishOpts);
62
+ if (result.pagesPublished === 0) {
63
+ console.log(chalk.yellow('No pages to publish.'));
64
+ return;
65
+ }
66
+ console.log(chalk.green(`\nPublished ${result.pagesPublished} pages → ${result.filesWritten} files`));
67
+ console.log(chalk.dim(` Formats: ${result.formats.join(', ')}`));
68
+ console.log(chalk.dim(` Output: ${result.outputDir}`));
69
+ if (result.formats.includes('html')) {
70
+ console.log(chalk.dim(` Open: ${resolve(result.outputDir, 'index.html')}`));
71
+ }
72
+ if (result.formats.includes('rss')) {
73
+ console.log(chalk.dim(` RSS: ${resolve(result.outputDir, 'feed.xml')}`));
74
+ }
75
+ if (result.formats.includes('json-feed')) {
76
+ console.log(chalk.dim(` JSON: ${resolve(result.outputDir, 'feed.json')}`));
77
+ }
78
+ if (result.formats.includes('digest')) {
79
+ console.log(chalk.dim(` Digest: ${resolve(result.outputDir, 'digest.md')}`));
80
+ }
81
+ });
82
+ }
83
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/cli/commands/publish.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgCpC,wBAAgB,aAAa,IAAI,OAAO,CA0BvC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,aAAa,IAAI,OAAO,CA2BvC"}
package/dist/cli/index.js CHANGED
@@ -29,6 +29,7 @@ import { registerSearchCommand } from './commands/search.js';
29
29
  import { registerAskCommand } from './commands/ask.js';
30
30
  import { registerOpenCommand } from './commands/open.js';
31
31
  import { registerExportCommand } from './commands/export.js';
32
+ import { registerPublishCommand } from './commands/publish.js';
32
33
  export function createProgram() {
33
34
  const program = new Command();
34
35
  program
@@ -49,6 +50,7 @@ export function createProgram() {
49
50
  registerServeCommand(program);
50
51
  registerOpenCommand(program);
51
52
  registerExportCommand(program);
53
+ registerPublishCommand(program);
52
54
  registerHistoryCommand(program);
53
55
  registerMcpCommand(program);
54
56
  return program;
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAEzD,SAAS,UAAU;IACjB,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;QACtE,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAwB,CAAC;QAC9E,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AACD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AACrE,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,MAAM,UAAU,aAAa;IAC3B,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,SAAS,CAAC;SACf,WAAW,CAAC,iGAAiG,CAAC;SAC9G,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC;IAEzB,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAC5B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,yBAAyB,CAAC,OAAO,CAAC,CAAC;IACnC,oBAAoB,CAAC,OAAO,CAAC,CAAC;IAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAChC,kBAAkB,CAAC,OAAO,CAAC,CAAC;IAE5B,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Content Distribution Engine — generates static site, RSS, JSON feed, and digest
3
+ * from wiki content. The outbound complement to ingest/scrape/improve.
4
+ */
5
+ export interface PublishOptions {
6
+ outDir: string;
7
+ baseUrl: string;
8
+ title: string;
9
+ description: string;
10
+ author: string;
11
+ format: ('html' | 'rss' | 'json-feed' | 'digest')[];
12
+ }
13
+ export interface PublishResult {
14
+ pagesPublished: number;
15
+ filesWritten: number;
16
+ outputDir: string;
17
+ formats: string[];
18
+ }
19
+ export declare function publishWiki(vaultRoot: string, options: PublishOptions): PublishResult;
20
+ //# sourceMappingURL=publish.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../../src/core/publish.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAOH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,CAAC,MAAM,GAAG,KAAK,GAAG,WAAW,GAAG,QAAQ,CAAC,EAAE,CAAC;CACrD;AAED,MAAM,WAAW,aAAa;IAC5B,cAAc,EAAE,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAgBD,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,cAAc,GAAG,aAAa,CAiFrF"}
@@ -0,0 +1,760 @@
1
+ /**
2
+ * Content Distribution Engine — generates static site, RSS, JSON feed, and digest
3
+ * from wiki content. The outbound complement to ingest/scrape/improve.
4
+ */
5
+ import { mkdirSync, writeFileSync, statSync } from 'node:fs';
6
+ import { join, basename, extname, relative } from 'node:path';
7
+ import { getVaultConfig, listWikiPages, readWikiPage, getVaultStats } from './vault.js';
8
+ // ── Main publish function ──────────────────────────────────────────────────
9
+ export function publishWiki(vaultRoot, options) {
10
+ const config = getVaultConfig(vaultRoot);
11
+ const pages = listWikiPages(config.wikiDir);
12
+ if (pages.length === 0) {
13
+ return { pagesPublished: 0, filesWritten: 0, outputDir: options.outDir, formats: [] };
14
+ }
15
+ mkdirSync(options.outDir, { recursive: true });
16
+ // Parse all pages
17
+ const pageMetas = [];
18
+ for (const pagePath of pages) {
19
+ try {
20
+ const page = readWikiPage(pagePath);
21
+ const slug = basename(pagePath, extname(pagePath));
22
+ const category = page.frontmatter['type']
23
+ ?? page.frontmatter['category']
24
+ ?? inferCategory(pagePath, config);
25
+ const summary = page.frontmatter['summary']
26
+ ?? page.content.split(/[.!?]\s/)[0]?.substring(0, 160)
27
+ ?? '';
28
+ const updated = getUpdatedDate(page, pagePath);
29
+ pageMetas.push({
30
+ slug,
31
+ title: page.title,
32
+ category,
33
+ summary,
34
+ wordCount: page.wordCount,
35
+ updated,
36
+ content: page.content,
37
+ wikilinks: page.wikilinks,
38
+ path: relative(config.wikiDir, pagePath),
39
+ });
40
+ }
41
+ catch {
42
+ // Skip unreadable pages
43
+ }
44
+ }
45
+ // Sort by updated date (newest first)
46
+ pageMetas.sort((a, b) => b.updated.localeCompare(a.updated));
47
+ let filesWritten = 0;
48
+ const formatsWritten = [];
49
+ for (const fmt of options.format) {
50
+ switch (fmt) {
51
+ case 'html': {
52
+ const count = generateStaticSite(pageMetas, options, config);
53
+ filesWritten += count;
54
+ formatsWritten.push('html');
55
+ break;
56
+ }
57
+ case 'rss': {
58
+ generateRssFeed(pageMetas, options);
59
+ filesWritten++;
60
+ formatsWritten.push('rss');
61
+ break;
62
+ }
63
+ case 'json-feed': {
64
+ generateJsonFeed(pageMetas, options);
65
+ filesWritten++;
66
+ formatsWritten.push('json-feed');
67
+ break;
68
+ }
69
+ case 'digest': {
70
+ generateDigest(pageMetas, options, config);
71
+ filesWritten++;
72
+ formatsWritten.push('digest');
73
+ break;
74
+ }
75
+ }
76
+ }
77
+ return {
78
+ pagesPublished: pageMetas.length,
79
+ filesWritten,
80
+ outputDir: options.outDir,
81
+ formats: formatsWritten,
82
+ };
83
+ }
84
+ // ── Static HTML Site ───────────────────────────────────────────────────────
85
+ function generateStaticSite(pages, options, config) {
86
+ const pagesDir = join(options.outDir, 'pages');
87
+ mkdirSync(pagesDir, { recursive: true });
88
+ const titleMap = new Map(pages.map((p) => [p.title, p.slug]));
89
+ const titleMapLower = new Map(pages.map((p) => [p.title.toLowerCase(), p.slug]));
90
+ let count = 0;
91
+ // Generate individual pages
92
+ for (const page of pages) {
93
+ const html = renderPageHtml(page, options, titleMap, titleMapLower);
94
+ writeFileSync(join(pagesDir, `${page.slug}.html`), html, 'utf-8');
95
+ count++;
96
+ }
97
+ // Generate index
98
+ const indexHtml = renderIndexHtml(pages, options, config);
99
+ writeFileSync(join(options.outDir, 'index.html'), indexHtml, 'utf-8');
100
+ count++;
101
+ // Generate CSS
102
+ writeFileSync(join(options.outDir, 'style.css'), getStylesheet(), 'utf-8');
103
+ count++;
104
+ return count;
105
+ }
106
+ function renderPageHtml(page, options, titleMap, titleMapLower) {
107
+ const renderedContent = markdownToHtml(page.content, titleMap, titleMapLower);
108
+ const categoryLabel = page.category.charAt(0).toUpperCase() + page.category.slice(1);
109
+ return `<!DOCTYPE html>
110
+ <html lang="en">
111
+ <head>
112
+ <meta charset="UTF-8">
113
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
114
+ <title>${escapeHtml(page.title)} — ${escapeHtml(options.title)}</title>
115
+ <meta name="description" content="${escapeHtml(page.summary)}">
116
+ <link rel="stylesheet" href="../style.css">
117
+ <link rel="alternate" type="application/rss+xml" title="${escapeHtml(options.title)}" href="../feed.xml">
118
+ </head>
119
+ <body>
120
+ <nav class="topbar">
121
+ <a href="../index.html" class="site-title">${escapeHtml(options.title)}</a>
122
+ <span class="breadcrumb">${escapeHtml(categoryLabel)} / ${escapeHtml(page.title)}</span>
123
+ </nav>
124
+ <main class="page-content">
125
+ <article>
126
+ <header class="page-header">
127
+ <span class="category-badge category-${page.category}">${escapeHtml(categoryLabel)}</span>
128
+ <h1>${escapeHtml(page.title)}</h1>
129
+ <div class="page-meta">
130
+ <span>${page.wordCount.toLocaleString()} words</span>
131
+ <span>Updated ${page.updated}</span>
132
+ ${page.wikilinks.length > 0 ? `<span>${page.wikilinks.length} links</span>` : ''}
133
+ </div>
134
+ </header>
135
+ <div class="prose">
136
+ ${renderedContent}
137
+ </div>
138
+ ${page.wikilinks.length > 0 ? renderRelatedLinks(page.wikilinks, titleMap, titleMapLower) : ''}
139
+ </article>
140
+ </main>
141
+ <footer class="site-footer">
142
+ <p>Built with <a href="https://www.npmjs.com/package/wikimem">wikimem</a></p>
143
+ </footer>
144
+ </body>
145
+ </html>`;
146
+ }
147
+ function renderRelatedLinks(wikilinks, titleMap, titleMapLower) {
148
+ const links = wikilinks.map((link) => {
149
+ const slug = titleMap.get(link) ?? titleMapLower.get(link.toLowerCase());
150
+ if (slug) {
151
+ return `<a href="${slug}.html">${escapeHtml(link)}</a>`;
152
+ }
153
+ return `<span class="broken-link">${escapeHtml(link)}</span>`;
154
+ });
155
+ return `<aside class="related-pages">
156
+ <h3>Related Pages</h3>
157
+ <div class="related-grid">${links.join('')}</div>
158
+ </aside>`;
159
+ }
160
+ function renderIndexHtml(pages, options, config) {
161
+ const stats = getVaultStats(config);
162
+ const grouped = groupByCategory(pages);
163
+ const sections = Object.entries(grouped)
164
+ .sort(([a], [b]) => a.localeCompare(b))
165
+ .map(([category, categoryPages]) => {
166
+ const label = category.charAt(0).toUpperCase() + category.slice(1);
167
+ const items = categoryPages
168
+ .map((p) => `<li>
169
+ <a href="pages/${p.slug}.html">${escapeHtml(p.title)}</a>
170
+ <span class="item-meta">${p.wordCount} words</span>
171
+ </li>`)
172
+ .join('\n');
173
+ return `<section class="category-section">
174
+ <h2><span class="category-badge category-${category}">${escapeHtml(label)}</span> ${escapeHtml(label)} <span class="count">(${categoryPages.length})</span></h2>
175
+ <ul>${items}</ul>
176
+ </section>`;
177
+ })
178
+ .join('\n');
179
+ return `<!DOCTYPE html>
180
+ <html lang="en">
181
+ <head>
182
+ <meta charset="UTF-8">
183
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
184
+ <title>${escapeHtml(options.title)}</title>
185
+ <meta name="description" content="${escapeHtml(options.description)}">
186
+ <link rel="stylesheet" href="style.css">
187
+ <link rel="alternate" type="application/rss+xml" title="${escapeHtml(options.title)}" href="feed.xml">
188
+ <link rel="alternate" type="application/feed+json" title="${escapeHtml(options.title)}" href="feed.json">
189
+ </head>
190
+ <body>
191
+ <nav class="topbar">
192
+ <a href="index.html" class="site-title">${escapeHtml(options.title)}</a>
193
+ </nav>
194
+ <main class="index-content">
195
+ <header class="hero">
196
+ <h1>${escapeHtml(options.title)}</h1>
197
+ <p class="hero-desc">${escapeHtml(options.description)}</p>
198
+ <div class="stats-bar">
199
+ <span>${stats.pageCount} pages</span>
200
+ <span>${stats.wordCount.toLocaleString()} words</span>
201
+ <span>${stats.sourceCount} sources</span>
202
+ <span>${stats.wikilinks} links</span>
203
+ </div>
204
+ </header>
205
+ ${sections}
206
+ </main>
207
+ <footer class="site-footer">
208
+ <p>Built with <a href="https://www.npmjs.com/package/wikimem">wikimem</a></p>
209
+ <p class="feed-links">
210
+ <a href="feed.xml">RSS Feed</a> · <a href="feed.json">JSON Feed</a>
211
+ </p>
212
+ </footer>
213
+ </body>
214
+ </html>`;
215
+ }
216
+ // ── RSS Feed ───────────────────────────────────────────────────────────────
217
+ function generateRssFeed(pages, options) {
218
+ const recent = pages.slice(0, 50);
219
+ const now = new Date().toUTCString();
220
+ const baseUrl = options.baseUrl.replace(/\/$/, '');
221
+ const items = recent
222
+ .map((p) => ` <item>
223
+ <title>${xmlEscape(p.title)}</title>
224
+ <link>${xmlEscape(baseUrl)}/pages/${p.slug}.html</link>
225
+ <guid isPermaLink="true">${xmlEscape(baseUrl)}/pages/${p.slug}.html</guid>
226
+ <description>${xmlEscape(p.summary)}</description>
227
+ <category>${xmlEscape(p.category)}</category>
228
+ <pubDate>${new Date(p.updated).toUTCString()}</pubDate>
229
+ </item>`)
230
+ .join('\n');
231
+ const rss = `<?xml version="1.0" encoding="UTF-8"?>
232
+ <rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
233
+ <channel>
234
+ <title>${xmlEscape(options.title)}</title>
235
+ <link>${xmlEscape(baseUrl)}</link>
236
+ <description>${xmlEscape(options.description)}</description>
237
+ <language>en</language>
238
+ <lastBuildDate>${now}</lastBuildDate>
239
+ <atom:link href="${xmlEscape(baseUrl)}/feed.xml" rel="self" type="application/rss+xml"/>
240
+ <generator>wikimem</generator>
241
+ ${items}
242
+ </channel>
243
+ </rss>`;
244
+ writeFileSync(join(options.outDir, 'feed.xml'), rss, 'utf-8');
245
+ }
246
+ // ── JSON Feed ──────────────────────────────────────────────────────────────
247
+ function generateJsonFeed(pages, options) {
248
+ const recent = pages.slice(0, 50);
249
+ const baseUrl = options.baseUrl.replace(/\/$/, '');
250
+ const feed = {
251
+ version: 'https://jsonfeed.org/version/1.1',
252
+ title: options.title,
253
+ home_page_url: baseUrl,
254
+ feed_url: `${baseUrl}/feed.json`,
255
+ description: options.description,
256
+ authors: [{ name: options.author }],
257
+ items: recent.map((p) => ({
258
+ id: `${baseUrl}/pages/${p.slug}.html`,
259
+ url: `${baseUrl}/pages/${p.slug}.html`,
260
+ title: p.title,
261
+ summary: p.summary,
262
+ date_modified: new Date(p.updated).toISOString(),
263
+ tags: [p.category],
264
+ content_text: p.content.substring(0, 2000),
265
+ })),
266
+ };
267
+ writeFileSync(join(options.outDir, 'feed.json'), JSON.stringify(feed, null, 2), 'utf-8');
268
+ }
269
+ // ── Digest ─────────────────────────────────────────────────────────────────
270
+ function generateDigest(pages, options, config) {
271
+ const stats = getVaultStats(config);
272
+ const now = new Date().toISOString().split('T')[0] ?? '';
273
+ // Group recent changes (last 7 days)
274
+ const weekAgo = new Date();
275
+ weekAgo.setDate(weekAgo.getDate() - 7);
276
+ const recent = pages.filter((p) => new Date(p.updated) >= weekAgo);
277
+ const grouped = groupByCategory(recent);
278
+ let md = `# ${options.title} — Weekly Digest\n\n`;
279
+ md += `**${now}** · ${stats.pageCount} pages · ${stats.wordCount.toLocaleString()} words · ${stats.wikilinks} links\n\n`;
280
+ if (recent.length === 0) {
281
+ md += 'No changes in the last 7 days.\n';
282
+ }
283
+ else {
284
+ md += `## ${recent.length} pages updated this week\n\n`;
285
+ for (const [category, categoryPages] of Object.entries(grouped).sort(([a], [b]) => a.localeCompare(b))) {
286
+ const label = category.charAt(0).toUpperCase() + category.slice(1);
287
+ md += `### ${label}\n\n`;
288
+ for (const p of categoryPages) {
289
+ md += `- **${p.title}** — ${p.summary || `${p.wordCount} words`}\n`;
290
+ }
291
+ md += '\n';
292
+ }
293
+ }
294
+ // Top connected pages
295
+ const topLinked = [...pages]
296
+ .sort((a, b) => b.wikilinks.length - a.wikilinks.length)
297
+ .slice(0, 10);
298
+ md += `## Most Connected Pages\n\n`;
299
+ for (const p of topLinked) {
300
+ md += `- **${p.title}** — ${p.wikilinks.length} outbound links\n`;
301
+ }
302
+ md += `\n---\n*Generated by [wikimem](https://www.npmjs.com/package/wikimem)*\n`;
303
+ writeFileSync(join(options.outDir, 'digest.md'), md, 'utf-8');
304
+ // Also write HTML version
305
+ const htmlDigest = `<!DOCTYPE html>
306
+ <html lang="en">
307
+ <head>
308
+ <meta charset="UTF-8">
309
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
310
+ <title>${escapeHtml(options.title)} — Digest</title>
311
+ <link rel="stylesheet" href="style.css">
312
+ </head>
313
+ <body>
314
+ <nav class="topbar">
315
+ <a href="index.html" class="site-title">${escapeHtml(options.title)}</a>
316
+ <span class="breadcrumb">Digest</span>
317
+ </nav>
318
+ <main class="page-content">
319
+ <article class="prose">
320
+ ${markdownToHtml(md, new Map(), new Map())}
321
+ </article>
322
+ </main>
323
+ <footer class="site-footer">
324
+ <p>Built with <a href="https://www.npmjs.com/package/wikimem">wikimem</a></p>
325
+ </footer>
326
+ </body>
327
+ </html>`;
328
+ writeFileSync(join(options.outDir, 'digest.html'), htmlDigest, 'utf-8');
329
+ }
330
+ // ── Helpers ────────────────────────────────────────────────────────────────
331
+ function inferCategory(pagePath, config) {
332
+ const rel = relative(config.wikiDir, pagePath);
333
+ const dir = rel.split('/')[0] ?? '';
334
+ if (['sources', 'entities', 'concepts', 'syntheses'].includes(dir))
335
+ return dir.replace(/s$/, '');
336
+ return 'page';
337
+ }
338
+ function getUpdatedDate(page, filePath) {
339
+ const fmDate = page.frontmatter['updated']
340
+ ?? page.frontmatter['created'];
341
+ if (fmDate)
342
+ return fmDate;
343
+ try {
344
+ return statSync(filePath).mtime.toISOString().split('T')[0] ?? '';
345
+ }
346
+ catch {
347
+ return new Date().toISOString().split('T')[0] ?? '';
348
+ }
349
+ }
350
+ function groupByCategory(pages) {
351
+ const grouped = {};
352
+ for (const p of pages) {
353
+ const key = p.category;
354
+ if (!grouped[key])
355
+ grouped[key] = [];
356
+ grouped[key].push(p);
357
+ }
358
+ return grouped;
359
+ }
360
+ /**
361
+ * Minimal markdown → HTML converter. Handles headings, paragraphs, bold,
362
+ * italic, links, code, lists, blockquotes, and wikilinks. No external deps.
363
+ */
364
+ function markdownToHtml(md, titleMap, titleMapLower) {
365
+ let html = md;
366
+ // Wikilinks → real links
367
+ html = html.replace(/\[\[([^\]]+)\]\]/g, (_, title) => {
368
+ const slug = titleMap.get(title) ?? titleMapLower.get(title.toLowerCase());
369
+ if (slug) {
370
+ return `<a href="${slug}.html" class="wiki-link">${escapeHtml(title)}</a>`;
371
+ }
372
+ return `<span class="wiki-link broken">${escapeHtml(title)}</span>`;
373
+ });
374
+ // Fenced code blocks
375
+ html = html.replace(/```(\w*)\n([\s\S]*?)```/g, (_, lang, code) => {
376
+ return `<pre><code class="language-${lang || 'text'}">${escapeHtml(code.trim())}</code></pre>`;
377
+ });
378
+ // Inline code
379
+ html = html.replace(/`([^`]+)`/g, '<code>$1</code>');
380
+ // Headings
381
+ html = html.replace(/^#### (.+)$/gm, '<h4>$1</h4>');
382
+ html = html.replace(/^### (.+)$/gm, '<h3>$1</h3>');
383
+ html = html.replace(/^## (.+)$/gm, '<h2>$1</h2>');
384
+ html = html.replace(/^# (.+)$/gm, '<h1>$1</h1>');
385
+ // Bold + italic
386
+ html = html.replace(/\*\*\*(.+?)\*\*\*/g, '<strong><em>$1</em></strong>');
387
+ html = html.replace(/\*\*(.+?)\*\*/g, '<strong>$1</strong>');
388
+ html = html.replace(/\*(.+?)\*/g, '<em>$1</em>');
389
+ // Links
390
+ html = html.replace(/\[([^\]]+)\]\(([^)]+)\)/g, '<a href="$2">$1</a>');
391
+ // Horizontal rules
392
+ html = html.replace(/^---+$/gm, '<hr>');
393
+ // Blockquotes
394
+ html = html.replace(/^> (.+)$/gm, '<blockquote>$1</blockquote>');
395
+ // Unordered lists
396
+ html = html.replace(/^- (.+)$/gm, '<li>$1</li>');
397
+ html = html.replace(/(<li>[\s\S]*?<\/li>)/g, (match) => {
398
+ if (!match.startsWith('<ul>'))
399
+ return `<ul>${match}</ul>`;
400
+ return match;
401
+ });
402
+ // Wrap remaining lines in paragraphs (skip already-wrapped content)
403
+ const lines = html.split('\n');
404
+ const result = [];
405
+ for (const line of lines) {
406
+ const trimmed = line.trim();
407
+ if (!trimmed) {
408
+ result.push('');
409
+ }
410
+ else if (trimmed.startsWith('<h') ||
411
+ trimmed.startsWith('<pre') ||
412
+ trimmed.startsWith('<ul') ||
413
+ trimmed.startsWith('<li') ||
414
+ trimmed.startsWith('<blockquote') ||
415
+ trimmed.startsWith('<hr') ||
416
+ trimmed.startsWith('<aside') ||
417
+ trimmed.startsWith('<div') ||
418
+ trimmed.startsWith('<article') ||
419
+ trimmed.startsWith('<nav') ||
420
+ trimmed.startsWith('<footer') ||
421
+ trimmed.startsWith('<header') ||
422
+ trimmed.startsWith('<section')) {
423
+ result.push(trimmed);
424
+ }
425
+ else {
426
+ result.push(`<p>${trimmed}</p>`);
427
+ }
428
+ }
429
+ return result.join('\n');
430
+ }
431
+ function escapeHtml(s) {
432
+ return s
433
+ .replace(/&/g, '&amp;')
434
+ .replace(/</g, '&lt;')
435
+ .replace(/>/g, '&gt;')
436
+ .replace(/"/g, '&quot;');
437
+ }
438
+ function xmlEscape(s) {
439
+ return escapeHtml(s).replace(/'/g, '&apos;');
440
+ }
441
+ // ── Stylesheet ─────────────────────────────────────────────────────────────
442
+ function getStylesheet() {
443
+ return `*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
444
+
445
+ :root {
446
+ --bg: #1a1a2e;
447
+ --bg-surface: #16213e;
448
+ --bg-card: #1e2a47;
449
+ --bg-hover: #243352;
450
+ --border: #2a3a5c;
451
+ --text: #e0e0e0;
452
+ --text-bright: #f0f0f0;
453
+ --text-secondary: #a0a8c0;
454
+ --text-dim: #6b7394;
455
+ --accent: #4f9eff;
456
+ --accent-hover: #6db3ff;
457
+ --green: #4ec9b0;
458
+ --amber: #d7ba7d;
459
+ --purple: #9c78d8;
460
+ --orange: #ce9178;
461
+ --red: #f14c4c;
462
+ --font: 'Inter', -apple-system, BlinkMacSystemFont, 'Segoe UI', system-ui, sans-serif;
463
+ --font-mono: 'JetBrains Mono', 'Fira Code', monospace;
464
+ --font-display: 'Instrument Serif', Georgia, serif;
465
+ --radius: 6px;
466
+ }
467
+
468
+ body {
469
+ font-family: var(--font);
470
+ background: var(--bg);
471
+ color: var(--text);
472
+ line-height: 1.7;
473
+ min-height: 100vh;
474
+ display: flex;
475
+ flex-direction: column;
476
+ }
477
+
478
+ .topbar {
479
+ background: var(--bg-surface);
480
+ border-bottom: 1px solid var(--border);
481
+ padding: 12px 24px;
482
+ display: flex;
483
+ align-items: center;
484
+ gap: 16px;
485
+ position: sticky;
486
+ top: 0;
487
+ z-index: 10;
488
+ }
489
+
490
+ .site-title {
491
+ font-family: var(--font-display);
492
+ font-size: 1.25rem;
493
+ color: var(--text-bright);
494
+ text-decoration: none;
495
+ }
496
+
497
+ .breadcrumb {
498
+ color: var(--text-dim);
499
+ font-size: 0.85rem;
500
+ }
501
+
502
+ .hero {
503
+ text-align: center;
504
+ padding: 64px 24px 48px;
505
+ }
506
+
507
+ .hero h1 {
508
+ font-family: var(--font-display);
509
+ font-size: 2.5rem;
510
+ color: var(--text-bright);
511
+ margin-bottom: 12px;
512
+ }
513
+
514
+ .hero-desc {
515
+ color: var(--text-secondary);
516
+ font-size: 1.1rem;
517
+ max-width: 600px;
518
+ margin: 0 auto 24px;
519
+ }
520
+
521
+ .stats-bar {
522
+ display: flex;
523
+ justify-content: center;
524
+ gap: 24px;
525
+ font-size: 0.85rem;
526
+ color: var(--text-dim);
527
+ }
528
+
529
+ .stats-bar span {
530
+ background: var(--bg-card);
531
+ padding: 4px 12px;
532
+ border-radius: var(--radius);
533
+ border: 1px solid var(--border);
534
+ }
535
+
536
+ .index-content, .page-content {
537
+ max-width: 860px;
538
+ margin: 0 auto;
539
+ padding: 32px 24px;
540
+ flex: 1;
541
+ width: 100%;
542
+ }
543
+
544
+ .category-section {
545
+ margin-bottom: 32px;
546
+ }
547
+
548
+ .category-section h2 {
549
+ font-size: 1.2rem;
550
+ color: var(--text-bright);
551
+ margin-bottom: 12px;
552
+ display: flex;
553
+ align-items: center;
554
+ gap: 8px;
555
+ }
556
+
557
+ .count {
558
+ color: var(--text-dim);
559
+ font-weight: 400;
560
+ font-size: 0.85rem;
561
+ }
562
+
563
+ .category-section ul {
564
+ list-style: none;
565
+ display: grid;
566
+ gap: 4px;
567
+ }
568
+
569
+ .category-section li {
570
+ display: flex;
571
+ justify-content: space-between;
572
+ align-items: center;
573
+ padding: 8px 12px;
574
+ border-radius: var(--radius);
575
+ transition: background 0.15s;
576
+ }
577
+
578
+ .category-section li:hover {
579
+ background: var(--bg-hover);
580
+ }
581
+
582
+ .category-section li a {
583
+ color: var(--accent);
584
+ text-decoration: none;
585
+ }
586
+
587
+ .category-section li a:hover {
588
+ color: var(--accent-hover);
589
+ text-decoration: underline;
590
+ }
591
+
592
+ .item-meta {
593
+ color: var(--text-dim);
594
+ font-size: 0.8rem;
595
+ }
596
+
597
+ .category-badge {
598
+ display: inline-block;
599
+ font-size: 0.7rem;
600
+ font-weight: 600;
601
+ text-transform: uppercase;
602
+ letter-spacing: 0.05em;
603
+ padding: 2px 8px;
604
+ border-radius: 3px;
605
+ color: var(--text-bright);
606
+ }
607
+
608
+ .category-source { background: rgba(79,158,255,0.2); color: var(--accent); }
609
+ .category-entity { background: rgba(78,201,176,0.2); color: var(--green); }
610
+ .category-concept { background: rgba(156,120,216,0.2); color: var(--purple); }
611
+ .category-synthesi, .category-synthesis { background: rgba(206,145,120,0.2); color: var(--orange); }
612
+ .category-page { background: rgba(215,186,125,0.2); color: var(--amber); }
613
+
614
+ .page-header {
615
+ margin-bottom: 32px;
616
+ padding-bottom: 16px;
617
+ border-bottom: 1px solid var(--border);
618
+ }
619
+
620
+ .page-header h1 {
621
+ font-family: var(--font-display);
622
+ font-size: 2rem;
623
+ color: var(--text-bright);
624
+ margin: 8px 0 12px;
625
+ }
626
+
627
+ .page-meta {
628
+ display: flex;
629
+ gap: 16px;
630
+ font-size: 0.8rem;
631
+ color: var(--text-dim);
632
+ }
633
+
634
+ .prose h1 { font-size: 1.8rem; margin: 32px 0 16px; color: var(--text-bright); }
635
+ .prose h2 { font-size: 1.4rem; margin: 28px 0 12px; color: var(--text-bright); }
636
+ .prose h3 { font-size: 1.15rem; margin: 24px 0 8px; color: var(--text-bright); }
637
+ .prose h4 { font-size: 1rem; margin: 20px 0 8px; color: var(--text-secondary); }
638
+
639
+ .prose p { margin: 0 0 16px; }
640
+
641
+ .prose a { color: var(--accent); text-decoration: none; }
642
+ .prose a:hover { text-decoration: underline; }
643
+
644
+ .prose .wiki-link { color: var(--green); border-bottom: 1px dashed var(--green); }
645
+ .prose .wiki-link.broken { color: var(--red); border-bottom: 1px dashed var(--red); }
646
+
647
+ .prose code {
648
+ background: var(--bg-card);
649
+ padding: 2px 6px;
650
+ border-radius: 3px;
651
+ font-family: var(--font-mono);
652
+ font-size: 0.9em;
653
+ }
654
+
655
+ .prose pre {
656
+ background: var(--bg-card);
657
+ padding: 16px;
658
+ border-radius: var(--radius);
659
+ overflow-x: auto;
660
+ margin: 16px 0;
661
+ border: 1px solid var(--border);
662
+ }
663
+
664
+ .prose pre code {
665
+ background: none;
666
+ padding: 0;
667
+ }
668
+
669
+ .prose blockquote {
670
+ border-left: 3px solid var(--accent);
671
+ padding: 8px 16px;
672
+ margin: 16px 0;
673
+ color: var(--text-secondary);
674
+ background: rgba(79,158,255,0.05);
675
+ border-radius: 0 var(--radius) var(--radius) 0;
676
+ }
677
+
678
+ .prose ul {
679
+ margin: 8px 0 16px 20px;
680
+ }
681
+
682
+ .prose li {
683
+ margin: 4px 0;
684
+ }
685
+
686
+ .prose hr {
687
+ border: none;
688
+ border-top: 1px solid var(--border);
689
+ margin: 32px 0;
690
+ }
691
+
692
+ .related-pages {
693
+ margin-top: 48px;
694
+ padding-top: 24px;
695
+ border-top: 1px solid var(--border);
696
+ }
697
+
698
+ .related-pages h3 {
699
+ font-size: 0.9rem;
700
+ color: var(--text-dim);
701
+ text-transform: uppercase;
702
+ letter-spacing: 0.05em;
703
+ margin-bottom: 12px;
704
+ }
705
+
706
+ .related-grid {
707
+ display: flex;
708
+ flex-wrap: wrap;
709
+ gap: 8px;
710
+ }
711
+
712
+ .related-grid a, .related-grid .broken-link {
713
+ display: inline-block;
714
+ padding: 4px 12px;
715
+ border-radius: var(--radius);
716
+ font-size: 0.85rem;
717
+ text-decoration: none;
718
+ transition: background 0.15s;
719
+ }
720
+
721
+ .related-grid a {
722
+ background: rgba(78,201,176,0.1);
723
+ color: var(--green);
724
+ border: 1px solid rgba(78,201,176,0.2);
725
+ }
726
+
727
+ .related-grid a:hover {
728
+ background: rgba(78,201,176,0.2);
729
+ }
730
+
731
+ .related-grid .broken-link {
732
+ background: rgba(241,76,76,0.1);
733
+ color: var(--text-dim);
734
+ border: 1px solid rgba(241,76,76,0.15);
735
+ }
736
+
737
+ .site-footer {
738
+ text-align: center;
739
+ padding: 24px;
740
+ border-top: 1px solid var(--border);
741
+ color: var(--text-dim);
742
+ font-size: 0.8rem;
743
+ }
744
+
745
+ .site-footer a { color: var(--accent); text-decoration: none; }
746
+ .site-footer a:hover { text-decoration: underline; }
747
+
748
+ .feed-links {
749
+ margin-top: 8px;
750
+ }
751
+
752
+ @media (max-width: 640px) {
753
+ .hero h1 { font-size: 1.8rem; }
754
+ .stats-bar { flex-wrap: wrap; }
755
+ .page-header h1 { font-size: 1.5rem; }
756
+ .page-meta { flex-wrap: wrap; }
757
+ }
758
+ `;
759
+ }
760
+ //# sourceMappingURL=publish.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../src/core/publish.ts"],"names":[],"mappings":"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"}
package/dist/mcp-entry.js CHANGED
File without changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wikimem",
3
- "version": "0.8.5",
3
+ "version": "0.8.6",
4
4
  "description": "Self-improving wiki IDE. Ingest anything (13 formats), query with any LLM, three automations: ingest, scrape, improve.",
5
5
  "type": "module",
6
6
  "bin": {