wikimem 0.8.0 → 0.8.2

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 (113) hide show
  1. package/dist/cli/commands/init.d.ts.map +1 -1
  2. package/dist/cli/commands/init.js +97 -8
  3. package/dist/cli/commands/init.js.map +1 -1
  4. package/dist/core/connectors.d.ts +1 -1
  5. package/dist/core/connectors.d.ts.map +1 -1
  6. package/dist/core/git.d.ts +1 -1
  7. package/dist/core/git.d.ts.map +1 -1
  8. package/dist/core/git.js.map +1 -1
  9. package/dist/core/ingest.d.ts.map +1 -1
  10. package/dist/core/ingest.js +74 -3
  11. package/dist/core/ingest.js.map +1 -1
  12. package/dist/core/lint.d.ts.map +1 -1
  13. package/dist/core/lint.js +23 -4
  14. package/dist/core/lint.js.map +1 -1
  15. package/dist/core/oauth-defaults.d.ts +31 -0
  16. package/dist/core/oauth-defaults.d.ts.map +1 -0
  17. package/dist/core/oauth-defaults.js +79 -0
  18. package/dist/core/oauth-defaults.js.map +1 -0
  19. package/dist/core/observer.d.ts +24 -1
  20. package/dist/core/observer.d.ts.map +1 -1
  21. package/dist/core/observer.js +146 -4
  22. package/dist/core/observer.js.map +1 -1
  23. package/dist/core/sync/gdrive.d.ts +14 -0
  24. package/dist/core/sync/gdrive.d.ts.map +1 -0
  25. package/dist/core/sync/gdrive.js +205 -0
  26. package/dist/core/sync/gdrive.js.map +1 -0
  27. package/dist/core/sync/github.d.ts +20 -0
  28. package/dist/core/sync/github.d.ts.map +1 -0
  29. package/dist/core/sync/github.js +206 -0
  30. package/dist/core/sync/github.js.map +1 -0
  31. package/dist/core/sync/gmail.d.ts +15 -0
  32. package/dist/core/sync/gmail.d.ts.map +1 -0
  33. package/dist/core/sync/gmail.js +159 -0
  34. package/dist/core/sync/gmail.js.map +1 -0
  35. package/dist/core/sync/index.d.ts +47 -0
  36. package/dist/core/sync/index.d.ts.map +1 -0
  37. package/dist/core/sync/index.js +100 -0
  38. package/dist/core/sync/index.js.map +1 -0
  39. package/dist/core/sync/jira.d.ts +15 -0
  40. package/dist/core/sync/jira.d.ts.map +1 -0
  41. package/dist/core/sync/jira.js +176 -0
  42. package/dist/core/sync/jira.js.map +1 -0
  43. package/dist/core/sync/linear.d.ts +15 -0
  44. package/dist/core/sync/linear.d.ts.map +1 -0
  45. package/dist/core/sync/linear.js +111 -0
  46. package/dist/core/sync/linear.js.map +1 -0
  47. package/dist/core/sync/notion.d.ts +14 -0
  48. package/dist/core/sync/notion.d.ts.map +1 -0
  49. package/dist/core/sync/notion.js +168 -0
  50. package/dist/core/sync/notion.js.map +1 -0
  51. package/dist/core/sync/rss.d.ts +20 -0
  52. package/dist/core/sync/rss.d.ts.map +1 -0
  53. package/dist/core/sync/rss.js +165 -0
  54. package/dist/core/sync/rss.js.map +1 -0
  55. package/dist/core/sync/scheduler.d.ts +31 -0
  56. package/dist/core/sync/scheduler.d.ts.map +1 -0
  57. package/dist/core/sync/scheduler.js +129 -0
  58. package/dist/core/sync/scheduler.js.map +1 -0
  59. package/dist/core/sync/slack.d.ts +16 -0
  60. package/dist/core/sync/slack.d.ts.map +1 -0
  61. package/dist/core/sync/slack.js +173 -0
  62. package/dist/core/sync/slack.js.map +1 -0
  63. package/dist/core/vault.d.ts +22 -0
  64. package/dist/core/vault.d.ts.map +1 -1
  65. package/dist/core/vault.js +65 -0
  66. package/dist/core/vault.js.map +1 -1
  67. package/dist/core/webhooks.d.ts +13 -0
  68. package/dist/core/webhooks.d.ts.map +1 -0
  69. package/dist/core/webhooks.js +206 -0
  70. package/dist/core/webhooks.js.map +1 -0
  71. package/dist/mcp-server.d.ts +11 -6
  72. package/dist/mcp-server.d.ts.map +1 -1
  73. package/dist/mcp-server.js +99 -6
  74. package/dist/mcp-server.js.map +1 -1
  75. package/dist/mcp-tools-extended.d.ts +15 -0
  76. package/dist/mcp-tools-extended.d.ts.map +1 -0
  77. package/dist/mcp-tools-extended.js +277 -0
  78. package/dist/mcp-tools-extended.js.map +1 -0
  79. package/dist/processors/csv.d.ts +18 -0
  80. package/dist/processors/csv.d.ts.map +1 -0
  81. package/dist/processors/csv.js +230 -0
  82. package/dist/processors/csv.js.map +1 -0
  83. package/dist/processors/image.d.ts.map +1 -1
  84. package/dist/processors/image.js +55 -27
  85. package/dist/processors/image.js.map +1 -1
  86. package/dist/processors/pdf.d.ts.map +1 -1
  87. package/dist/processors/pdf.js +5 -1
  88. package/dist/processors/pdf.js.map +1 -1
  89. package/dist/processors/pptx.d.ts +3 -1
  90. package/dist/processors/pptx.d.ts.map +1 -1
  91. package/dist/processors/pptx.js +236 -95
  92. package/dist/processors/pptx.js.map +1 -1
  93. package/dist/processors/xlsx.d.ts +2 -0
  94. package/dist/processors/xlsx.d.ts.map +1 -1
  95. package/dist/processors/xlsx.js +182 -46
  96. package/dist/processors/xlsx.js.map +1 -1
  97. package/dist/templates/source-types.d.ts +33 -0
  98. package/dist/templates/source-types.d.ts.map +1 -0
  99. package/dist/templates/source-types.js +178 -0
  100. package/dist/templates/source-types.js.map +1 -0
  101. package/dist/web/public/index.html +1785 -103
  102. package/dist/web/server.d.ts.map +1 -1
  103. package/dist/web/server.js +746 -38
  104. package/dist/web/server.js.map +1 -1
  105. package/package.json +4 -1
  106. package/src/web/public/index.html +1785 -103
  107. package/templates/source-types/article.md +21 -0
  108. package/templates/source-types/book.md +21 -0
  109. package/templates/source-types/paper.md +23 -0
  110. package/templates/source-types/podcast.md +21 -0
  111. package/templates/source-types/raw-notes.md +17 -0
  112. package/templates/source-types/tweet-thread.md +19 -0
  113. package/templates/source-types/video.md +21 -0
@@ -1,13 +1,14 @@
1
1
  /**
2
2
  * Excel/spreadsheet (.xlsx, .xls) processor.
3
3
  * Uses xlsx (SheetJS) for extraction, with a raw XML fallback.
4
+ * Features: multiple sheets as sections, formula result values,
5
+ * bold/italic header detection, cell metadata.
4
6
  */
5
7
  import { readFileSync } from 'node:fs';
6
8
  import { basename, extname } from 'node:path';
7
9
  export async function processXlsx(filePath) {
8
10
  const ext = extname(filePath).toLowerCase();
9
11
  const title = basename(filePath, ext);
10
- // Try SheetJS first (best quality), fall back to raw XML
11
12
  let content;
12
13
  let sheetCount = 0;
13
14
  try {
@@ -32,74 +33,142 @@ export async function processXlsx(filePath) {
32
33
  };
33
34
  }
34
35
  async function extractWithSheetJS(filePath) {
35
- // Dynamic import — xlsx is an optional dependency
36
36
  const XLSX = await import('xlsx');
37
37
  const buffer = readFileSync(filePath);
38
- const workbook = XLSX.read(buffer, { type: 'buffer' });
38
+ const workbook = XLSX.read(buffer, {
39
+ type: 'buffer',
40
+ cellFormula: true,
41
+ cellDates: true,
42
+ cellStyles: true,
43
+ cellNF: true,
44
+ });
39
45
  const sections = [];
40
- for (const sheetName of workbook.SheetNames) {
46
+ const totalSheets = workbook.SheetNames.length;
47
+ for (let sheetIdx = 0; sheetIdx < totalSheets; sheetIdx++) {
48
+ const sheetName = workbook.SheetNames[sheetIdx];
49
+ if (!sheetName)
50
+ continue;
41
51
  const sheet = workbook.Sheets[sheetName];
42
52
  if (!sheet)
43
53
  continue;
44
- // Convert sheet to array of arrays
45
- const data = XLSX.utils.sheet_to_json(sheet, { header: 1 });
54
+ // Get sheet dimensions
55
+ const ref = sheet['!ref'];
56
+ let rowCount = 0;
57
+ let colCount = 0;
58
+ if (ref) {
59
+ const range = XLSX.utils.decode_range(ref);
60
+ rowCount = range.e.r - range.s.r + 1;
61
+ colCount = range.e.c - range.s.c + 1;
62
+ }
63
+ // Convert sheet to array of arrays (formula results rendered, not formula text)
64
+ const data = XLSX.utils.sheet_to_json(sheet, {
65
+ header: 1,
66
+ rawNumbers: false,
67
+ defval: '',
68
+ });
46
69
  if (data.length === 0)
47
70
  continue;
48
- const table = arrayToMarkdownTable(data);
49
- if (table) {
50
- sections.push(`### ${sheetName}\n\n${table}`);
71
+ // Analyze cells for formatting and formulas
72
+ const cellInfoMap = analyzeCells(sheet, XLSX);
73
+ const headerRow = detectHeaderRow(data, cellInfoMap, XLSX);
74
+ // Build section header with metadata
75
+ let section = '';
76
+ if (totalSheets > 1) {
77
+ section += `### Sheet ${sheetIdx + 1}: ${sheetName}\n\n`;
78
+ }
79
+ else {
80
+ section += `### ${sheetName}\n\n`;
81
+ }
82
+ // Sheet metadata line
83
+ const metaParts = [];
84
+ metaParts.push(`_${rowCount} rows × ${colCount} columns_`);
85
+ const merges = sheet['!merges'];
86
+ if (merges && merges.length > 0) {
87
+ metaParts.push(`_${merges.length} merged region(s)_`);
88
+ }
89
+ const formulaCount = Object.values(cellInfoMap).filter((c) => c.formula).length;
90
+ if (formulaCount > 0) {
91
+ metaParts.push(`_${formulaCount} formula(s)_`);
51
92
  }
93
+ section += metaParts.join(' · ') + '\n\n';
94
+ // Build the table with formatting hints
95
+ const table = buildEnhancedTable(data, cellInfoMap, headerRow, XLSX);
96
+ if (table)
97
+ section += table;
98
+ // Formula summary (show formulas alongside their computed values)
99
+ const formulaSummary = buildFormulaSummary(cellInfoMap);
100
+ if (formulaSummary) {
101
+ section += '\n\n' + formulaSummary;
102
+ }
103
+ sections.push(section);
104
+ }
105
+ // Chart info
106
+ const chartInfo = extractChartInfo(workbook);
107
+ if (chartInfo) {
108
+ sections.push(`### Charts\n\n${chartInfo}`);
52
109
  }
53
110
  return {
54
111
  content: sections.join('\n\n---\n\n'),
55
112
  sheetCount: workbook.SheetNames.length,
56
113
  };
57
114
  }
58
- function extractFromRawXml(filePath) {
59
- // .xlsx is a zip file try to find sharedStrings.xml for text content
60
- const buffer = readFileSync(filePath);
61
- const content = buffer.toString('latin1');
62
- const textParts = [];
63
- // Look for <t> elements (shared strings in xlsx XML)
64
- const textRegex = /<t[^>]*>([\s\S]*?)<\/t>/g;
65
- let match;
66
- while ((match = textRegex.exec(content)) !== null) {
67
- if (match[1] && match[1].trim()) {
68
- textParts.push(match[1].trim());
69
- }
115
+ /**
116
+ * Analyze cells for formatting (bold, italic) and formulas.
117
+ */
118
+ function analyzeCells(sheet, XLSX) {
119
+ const cellMap = {};
120
+ for (const [key, val] of Object.entries(sheet)) {
121
+ if (key.startsWith('!'))
122
+ continue;
123
+ const cell = val;
124
+ const displayValue = cell.w ?? (cell.v !== null && cell.v !== undefined ? String(cell.v) : '');
125
+ cellMap[key] = {
126
+ address: key,
127
+ value: String(displayValue),
128
+ formula: cell.f ? `=${cell.f}` : undefined,
129
+ isBold: !!(cell.s?.font?.bold),
130
+ isItalic: !!(cell.s?.font?.italic),
131
+ type: cell.t ?? 's',
132
+ };
70
133
  }
71
- // Also look for <v> elements (cell values)
72
- const valueRegex = /<v>([\s\S]*?)<\/v>/g;
73
- while ((match = valueRegex.exec(content)) !== null) {
74
- if (match[1] && match[1].trim()) {
75
- textParts.push(match[1].trim());
134
+ // Suppress unused import warning XLSX is used by callers for decode
135
+ void XLSX;
136
+ return cellMap;
137
+ }
138
+ /**
139
+ * Detect which row is the header row.
140
+ * Heuristics: first row with all string values, or first row with bold cells.
141
+ */
142
+ function detectHeaderRow(data, cellInfoMap, XLSX) {
143
+ if (data.length === 0)
144
+ return 0;
145
+ // Check if first row has bold cells
146
+ const firstRow = data[0];
147
+ if (Array.isArray(firstRow)) {
148
+ let boldCount = 0;
149
+ for (let col = 0; col < firstRow.length; col++) {
150
+ const addr = XLSX.utils.encode_cell({ r: 0, c: col });
151
+ if (cellInfoMap[addr]?.isBold)
152
+ boldCount++;
76
153
  }
154
+ if (boldCount > 0 && boldCount >= firstRow.length / 2)
155
+ return 0;
77
156
  }
78
- // Count sheets
79
- const sheetMatches = content.match(/<sheet /g);
80
- const sheetCount = sheetMatches ? sheetMatches.length : 1;
81
- if (textParts.length === 0) {
82
- return { content: '', sheetCount };
83
- }
84
- // Present as a simple list since we can't reconstruct table structure
85
- const uniqueParts = [...new Set(textParts)].slice(0, 500);
86
- return {
87
- content: `**Extracted cell values:**\n\n${uniqueParts.join(' | ')}`,
88
- sheetCount,
89
- };
157
+ // Default: first row is header
158
+ return 0;
90
159
  }
91
- function arrayToMarkdownTable(data) {
92
- if (data.length === 0)
93
- return '';
160
+ /**
161
+ * Build markdown table with formatting hints.
162
+ * Bold cells get **wrapped**, italic cells get _wrapped_.
163
+ */
164
+ function buildEnhancedTable(data, cellInfoMap, headerRow, XLSX) {
94
165
  // Filter out completely empty rows
95
166
  const rows = data.filter((row) => Array.isArray(row) && row.some((cell) => cell !== null && cell !== undefined && String(cell).trim() !== ''));
96
167
  if (rows.length === 0)
97
168
  return '';
98
- // Determine max columns
99
169
  const maxCols = Math.max(...rows.map((row) => (Array.isArray(row) ? row.length : 0)));
100
170
  if (maxCols === 0)
101
171
  return '';
102
- // Build markdown table
103
172
  const lines = [];
104
173
  for (let i = 0; i < Math.min(rows.length, 100); i++) {
105
174
  const row = rows[i];
@@ -108,12 +177,23 @@ function arrayToMarkdownTable(data) {
108
177
  const cells = [];
109
178
  for (let j = 0; j < maxCols; j++) {
110
179
  const cell = row[j];
111
- const cellStr = cell !== null && cell !== undefined ? String(cell).replace(/\|/g, '\\|').replace(/\n/g, ' ') : '';
180
+ let cellStr = cell !== null && cell !== undefined ? String(cell).replace(/\|/g, '\\|').replace(/\n/g, ' ') : '';
181
+ // Apply formatting hints from cell style
182
+ const addr = XLSX.utils.encode_cell({ r: i, c: j });
183
+ const info = cellInfoMap[addr];
184
+ if (info) {
185
+ if (info.isBold && cellStr.length > 0) {
186
+ cellStr = `**${cellStr}**`;
187
+ }
188
+ else if (info.isItalic && cellStr.length > 0) {
189
+ cellStr = `_${cellStr}_`;
190
+ }
191
+ }
112
192
  cells.push(cellStr);
113
193
  }
114
194
  lines.push(`| ${cells.join(' | ')} |`);
115
- // Add header separator after first row
116
- if (i === 0) {
195
+ // Header separator after the detected header row
196
+ if (i === headerRow) {
117
197
  lines.push(`| ${cells.map(() => '---').join(' | ')} |`);
118
198
  }
119
199
  }
@@ -122,6 +202,62 @@ function arrayToMarkdownTable(data) {
122
202
  }
123
203
  return lines.join('\n');
124
204
  }
205
+ /**
206
+ * Build a formula summary section showing formula → computed value.
207
+ */
208
+ function buildFormulaSummary(cellInfoMap) {
209
+ const formulas = Object.values(cellInfoMap).filter((c) => c.formula);
210
+ if (formulas.length === 0)
211
+ return '';
212
+ const lines = ['**Formulas:**', ''];
213
+ const shown = formulas.slice(0, 15);
214
+ for (const f of shown) {
215
+ lines.push(`- \`${f.address}\`: \`${f.formula}\` → **${f.value}**`);
216
+ }
217
+ if (formulas.length > 15) {
218
+ lines.push(`- _...and ${formulas.length - 15} more formulas_`);
219
+ }
220
+ return lines.join('\n');
221
+ }
222
+ function extractChartInfo(workbook) {
223
+ const sheets = workbook.Sheets;
224
+ const chartNotes = [];
225
+ for (const [name, sheet] of Object.entries(sheets)) {
226
+ const type = sheet['!type'];
227
+ if (type === 'chart') {
228
+ chartNotes.push(`- **${name}**: Chart sheet detected`);
229
+ }
230
+ }
231
+ return chartNotes.length > 0 ? chartNotes.join('\n') : '';
232
+ }
233
+ function extractFromRawXml(filePath) {
234
+ const buffer = readFileSync(filePath);
235
+ const content = buffer.toString('latin1');
236
+ const textParts = [];
237
+ const textRegex = /<t[^>]*>([\s\S]*?)<\/t>/g;
238
+ let match;
239
+ while ((match = textRegex.exec(content)) !== null) {
240
+ if (match[1] && match[1].trim()) {
241
+ textParts.push(match[1].trim());
242
+ }
243
+ }
244
+ const valueRegex = /<v>([\s\S]*?)<\/v>/g;
245
+ while ((match = valueRegex.exec(content)) !== null) {
246
+ if (match[1] && match[1].trim()) {
247
+ textParts.push(match[1].trim());
248
+ }
249
+ }
250
+ const sheetMatches = content.match(/<sheet /g);
251
+ const sheetCount = sheetMatches ? sheetMatches.length : 1;
252
+ if (textParts.length === 0) {
253
+ return { content: '', sheetCount };
254
+ }
255
+ const uniqueParts = [...new Set(textParts)].slice(0, 500);
256
+ return {
257
+ content: `**Extracted cell values:**\n\n${uniqueParts.join(' | ')}`,
258
+ sheetCount,
259
+ };
260
+ }
125
261
  function buildMarkdown(title, filePath, content, sheetCount) {
126
262
  return `# ${title}
127
263
 
@@ -1 +1 @@
1
- {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/processors/xlsx.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"xlsx.js","sourceRoot":"","sources":["../../src/processors/xlsx.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Source-type templates for wiki page generation.
3
+ * Each template defines how a specific type of source should be
4
+ * structured when compiled into wiki pages.
5
+ *
6
+ * Used by ingest.ts to generate appropriately structured content.
7
+ */
8
+ export interface SourceTypeTemplate {
9
+ id: string;
10
+ name: string;
11
+ description: string;
12
+ /** Keywords that help detect this source type from content */
13
+ detectionKeywords: string[];
14
+ /** MIME type patterns */
15
+ mimePatterns?: string[];
16
+ /** System prompt addition for LLM compilation */
17
+ systemPromptAddition: string;
18
+ /** Suggested frontmatter fields beyond the defaults */
19
+ extraFrontmatterFields: string[];
20
+ /** Suggested page structure (headings) */
21
+ suggestedStructure: string[];
22
+ }
23
+ export declare const SOURCE_TYPE_TEMPLATES: SourceTypeTemplate[];
24
+ /**
25
+ * Detect source type from content and metadata.
26
+ * Returns the best-matching template or null for generic.
27
+ */
28
+ export declare function detectSourceType(content: string, filename?: string, mimeType?: string): SourceTypeTemplate | null;
29
+ /**
30
+ * Get the system prompt addition for a detected source type.
31
+ */
32
+ export declare function getSourceTypePrompt(template: SourceTypeTemplate | null): string;
33
+ //# sourceMappingURL=source-types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-types.d.ts","sourceRoot":"","sources":["../../src/templates/source-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,WAAW,kBAAkB;IACjC,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,yBAAyB;IACzB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,iDAAiD;IACjD,oBAAoB,EAAE,MAAM,CAAC;IAC7B,uDAAuD;IACvD,sBAAsB,EAAE,MAAM,EAAE,CAAC;IACjC,0CAA0C;IAC1C,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAC9B;AAED,eAAO,MAAM,qBAAqB,EAAE,kBAAkB,EAqHrD,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,MAAM,GAChB,kBAAkB,GAAG,IAAI,CAyC3B;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,kBAAkB,GAAG,IAAI,GAAG,MAAM,CAG/E"}
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Source-type templates for wiki page generation.
3
+ * Each template defines how a specific type of source should be
4
+ * structured when compiled into wiki pages.
5
+ *
6
+ * Used by ingest.ts to generate appropriately structured content.
7
+ */
8
+ export const SOURCE_TYPE_TEMPLATES = [
9
+ {
10
+ id: 'article',
11
+ name: 'Article / Blog Post',
12
+ description: 'Web articles, blog posts, news pieces',
13
+ detectionKeywords: ['article', 'blog', 'post', 'published', 'author', 'byline'],
14
+ mimePatterns: ['text/html'],
15
+ systemPromptAddition: `This source is a web article or blog post. Structure the wiki pages to capture:
16
+ - The core thesis or argument
17
+ - Key claims with supporting evidence
18
+ - Author's perspective and potential biases
19
+ - Practical takeaways and implications
20
+ - How this connects to other knowledge in the wiki
21
+ Use citation-style references when quoting the original.`,
22
+ extraFrontmatterFields: ['author', 'publication', 'publish_date', 'url'],
23
+ suggestedStructure: ['Summary', 'Key Arguments', 'Evidence & Claims', 'Implications', 'Related Concepts'],
24
+ },
25
+ {
26
+ id: 'paper',
27
+ name: 'Academic Paper / Research',
28
+ description: 'Research papers, whitepapers, academic publications',
29
+ detectionKeywords: ['abstract', 'methodology', 'findings', 'conclusion', 'references', 'doi', 'arxiv', 'et al'],
30
+ mimePatterns: ['application/pdf'],
31
+ systemPromptAddition: `This source is an academic paper or research document. Structure the wiki pages to capture:
32
+ - Abstract / TL;DR in accessible language
33
+ - Research question and hypothesis
34
+ - Methodology overview (non-technical summary)
35
+ - Key findings and results
36
+ - Limitations acknowledged by authors
37
+ - Practical implications and applications
38
+ - How this advances the field
39
+ Translate academic jargon into plain language while preserving accuracy.`,
40
+ extraFrontmatterFields: ['authors', 'institution', 'year', 'doi', 'conference', 'citation_count'],
41
+ suggestedStructure: ['Abstract', 'Research Question', 'Methodology', 'Key Findings', 'Limitations', 'Implications', 'References'],
42
+ },
43
+ {
44
+ id: 'tweet-thread',
45
+ name: 'Tweet Thread / Social Post',
46
+ description: 'Twitter/X threads, social media discussions',
47
+ detectionKeywords: ['thread', 'tweet', '🧵', '1/', 'RT', '@', 'x.com', 'twitter.com'],
48
+ systemPromptAddition: `This source is a social media thread (likely Twitter/X). Structure the wiki pages to capture:
49
+ - The main argument condensed from the thread
50
+ - Key insights (numbered, one per point)
51
+ - Any data, links, or evidence shared
52
+ - Community reactions or counter-arguments if visible
53
+ - The author's credibility and context
54
+ Threads are informal — extract the substance while noting the conversational tone.`,
55
+ extraFrontmatterFields: ['author_handle', 'platform', 'post_date', 'engagement'],
56
+ suggestedStructure: ['Main Argument', 'Key Points', 'Evidence Shared', 'Context & Credibility'],
57
+ },
58
+ {
59
+ id: 'podcast',
60
+ name: 'Podcast / Audio Content',
61
+ description: 'Podcast episodes, audio interviews, lectures',
62
+ detectionKeywords: ['podcast', 'episode', 'interview', 'host', 'guest', 'transcript', 'listen'],
63
+ mimePatterns: ['audio/'],
64
+ systemPromptAddition: `This source is a podcast episode or audio content (likely transcribed). Structure the wiki pages to capture:
65
+ - Episode summary (who, what, why it matters)
66
+ - Key quotes from each speaker (attributed)
67
+ - Main topics discussed (as separate sections)
68
+ - Actionable advice or takeaways
69
+ - Disagreements or debates between speakers
70
+ - Resources/links mentioned
71
+ Attribute quotes to speakers. Separate opinion from fact.`,
72
+ extraFrontmatterFields: ['host', 'guests', 'podcast_name', 'episode_number', 'duration', 'air_date'],
73
+ suggestedStructure: ['Episode Overview', 'Speakers', 'Key Topics', 'Notable Quotes', 'Takeaways', 'Resources Mentioned'],
74
+ },
75
+ {
76
+ id: 'video',
77
+ name: 'Video / Lecture',
78
+ description: 'YouTube videos, lectures, presentations, tutorials',
79
+ detectionKeywords: ['video', 'youtube', 'lecture', 'presentation', 'tutorial', 'watch', 'timestamp'],
80
+ mimePatterns: ['video/'],
81
+ systemPromptAddition: `This source is a video or lecture (likely transcribed). Structure the wiki pages to capture:
82
+ - Video summary with key timestamps
83
+ - Main concepts taught or discussed
84
+ - Visual elements described (diagrams, demos, code shown)
85
+ - Step-by-step instructions if tutorial
86
+ - Speaker's key arguments
87
+ - Q&A highlights if present
88
+ Note: visual content may be lost in transcription — flag where visuals were important.`,
89
+ extraFrontmatterFields: ['creator', 'channel', 'duration', 'publish_date', 'url', 'platform'],
90
+ suggestedStructure: ['Overview', 'Key Concepts', 'Timestamps', 'Visual Notes', 'Takeaways'],
91
+ },
92
+ {
93
+ id: 'book',
94
+ name: 'Book / Long-form',
95
+ description: 'Books, book chapters, long-form essays, reports',
96
+ detectionKeywords: ['chapter', 'book', 'isbn', 'publisher', 'edition', 'foreword', 'preface'],
97
+ systemPromptAddition: `This source is a book or long-form document. Structure the wiki pages to capture:
98
+ - Book summary (thesis, scope, intended audience)
99
+ - Chapter-by-chapter key takeaways
100
+ - Core frameworks or models introduced
101
+ - Memorable examples and case studies
102
+ - Practical applications
103
+ - Author's background and perspective
104
+ - How this connects to other books/ideas in the wiki
105
+ Create separate wiki pages for major concepts introduced by the book.`,
106
+ extraFrontmatterFields: ['author', 'publisher', 'year', 'isbn', 'genre', 'pages'],
107
+ suggestedStructure: ['Book Summary', 'Core Thesis', 'Key Frameworks', 'Chapter Notes', 'Practical Applications', 'Related Works'],
108
+ },
109
+ {
110
+ id: 'notes',
111
+ name: 'Raw Notes / Meeting Notes',
112
+ description: 'Personal notes, meeting notes, brainstorms, voice memos',
113
+ detectionKeywords: ['notes', 'meeting', 'action items', 'TODO', 'decision', 'brainstorm', 'idea'],
114
+ systemPromptAddition: `This source is raw notes (meeting notes, personal notes, brainstorm). Structure the wiki pages to capture:
115
+ - Clean summary of what was discussed/noted
116
+ - Action items extracted (with owners if mentioned)
117
+ - Decisions made
118
+ - Open questions or unresolved items
119
+ - Key ideas worth developing further
120
+ - Connections to existing wiki topics
121
+ Raw notes are messy — your job is to extract structure and meaning. Link to existing wiki pages where concepts overlap.`,
122
+ extraFrontmatterFields: ['meeting_date', 'participants', 'context'],
123
+ suggestedStructure: ['Summary', 'Key Points', 'Action Items', 'Decisions', 'Open Questions', 'Related Topics'],
124
+ },
125
+ ];
126
+ /**
127
+ * Detect source type from content and metadata.
128
+ * Returns the best-matching template or null for generic.
129
+ */
130
+ export function detectSourceType(content, filename, mimeType) {
131
+ const lowerContent = content.toLowerCase().slice(0, 2000); // Only check first 2K chars
132
+ const lowerFilename = (filename ?? '').toLowerCase();
133
+ let bestMatch = null;
134
+ let bestScore = 0;
135
+ for (const template of SOURCE_TYPE_TEMPLATES) {
136
+ let score = 0;
137
+ // Check keywords in content
138
+ for (const keyword of template.detectionKeywords) {
139
+ if (lowerContent.includes(keyword.toLowerCase()))
140
+ score += 1;
141
+ }
142
+ // Check MIME type
143
+ if (mimeType && template.mimePatterns) {
144
+ for (const pattern of template.mimePatterns) {
145
+ if (mimeType.startsWith(pattern))
146
+ score += 3;
147
+ }
148
+ }
149
+ // Check filename hints
150
+ if (lowerFilename.includes('paper') || lowerFilename.includes('arxiv')) {
151
+ if (template.id === 'paper')
152
+ score += 2;
153
+ }
154
+ if (lowerFilename.includes('notes') || lowerFilename.includes('meeting')) {
155
+ if (template.id === 'notes')
156
+ score += 2;
157
+ }
158
+ if (lowerFilename.includes('transcript') || lowerFilename.includes('podcast')) {
159
+ if (template.id === 'podcast')
160
+ score += 2;
161
+ }
162
+ if (score > bestScore) {
163
+ bestScore = score;
164
+ bestMatch = template;
165
+ }
166
+ }
167
+ // Require minimum confidence (at least 2 keyword matches)
168
+ return bestScore >= 2 ? bestMatch : null;
169
+ }
170
+ /**
171
+ * Get the system prompt addition for a detected source type.
172
+ */
173
+ export function getSourceTypePrompt(template) {
174
+ if (!template)
175
+ return '';
176
+ return `\n\nSOURCE TYPE DETECTED: ${template.name}\n${template.systemPromptAddition}`;
177
+ }
178
+ //# sourceMappingURL=source-types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"source-types.js","sourceRoot":"","sources":["../../src/templates/source-types.ts"],"names":[],"mappings":"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"}