gnosys 4.4.7 → 5.0.0
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/dist/cli.js +140 -0
- package/dist/cli.js.map +1 -1
- package/dist/index.js +65 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/attachments.d.ts +43 -0
- package/dist/lib/attachments.d.ts.map +1 -0
- package/dist/lib/attachments.js +154 -0
- package/dist/lib/attachments.js.map +1 -0
- package/dist/lib/audioExtract.d.ts +39 -0
- package/dist/lib/audioExtract.d.ts.map +1 -0
- package/dist/lib/audioExtract.js +220 -0
- package/dist/lib/audioExtract.js.map +1 -0
- package/dist/lib/chunkSplitter.d.ts +46 -0
- package/dist/lib/chunkSplitter.d.ts.map +1 -0
- package/dist/lib/chunkSplitter.js +233 -0
- package/dist/lib/chunkSplitter.js.map +1 -0
- package/dist/lib/config.d.ts +70 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +24 -0
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/db.d.ts +7 -1
- package/dist/lib/db.d.ts.map +1 -1
- package/dist/lib/db.js +31 -4
- package/dist/lib/db.js.map +1 -1
- package/dist/lib/dbWrite.d.ts.map +1 -1
- package/dist/lib/dbWrite.js +11 -0
- package/dist/lib/dbWrite.js.map +1 -1
- package/dist/lib/docxExtract.d.ts +27 -0
- package/dist/lib/docxExtract.d.ts.map +1 -0
- package/dist/lib/docxExtract.js +80 -0
- package/dist/lib/docxExtract.js.map +1 -0
- package/dist/lib/fileDetect.d.ts +20 -0
- package/dist/lib/fileDetect.d.ts.map +1 -0
- package/dist/lib/fileDetect.js +124 -0
- package/dist/lib/fileDetect.js.map +1 -0
- package/dist/lib/imageExtract.d.ts +26 -0
- package/dist/lib/imageExtract.d.ts.map +1 -0
- package/dist/lib/imageExtract.js +113 -0
- package/dist/lib/imageExtract.js.map +1 -0
- package/dist/lib/llm.d.ts +9 -0
- package/dist/lib/llm.d.ts.map +1 -1
- package/dist/lib/llm.js +102 -0
- package/dist/lib/llm.js.map +1 -1
- package/dist/lib/multimodalIngest.d.ts +68 -0
- package/dist/lib/multimodalIngest.d.ts.map +1 -0
- package/dist/lib/multimodalIngest.js +463 -0
- package/dist/lib/multimodalIngest.js.map +1 -0
- package/dist/lib/pdfExtract.d.ts +29 -0
- package/dist/lib/pdfExtract.d.ts.map +1 -0
- package/dist/lib/pdfExtract.js +163 -0
- package/dist/lib/pdfExtract.js.map +1 -0
- package/dist/lib/store.d.ts +3 -0
- package/dist/lib/store.d.ts.map +1 -1
- package/dist/lib/store.js.map +1 -1
- package/dist/lib/videoExtract.d.ts +30 -0
- package/dist/lib/videoExtract.d.ts.map +1 -0
- package/dist/lib/videoExtract.js +92 -0
- package/dist/lib/videoExtract.js.map +1 -0
- package/package.json +3 -1
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys PDF Extraction — Extract text from PDF files by section.
|
|
3
|
+
*
|
|
4
|
+
* Splits on content structure (headings, topic boundaries) rather than page
|
|
5
|
+
* breaks. Page numbers are tracked as metadata so memories know which pages
|
|
6
|
+
* they came from. This mirrors DOCX extraction behavior.
|
|
7
|
+
*
|
|
8
|
+
* Uses pdf-parse v2 (class-based API wrapping Mozilla's pdf.js) via dynamic
|
|
9
|
+
* import so it stays optional and doesn't break builds that don't need it.
|
|
10
|
+
*/
|
|
11
|
+
import * as fs from "fs/promises";
|
|
12
|
+
// ─── Constants ──────────────────────────────────────────────────────────
|
|
13
|
+
/** Regex patterns that look like section headings in PDF text */
|
|
14
|
+
const HEADING_PATTERNS = [
|
|
15
|
+
/^#{1,3}\s+.+$/m, // Markdown-style headings
|
|
16
|
+
/^[A-Z][A-Z\s]{4,60}$/m, // ALL CAPS lines (common in PDFs)
|
|
17
|
+
/^\d+\.\s+[A-Z].{3,80}$/m, // Numbered sections: "1. Introduction"
|
|
18
|
+
/^\d+\.\d+\s+[A-Z].{3,80}$/m, // Sub-sections: "1.1 Overview"
|
|
19
|
+
/^Chapter\s+\d+/im, // "Chapter 1"
|
|
20
|
+
/^(?:Introduction|Conclusion|Summary|Abstract|References|Appendix|Background|Overview|Discussion|Methods|Results)\s*$/im,
|
|
21
|
+
];
|
|
22
|
+
// ─── Public API ─────────────────────────────────────────────────────────
|
|
23
|
+
/**
|
|
24
|
+
* Extract text from a PDF file, splitting by sections/topics.
|
|
25
|
+
*
|
|
26
|
+
* First extracts all text with page tracking, then splits on detected
|
|
27
|
+
* headings or structural boundaries. Each chunk includes the page range
|
|
28
|
+
* where the content appears.
|
|
29
|
+
*/
|
|
30
|
+
export async function extractPdfText(filePath) {
|
|
31
|
+
// Dynamic import — pdf-parse is an optional dependency
|
|
32
|
+
const { PDFParse } = await import("pdf-parse");
|
|
33
|
+
// Read the file as a buffer and convert to Uint8Array
|
|
34
|
+
const buffer = await fs.readFile(filePath);
|
|
35
|
+
const data = new Uint8Array(buffer.buffer, buffer.byteOffset, buffer.byteLength);
|
|
36
|
+
// Create parser and extract text
|
|
37
|
+
const parser = new PDFParse({ data });
|
|
38
|
+
let textResult;
|
|
39
|
+
try {
|
|
40
|
+
textResult = await parser.getText();
|
|
41
|
+
}
|
|
42
|
+
finally {
|
|
43
|
+
await parser.destroy();
|
|
44
|
+
}
|
|
45
|
+
const totalPages = textResult.total || 1;
|
|
46
|
+
// Build a list of text blocks with their page numbers
|
|
47
|
+
const pageBlocks = [];
|
|
48
|
+
if (textResult.pages && textResult.pages.length > 0) {
|
|
49
|
+
for (const page of textResult.pages) {
|
|
50
|
+
const pageText = page.text?.trim();
|
|
51
|
+
if (pageText) {
|
|
52
|
+
pageBlocks.push({ text: pageText, pageNum: page.num || 1 });
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
else if (textResult.text?.trim()) {
|
|
57
|
+
// Fallback: no per-page data, treat as single page
|
|
58
|
+
pageBlocks.push({ text: textResult.text.trim(), pageNum: 1 });
|
|
59
|
+
}
|
|
60
|
+
if (pageBlocks.length === 0)
|
|
61
|
+
return [];
|
|
62
|
+
// Combine all text with page markers for tracking
|
|
63
|
+
const combinedText = pageBlocks.map((b) => b.text).join("\n\n");
|
|
64
|
+
// Split into sections based on headings
|
|
65
|
+
const sections = splitBySections(combinedText);
|
|
66
|
+
// Map each section back to its page range
|
|
67
|
+
const chunks = [];
|
|
68
|
+
let textOffset = 0;
|
|
69
|
+
for (const section of sections) {
|
|
70
|
+
// Find which pages this section spans
|
|
71
|
+
const startOffset = combinedText.indexOf(section.text, textOffset);
|
|
72
|
+
const endOffset = startOffset + section.text.length;
|
|
73
|
+
textOffset = startOffset >= 0 ? startOffset : textOffset;
|
|
74
|
+
const startPage = findPageForOffset(pageBlocks, combinedText, startOffset);
|
|
75
|
+
const endPage = findPageForOffset(pageBlocks, combinedText, endOffset);
|
|
76
|
+
const pages = startPage === endPage ? `${startPage}` : `${startPage}-${endPage}`;
|
|
77
|
+
chunks.push({
|
|
78
|
+
text: section.text,
|
|
79
|
+
sectionHeading: section.heading,
|
|
80
|
+
pages,
|
|
81
|
+
pageCount: totalPages,
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
return chunks;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Split text into sections based on detected headings.
|
|
88
|
+
* If no headings are found, splits on double-newline paragraph boundaries
|
|
89
|
+
* and groups into ~1500 character chunks.
|
|
90
|
+
*/
|
|
91
|
+
function splitBySections(text) {
|
|
92
|
+
// Try to find heading boundaries
|
|
93
|
+
const headingIndices = [];
|
|
94
|
+
for (const line of text.split("\n")) {
|
|
95
|
+
const trimmed = line.trim();
|
|
96
|
+
if (!trimmed || trimmed.length > 100)
|
|
97
|
+
continue;
|
|
98
|
+
for (const pattern of HEADING_PATTERNS) {
|
|
99
|
+
if (pattern.test(trimmed)) {
|
|
100
|
+
const idx = text.indexOf(line);
|
|
101
|
+
if (idx >= 0) {
|
|
102
|
+
headingIndices.push({ index: idx, heading: trimmed });
|
|
103
|
+
}
|
|
104
|
+
break;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
// Deduplicate headings that point to the same location
|
|
109
|
+
const uniqueHeadings = headingIndices.filter((h, i) => i === 0 || h.index !== headingIndices[i - 1].index);
|
|
110
|
+
if (uniqueHeadings.length >= 2) {
|
|
111
|
+
// Split at heading boundaries
|
|
112
|
+
const sections = [];
|
|
113
|
+
// Text before first heading (if any)
|
|
114
|
+
const preHeadingText = text.slice(0, uniqueHeadings[0].index).trim();
|
|
115
|
+
if (preHeadingText) {
|
|
116
|
+
sections.push({ text: preHeadingText });
|
|
117
|
+
}
|
|
118
|
+
for (let i = 0; i < uniqueHeadings.length; i++) {
|
|
119
|
+
const start = uniqueHeadings[i].index;
|
|
120
|
+
const end = i + 1 < uniqueHeadings.length ? uniqueHeadings[i + 1].index : text.length;
|
|
121
|
+
const sectionText = text.slice(start, end).trim();
|
|
122
|
+
if (sectionText) {
|
|
123
|
+
sections.push({ heading: uniqueHeadings[i].heading, text: sectionText });
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return sections;
|
|
127
|
+
}
|
|
128
|
+
// No headings found — split on paragraph boundaries and group
|
|
129
|
+
const paragraphs = text.split(/\n\s*\n/).filter((p) => p.trim());
|
|
130
|
+
if (paragraphs.length <= 1) {
|
|
131
|
+
return [{ text: text.trim() }];
|
|
132
|
+
}
|
|
133
|
+
const TARGET_SIZE = 1500;
|
|
134
|
+
const sections = [];
|
|
135
|
+
let current = "";
|
|
136
|
+
for (const para of paragraphs) {
|
|
137
|
+
if (current && current.length + para.length > TARGET_SIZE) {
|
|
138
|
+
sections.push({ text: current.trim() });
|
|
139
|
+
current = para;
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
current = current ? current + "\n\n" + para : para;
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
if (current.trim()) {
|
|
146
|
+
sections.push({ text: current.trim() });
|
|
147
|
+
}
|
|
148
|
+
return sections;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Find which page a given character offset falls on.
|
|
152
|
+
*/
|
|
153
|
+
function findPageForOffset(pageBlocks, combinedText, offset) {
|
|
154
|
+
let currentOffset = 0;
|
|
155
|
+
for (const block of pageBlocks) {
|
|
156
|
+
const blockEnd = currentOffset + block.text.length + 2; // +2 for \n\n separator
|
|
157
|
+
if (offset <= blockEnd)
|
|
158
|
+
return block.pageNum;
|
|
159
|
+
currentOffset = blockEnd;
|
|
160
|
+
}
|
|
161
|
+
return pageBlocks[pageBlocks.length - 1]?.pageNum || 1;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=pdfExtract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdfExtract.js","sourceRoot":"","sources":["../../src/lib/pdfExtract.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/store.d.ts
CHANGED
|
@@ -20,6 +20,9 @@ export interface MemoryFrontmatter {
|
|
|
20
20
|
superseded_by?: string | null;
|
|
21
21
|
reinforcement_count?: number;
|
|
22
22
|
last_reinforced?: string | null;
|
|
23
|
+
source_file?: string | null;
|
|
24
|
+
source_page?: string | null;
|
|
25
|
+
source_timerange?: string | null;
|
|
23
26
|
[key: string]: unknown;
|
|
24
27
|
}
|
|
25
28
|
export interface Memory {
|
package/dist/lib/store.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC;IACpC,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAQH,MAAM,WAAW,iBAAiB;IAChC,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC;IAC1C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,GAAG,IAAI,GAAG,UAAU,CAAC;IACpC,SAAS,EAAE,UAAU,GAAG,UAAU,GAAG,UAAU,GAAG,UAAU,CAAC;IAC7D,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,QAAQ,GAAG,UAAU,GAAG,YAAY,CAAC;IAC7C,UAAU,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAEhC,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,MAAM;IACrB,WAAW,EAAE,iBAAiB,CAAC;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB;AAsBD,qBAAa,WAAW;IACtB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,UAAU,CAAU;gBAEhB,SAAS,EAAE,MAAM;IAK7B,sEAAsE;IACtE,OAAO,CAAC,iBAAiB;IAQnB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAkB3B;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAkBzC;;OAEG;IACG,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAoB9D;;OAEG;IACG,WAAW,CACf,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,iBAAiB,EAC9B,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;QAAE,UAAU,CAAC,EAAE,OAAO,CAAA;KAAE,GACjC,OAAO,CAAC,MAAM,CAAC;IAsBlB;;OAEG;IACG,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIjD;;OAEG;IACG,YAAY,CAChB,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IA4BzB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAaxC;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAenD;;OAEG;IACH,YAAY,IAAI,MAAM;IAItB;;;;OAIG;YACW,UAAU;CAsBzB"}
|
package/dist/lib/store.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/lib/store.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,MAAM,MAAM,aAAa,CAAC;AACjC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAiC7C;;;;;GAKG;AACH,SAAS,WAAW,CAAC,IAAyC;IAC5D,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACrC,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACjD,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACzC,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YAC1B,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAAE,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,OAAO,WAAW;IACd,SAAS,CAAS;IAClB,UAAU,CAAU;IAE5B,YAAY,SAAiB;QAC3B,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACzC,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;IAC1B,CAAC;IAED,sEAAsE;IAC9D,iBAAiB,CAAC,QAAgB;QACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,aAAa,EAAE,CAAC;YACjF,MAAM,IAAI,KAAK,CAAC,2DAA2D,CAAC,CAAC;QAC/E,CAAC;IACH,CAAC;IAED,KAAK,CAAC,IAAI;QACR,gCAAgC;QAChC,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACpD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1E,0BAA0B;QAC1B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YACjD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;YACrD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;YACD,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC;YACP,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,cAAc;QAClB,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,EAAE;YAClC,GAAG,EAAE,IAAI,CAAC,SAAS;YACnB,MAAM,EAAE,CAAC,aAAa,EAAE,cAAc,EAAE,YAAY,EAAE,iBAAiB,CAAC;SACzE,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;gBAC3C,IAAI,MAAM;oBAAE,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACpC,CAAC;YAAC,MAAM,CAAC;gBACP,kCAAkC;YACpC,CAAC;QACH,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,YAAoB;QACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACjD,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC;YAE3B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBAAE,OAAO,IAAI,CAAC,CAAC,0BAA0B;YAE5D,OAAO;gBACL,WAAW,EAAE,MAAM,CAAC,IAAyB;gBAC7C,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE;gBAC9B,QAAQ,EAAE,QAAQ;gBAClB,YAAY;aACb,CAAC;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CACf,QAAgB,EAChB,QAAgB,EAChB,WAA8B,EAC9B,OAAe,EACf,OAAkC;QAElC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC1C,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAEnD,wEAAwE;QACxE,MAAM,YAAY,GAAG,EAAE,GAAG,WAAW,EAAE,IAAI,EAAE,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE,CAAC;QAC7E,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEnD,uCAAuC;QACvC,IAAI,OAAO,EAAE,UAAU,KAAK,KAAK,EAAE,CAAC;YAClC,MAAM,IAAI,CAAC,UAAU,CAAC,eAAe,WAAW,CAAC,KAAK,EAAE,CAAC,CAAC;QAC5D,CAAC;QAED,OAAO,YAAY,CAAC;IACtB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,WAAW,CAAC,OAAe;QAC/B,MAAM,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAChB,YAAoB,EACpB,OAAmC,EACnC,UAAmB;QAEnB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QACrD,IAAI,CAAC,QAAQ;YAAE,OAAO,IAAI,CAAC;QAE3B,MAAM,kBAAkB,GAAG;YACzB,GAAG,QAAQ,CAAC,WAAW;YACvB,GAAG,OAAO;YACV,QAAQ,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACjD,CAAC;QACF,MAAM,cAAc,GAAG,UAAU,IAAI,QAAQ,CAAC,OAAO,CAAC;QAEtD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QACjC,0CAA0C;QAC1C,MAAM,YAAY,GAAG,EAAE,GAAG,kBAAkB,EAAE,IAAI,EAAE,WAAW,CAAC,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3F,MAAM,WAAW,GAAG,MAAM,CAAC,SAAS,CAAC,cAAc,EAAE,YAAY,CAAC,CAAC;QACnE,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,CAAC,CAAC;QAEnD,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,kBAAkB,CAAC,KAAK,EAAE,CAAC,CAAC;QAEpE,OAAO;YACL,WAAW,EAAE,kBAAuC;YACpD,OAAO,EAAE,cAAc;YACvB,QAAQ,EAAE,QAAQ;YAClB,YAAY;SACb,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,aAAa;QACjB,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC1E,OAAO,OAAO;aACX,MAAM,CACL,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,WAAW,EAAE;YACf,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YACvB,CAAC,CAAC,IAAI,KAAK,cAAc,CAC5B;aACA,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;aAClB,IAAI,EAAE,CAAC;IACZ,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU,CAAC,QAAgB;QAC/B,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACxC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC7C,MAAM,WAAW,GAAG,QAAQ;aACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC;aAC5B,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;QAEzC,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YACjC,IAAI,KAAK;gBAAE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3D,CAAC;QACD,OAAO,GAAG,MAAM,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;IAC5D,CAAC;IAED;;OAEG;IACH,YAAY;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,UAAU,CAAC,OAAe;QACtC,IAAI,CAAC,IAAI,CAAC,UAAU;YAAE,OAAO;QAC7B,IAAI,CAAC;YACH,YAAY,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YAC3E,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,uBAAuB,CAAC,EAAE;gBACtE,GAAG,EAAE,IAAI,CAAC,SAAS;gBACnB,KAAK,EAAE,MAAM;aACd,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,gEAAgE;YAChE,MAAM,MAAM,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,QAAQ,CAAC,mBAAmB,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,CAAC;gBAChF,OAAO;YACT,CAAC;YACD,2CAA2C;YAC3C,IAAI,CAAC;gBACH,YAAY,CAAC,KAAK,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;YACjF,CAAC;YAAC,MAAM,CAAC;gBACP,iDAAiD;YACnD,CAAC;QACH,CAAC;IACH,CAAC;CACF"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Video Extraction — Extract audio from video files and transcribe.
|
|
3
|
+
*
|
|
4
|
+
* Requires ffmpeg to be installed on the system. Extracts audio to a temp WAV
|
|
5
|
+
* file, then delegates to audioExtract.ts for transcription.
|
|
6
|
+
*
|
|
7
|
+
* Part of v5.0 Phase 4: Multimodal Ingestion — Video support.
|
|
8
|
+
*/
|
|
9
|
+
import { type TranscriptSegment, type TranscriptionOptions } from "./audioExtract.js";
|
|
10
|
+
export interface VideoTranscriptResult {
|
|
11
|
+
segments: TranscriptSegment[];
|
|
12
|
+
fullText: string;
|
|
13
|
+
/** Total duration in seconds */
|
|
14
|
+
duration: number;
|
|
15
|
+
language?: string;
|
|
16
|
+
/** Temp audio file path (cleaned up after transcription) */
|
|
17
|
+
audioPath?: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Extract audio from a video file and transcribe it.
|
|
21
|
+
*
|
|
22
|
+
* Steps:
|
|
23
|
+
* 1. Check that ffmpeg is installed
|
|
24
|
+
* 2. Extract audio track to a temp WAV file
|
|
25
|
+
* 3. Transcribe the WAV file using audioExtract
|
|
26
|
+
* 4. Clean up the temp file
|
|
27
|
+
* 5. Return the transcript result
|
|
28
|
+
*/
|
|
29
|
+
export declare function transcribeVideo(filePath: string, options?: TranscriptionOptions): Promise<VideoTranscriptResult>;
|
|
30
|
+
//# sourceMappingURL=videoExtract.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoExtract.d.ts","sourceRoot":"","sources":["../../src/lib/videoExtract.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,EAEL,KAAK,iBAAiB,EAEtB,KAAK,oBAAoB,EAC1B,MAAM,mBAAmB,CAAC;AAI3B,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,iBAAiB,EAAE,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,gCAAgC;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,4DAA4D;IAC5D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AA8CD;;;;;;;;;GASG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,qBAAqB,CAAC,CA8BhC"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Gnosys Video Extraction — Extract audio from video files and transcribe.
|
|
3
|
+
*
|
|
4
|
+
* Requires ffmpeg to be installed on the system. Extracts audio to a temp WAV
|
|
5
|
+
* file, then delegates to audioExtract.ts for transcription.
|
|
6
|
+
*
|
|
7
|
+
* Part of v5.0 Phase 4: Multimodal Ingestion — Video support.
|
|
8
|
+
*/
|
|
9
|
+
import * as path from "path";
|
|
10
|
+
import * as os from "os";
|
|
11
|
+
import * as fs from "fs/promises";
|
|
12
|
+
import { execFileSync } from "child_process";
|
|
13
|
+
import { transcribeAudio, } from "./audioExtract.js";
|
|
14
|
+
// ─── Helpers ────────────────────────────────────────────────────────────
|
|
15
|
+
/**
|
|
16
|
+
* Check that ffmpeg is installed and accessible.
|
|
17
|
+
* Throws a clear error message if not found.
|
|
18
|
+
*/
|
|
19
|
+
function checkFfmpeg() {
|
|
20
|
+
try {
|
|
21
|
+
execFileSync("ffmpeg", ["-version"], { stdio: "ignore" });
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
throw new Error("Video transcription requires ffmpeg to be installed.\n" +
|
|
25
|
+
"Install it with:\n" +
|
|
26
|
+
" macOS: brew install ffmpeg\n" +
|
|
27
|
+
" Ubuntu: sudo apt install ffmpeg\n" +
|
|
28
|
+
" Windows: winget install FFmpeg");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Extract audio from a video file into a WAV file using ffmpeg.
|
|
33
|
+
*
|
|
34
|
+
* Uses PCM 16-bit, 16kHz mono — the format Whisper expects.
|
|
35
|
+
* Uses execFileSync (not execSync) to avoid shell injection since
|
|
36
|
+
* the file path comes from user input.
|
|
37
|
+
*/
|
|
38
|
+
function extractAudioTrack(videoPath, outputWav) {
|
|
39
|
+
execFileSync("ffmpeg", [
|
|
40
|
+
"-i", videoPath,
|
|
41
|
+
"-vn", // no video
|
|
42
|
+
"-acodec", "pcm_s16le", // PCM 16-bit little-endian
|
|
43
|
+
"-ar", "16000", // 16kHz sample rate
|
|
44
|
+
"-ac", "1", // mono
|
|
45
|
+
"-y", // overwrite output
|
|
46
|
+
outputWav,
|
|
47
|
+
], {
|
|
48
|
+
stdio: "ignore",
|
|
49
|
+
timeout: 300_000, // 5-minute timeout for large files
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
// ─── Public API ─────────────────────────────────────────────────────────
|
|
53
|
+
/**
|
|
54
|
+
* Extract audio from a video file and transcribe it.
|
|
55
|
+
*
|
|
56
|
+
* Steps:
|
|
57
|
+
* 1. Check that ffmpeg is installed
|
|
58
|
+
* 2. Extract audio track to a temp WAV file
|
|
59
|
+
* 3. Transcribe the WAV file using audioExtract
|
|
60
|
+
* 4. Clean up the temp file
|
|
61
|
+
* 5. Return the transcript result
|
|
62
|
+
*/
|
|
63
|
+
export async function transcribeVideo(filePath, options) {
|
|
64
|
+
// Step 1: Check for ffmpeg
|
|
65
|
+
checkFfmpeg();
|
|
66
|
+
// Step 2: Create a temp WAV file path
|
|
67
|
+
const tempWav = path.join(os.tmpdir(), `gnosys-audio-${Date.now()}.wav`);
|
|
68
|
+
try {
|
|
69
|
+
// Step 3: Extract audio from video
|
|
70
|
+
extractAudioTrack(filePath, tempWav);
|
|
71
|
+
// Step 4: Transcribe the extracted audio
|
|
72
|
+
const result = await transcribeAudio(tempWav, options);
|
|
73
|
+
// Step 5: Return the result
|
|
74
|
+
return {
|
|
75
|
+
segments: result.segments,
|
|
76
|
+
fullText: result.fullText,
|
|
77
|
+
duration: result.duration,
|
|
78
|
+
language: result.language,
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
finally {
|
|
82
|
+
// Step 6: Clean up temp file (always, even if transcription fails)
|
|
83
|
+
try {
|
|
84
|
+
await fs.unlink(tempWav);
|
|
85
|
+
}
|
|
86
|
+
catch {
|
|
87
|
+
// Ignore cleanup errors — the temp file may not exist if
|
|
88
|
+
// ffmpeg failed before creating it
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=videoExtract.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"videoExtract.js","sourceRoot":"","sources":["../../src/lib/videoExtract.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,EAAE,MAAM,aAAa,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EACL,eAAe,GAIhB,MAAM,mBAAmB,CAAC;AAc3B,2EAA2E;AAE3E;;;GAGG;AACH,SAAS,WAAW;IAClB,IAAI,CAAC;QACH,YAAY,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,wDAAwD;YACtD,oBAAoB;YACpB,kCAAkC;YAClC,sCAAsC;YACtC,kCAAkC,CACrC,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;;;;;GAMG;AACH,SAAS,iBAAiB,CAAC,SAAiB,EAAE,SAAiB;IAC7D,YAAY,CAAC,QAAQ,EAAE;QACrB,IAAI,EAAE,SAAS;QACf,KAAK,EAAmB,WAAW;QACnC,SAAS,EAAE,WAAW,EAAE,2BAA2B;QACnD,KAAK,EAAE,OAAO,EAAU,oBAAoB;QAC5C,KAAK,EAAE,GAAG,EAAc,OAAO;QAC/B,IAAI,EAAoB,mBAAmB;QAC3C,SAAS;KACV,EAAE;QACD,KAAK,EAAE,QAAQ;QACf,OAAO,EAAE,OAAO,EAAE,mCAAmC;KACtD,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAE3E;;;;;;;;;GASG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,QAAgB,EAChB,OAA8B;IAE9B,2BAA2B;IAC3B,WAAW,EAAE,CAAC;IAEd,sCAAsC;IACtC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IAEzE,IAAI,CAAC;QACH,mCAAmC;QACnC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAErC,yCAAyC;QACzC,MAAM,MAAM,GAAqB,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAEzE,4BAA4B;QAC5B,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ,EAAE,MAAM,CAAC,QAAQ;SAC1B,CAAC;IACJ,CAAC;YAAS,CAAC;QACT,mEAAmE;QACnE,IAAI,CAAC;YACH,MAAM,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;QAAC,MAAM,CAAC;YACP,yDAAyD;YACzD,mCAAmC;QACrC,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gnosys",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "5.0.0",
|
|
4
4
|
"description": "Gnosys — Persistent Memory for AI Agents. Sandbox-first runtime, central SQLite brain, federated search, Dream Mode, Web Knowledge Base, Obsidian export.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -37,6 +37,8 @@
|
|
|
37
37
|
"dotenv": "^17.3.1",
|
|
38
38
|
"glob": "^13.0.6",
|
|
39
39
|
"gray-matter": "^4.0.3",
|
|
40
|
+
"mammoth": "^1.12.0",
|
|
41
|
+
"pdf-parse": "^2.4.5",
|
|
40
42
|
"turndown": "^7.2.2",
|
|
41
43
|
"zod": "^4.3.6"
|
|
42
44
|
},
|