@virstack/doc-ingest 1.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.
Files changed (127) hide show
  1. package/README.md +203 -0
  2. package/dist/adapters/aiAdapters.d.ts +25 -0
  3. package/dist/adapters/aiAdapters.d.ts.map +1 -0
  4. package/dist/adapters/aiAdapters.js +73 -0
  5. package/dist/adapters/aiAdapters.js.map +1 -0
  6. package/dist/adapters/vectorStore.d.ts +24 -0
  7. package/dist/adapters/vectorStore.d.ts.map +1 -0
  8. package/dist/adapters/vectorStore.js +22 -0
  9. package/dist/adapters/vectorStore.js.map +1 -0
  10. package/dist/aiAdapters.d.ts +25 -0
  11. package/dist/aiAdapters.d.ts.map +1 -0
  12. package/dist/aiAdapters.js +50 -0
  13. package/dist/aiAdapters.js.map +1 -0
  14. package/dist/assets/logo.png +0 -0
  15. package/dist/batchPipeline.d.ts +52 -0
  16. package/dist/batchPipeline.d.ts.map +1 -0
  17. package/dist/batchPipeline.js +81 -0
  18. package/dist/batchPipeline.js.map +1 -0
  19. package/dist/cli.d.ts +3 -0
  20. package/dist/cli.d.ts.map +1 -0
  21. package/dist/cli.js +217 -0
  22. package/dist/cli.js.map +1 -0
  23. package/dist/config.d.ts +26 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +97 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/core/config.d.ts +26 -0
  28. package/dist/core/config.d.ts.map +1 -0
  29. package/dist/core/config.js +106 -0
  30. package/dist/core/config.js.map +1 -0
  31. package/dist/core/logger.d.ts +31 -0
  32. package/dist/core/logger.d.ts.map +1 -0
  33. package/dist/core/logger.js +42 -0
  34. package/dist/core/logger.js.map +1 -0
  35. package/dist/core/state.d.ts +52 -0
  36. package/dist/core/state.d.ts.map +1 -0
  37. package/dist/core/state.js +27 -0
  38. package/dist/core/state.js.map +1 -0
  39. package/dist/graphs/batchProcessor.d.ts +72 -0
  40. package/dist/graphs/batchProcessor.d.ts.map +1 -0
  41. package/dist/graphs/batchProcessor.js +94 -0
  42. package/dist/graphs/batchProcessor.js.map +1 -0
  43. package/dist/graphs/singleDocument.d.ts +303 -0
  44. package/dist/graphs/singleDocument.d.ts.map +1 -0
  45. package/dist/graphs/singleDocument.js +93 -0
  46. package/dist/graphs/singleDocument.js.map +1 -0
  47. package/dist/index.d.ts +8 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +10 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/logger.d.ts +24 -0
  52. package/dist/logger.d.ts.map +1 -0
  53. package/dist/logger.js +36 -0
  54. package/dist/logger.js.map +1 -0
  55. package/dist/logo.d.ts +2 -0
  56. package/dist/logo.d.ts.map +1 -0
  57. package/dist/logo.js +3 -0
  58. package/dist/logo.js.map +1 -0
  59. package/dist/nodes/fileTypeRouter.d.ts +16 -0
  60. package/dist/nodes/fileTypeRouter.d.ts.map +1 -0
  61. package/dist/nodes/fileTypeRouter.js +72 -0
  62. package/dist/nodes/fileTypeRouter.js.map +1 -0
  63. package/dist/nodes/geminiExtraction.d.ts +19 -0
  64. package/dist/nodes/geminiExtraction.d.ts.map +1 -0
  65. package/dist/nodes/geminiExtraction.js +87 -0
  66. package/dist/nodes/geminiExtraction.js.map +1 -0
  67. package/dist/nodes/libreOfficeToPdf.d.ts +8 -0
  68. package/dist/nodes/libreOfficeToPdf.d.ts.map +1 -0
  69. package/dist/nodes/libreOfficeToPdf.js +61 -0
  70. package/dist/nodes/libreOfficeToPdf.js.map +1 -0
  71. package/dist/nodes/llmExtractionNode.d.ts +19 -0
  72. package/dist/nodes/llmExtractionNode.d.ts.map +1 -0
  73. package/dist/nodes/llmExtractionNode.js +68 -0
  74. package/dist/nodes/llmExtractionNode.js.map +1 -0
  75. package/dist/nodes/markdownChunker.d.ts +8 -0
  76. package/dist/nodes/markdownChunker.d.ts.map +1 -0
  77. package/dist/nodes/markdownChunker.js +24 -0
  78. package/dist/nodes/markdownChunker.js.map +1 -0
  79. package/dist/nodes/markdownMerger.d.ts +9 -0
  80. package/dist/nodes/markdownMerger.d.ts.map +1 -0
  81. package/dist/nodes/markdownMerger.js +33 -0
  82. package/dist/nodes/markdownMerger.js.map +1 -0
  83. package/dist/nodes/markdownNormalizer.d.ts +10 -0
  84. package/dist/nodes/markdownNormalizer.d.ts.map +1 -0
  85. package/dist/nodes/markdownNormalizer.js +46 -0
  86. package/dist/nodes/markdownNormalizer.js.map +1 -0
  87. package/dist/nodes/openrouterEmbedder.d.ts +7 -0
  88. package/dist/nodes/openrouterEmbedder.d.ts.map +1 -0
  89. package/dist/nodes/openrouterEmbedder.js +31 -0
  90. package/dist/nodes/openrouterEmbedder.js.map +1 -0
  91. package/dist/nodes/pdfSplitter.d.ts +7 -0
  92. package/dist/nodes/pdfSplitter.d.ts.map +1 -0
  93. package/dist/nodes/pdfSplitter.js +41 -0
  94. package/dist/nodes/pdfSplitter.js.map +1 -0
  95. package/dist/nodes/saveMarkdown.d.ts +7 -0
  96. package/dist/nodes/saveMarkdown.d.ts.map +1 -0
  97. package/dist/nodes/saveMarkdown.js +28 -0
  98. package/dist/nodes/saveMarkdown.js.map +1 -0
  99. package/dist/nodes/textExtractorNode.d.ts +7 -0
  100. package/dist/nodes/textExtractorNode.d.ts.map +1 -0
  101. package/dist/nodes/textExtractorNode.js +39 -0
  102. package/dist/nodes/textExtractorNode.js.map +1 -0
  103. package/dist/nodes/upstashUpsert.d.ts +7 -0
  104. package/dist/nodes/upstashUpsert.d.ts.map +1 -0
  105. package/dist/nodes/upstashUpsert.js +45 -0
  106. package/dist/nodes/upstashUpsert.js.map +1 -0
  107. package/dist/nodes/vectorEmbedderNode.d.ts +7 -0
  108. package/dist/nodes/vectorEmbedderNode.d.ts.map +1 -0
  109. package/dist/nodes/vectorEmbedderNode.js +23 -0
  110. package/dist/nodes/vectorEmbedderNode.js.map +1 -0
  111. package/dist/nodes/vectorUpsertNode.d.ts +7 -0
  112. package/dist/nodes/vectorUpsertNode.d.ts.map +1 -0
  113. package/dist/nodes/vectorUpsertNode.js +45 -0
  114. package/dist/nodes/vectorUpsertNode.js.map +1 -0
  115. package/dist/pipeline.d.ts +303 -0
  116. package/dist/pipeline.d.ts.map +1 -0
  117. package/dist/pipeline.js +93 -0
  118. package/dist/pipeline.js.map +1 -0
  119. package/dist/state.d.ts +52 -0
  120. package/dist/state.d.ts.map +1 -0
  121. package/dist/state.js +27 -0
  122. package/dist/state.js.map +1 -0
  123. package/dist/vectorStore.d.ts +24 -0
  124. package/dist/vectorStore.d.ts.map +1 -0
  125. package/dist/vectorStore.js +22 -0
  126. package/dist/vectorStore.js.map +1 -0
  127. package/package.json +55 -0
package/dist/cli.js ADDED
@@ -0,0 +1,217 @@
1
+ #!/usr/bin/env node
2
+ import "dotenv/config";
3
+ import path from "node:path";
4
+ import fs from "node:fs/promises";
5
+ import { initializeConfig, getEnvConfig, pipelineConfig, } from "./core/config.js";
6
+ import { batchGraph } from "./index.js";
7
+ // UI Libraries
8
+ import { intro, outro, text, spinner, select, isCancel, cancel, log, } from "@clack/prompts";
9
+ import color from "picocolors";
10
+ import figlet from "figlet";
11
+ // Import the setLogger function
12
+ import { setLogger } from "./core/logger.js";
13
+ // Detect verbose flag
14
+ const isVerbose = process.argv.includes("--verbose");
15
+ // --- INJECT CLACK LOGGER ---
16
+ // This ensures that all internal pipeline logs are formatted beautifully
17
+ // and don't break the loading spinner!
18
+ setLogger({
19
+ info: (source, message) => {
20
+ if (isVerbose) {
21
+ log.message(`${color.cyan(`[${source}]`)} ${color.dim(message)}`);
22
+ }
23
+ },
24
+ success: (source, message) => {
25
+ if (isVerbose) {
26
+ log.message(`${color.green(`[${source}]`)} ${message}`);
27
+ }
28
+ },
29
+ warn: (source, message) => {
30
+ log.warn(`${color.yellow(`[${source}]`)} ${message}`);
31
+ },
32
+ error: (source, message, err) => {
33
+ log.error(`${color.red(`[${source}]`)} ${message} ${err ? String(err) : ""}`);
34
+ },
35
+ });
36
+ const SUPPORTED_EXTENSIONS = new Set([
37
+ ".pdf",
38
+ ".docx",
39
+ ".doc",
40
+ ".rtf",
41
+ ".odt",
42
+ ".epub",
43
+ ".pptx",
44
+ ".ppt",
45
+ ".odp",
46
+ ".xlsx",
47
+ ".xls",
48
+ ".csv",
49
+ ".txt",
50
+ ".html",
51
+ ]);
52
+ async function main() {
53
+ console.clear();
54
+ console.log(color.cyan(figlet.textSync("Virstack Doc Ingest", { horizontalLayout: "full" })));
55
+ intro(color.bgCyan(color.black(" Welcome to Virstack Doc Ingest ")));
56
+ // Improved argument parsing: Get the first non-flag argument as the path
57
+ let targetPath = process.argv.slice(2).find((arg) => !arg.startsWith("-"));
58
+ let filesToProcess = [];
59
+ let rawTexts = [];
60
+ if (targetPath) {
61
+ // Fast track for CLI arguments
62
+ const absolutePath = path.resolve(targetPath);
63
+ const stats = await fs.stat(absolutePath).catch(() => {
64
+ cancel(`Path not found: ${absolutePath}`);
65
+ process.exit(1);
66
+ });
67
+ if (stats.isDirectory()) {
68
+ const entries = await fs.readdir(absolutePath);
69
+ filesToProcess = entries
70
+ .filter((f) => SUPPORTED_EXTENSIONS.has(path.extname(f).toLowerCase()))
71
+ .map((f) => path.resolve(absolutePath, f));
72
+ }
73
+ else {
74
+ filesToProcess = [absolutePath];
75
+ }
76
+ }
77
+ else {
78
+ // Interactive Wizard
79
+ const mode = await select({
80
+ message: "What would you like to ingest?",
81
+ options: [
82
+ {
83
+ value: "files",
84
+ label: "📄 Documents",
85
+ hint: "File or Folder (PDF, DOCX, TXT, etc.)",
86
+ },
87
+ {
88
+ value: "text",
89
+ label: "✍️ Raw Text",
90
+ hint: "Paste text directly into the terminal",
91
+ },
92
+ ],
93
+ });
94
+ if (isCancel(mode)) {
95
+ cancel("Operation cancelled.");
96
+ process.exit(0);
97
+ }
98
+ if (mode === "files") {
99
+ const inputPath = await text({
100
+ message: "Enter the file or directory path:",
101
+ placeholder: "./documents/ or ./sample.pdf",
102
+ validate(value) {
103
+ if (!value || value.length === 0)
104
+ return "Path is required!";
105
+ },
106
+ });
107
+ if (isCancel(inputPath)) {
108
+ cancel("Operation cancelled.");
109
+ process.exit(0);
110
+ }
111
+ const absolutePath = path.resolve(inputPath);
112
+ const stats = await fs.stat(absolutePath).catch(() => {
113
+ cancel(`Path not found: ${absolutePath}`);
114
+ process.exit(1);
115
+ });
116
+ if (stats.isDirectory()) {
117
+ const entries = await fs.readdir(absolutePath);
118
+ filesToProcess = entries
119
+ .filter((f) => SUPPORTED_EXTENSIONS.has(path.extname(f).toLowerCase()))
120
+ .map((f) => path.resolve(absolutePath, f));
121
+ }
122
+ else {
123
+ filesToProcess = [absolutePath];
124
+ }
125
+ }
126
+ else {
127
+ // Raw Text Mode
128
+ const content = await text({
129
+ message: "Paste your raw text here:",
130
+ validate(value) {
131
+ if (!value || value.length === 0)
132
+ return "Content cannot be empty!";
133
+ },
134
+ });
135
+ if (isCancel(content)) {
136
+ cancel("Operation cancelled.");
137
+ process.exit(0);
138
+ }
139
+ const name = await text({
140
+ message: "Give this text a name:",
141
+ placeholder: "my-snippet",
142
+ validate(value) {
143
+ if (!value || value.length === 0)
144
+ return "Name is required!";
145
+ },
146
+ });
147
+ if (isCancel(name)) {
148
+ cancel("Operation cancelled.");
149
+ process.exit(0);
150
+ }
151
+ rawTexts = [{ content: content, name: name }];
152
+ }
153
+ }
154
+ try {
155
+ initializeConfig(getEnvConfig());
156
+ }
157
+ catch (error) {
158
+ cancel(`Initialization failed: ${error.message}`);
159
+ process.exit(1);
160
+ }
161
+ if (filesToProcess.length === 0 && rawTexts.length === 0) {
162
+ cancel(`No inputs found to process.`);
163
+ process.exit(1);
164
+ }
165
+ const totalInputs = filesToProcess.length + rawTexts.length;
166
+ const confirm = await select({
167
+ message: `Ready to process ${totalInputs} item(s)?`,
168
+ options: [
169
+ { value: true, label: "Yes, start ingestion" },
170
+ { value: false, label: "No, cancel" },
171
+ ],
172
+ });
173
+ if (isCancel(confirm) || !confirm) {
174
+ cancel("Operation cancelled by user.");
175
+ process.exit(0);
176
+ }
177
+ // Start the spinner!
178
+ const s = spinner();
179
+ s.start(`Processing ${totalInputs} item(s) with LangGraph...`);
180
+ const batchStart = Date.now();
181
+ try {
182
+ const batchResult = await batchGraph.invoke({
183
+ files: filesToProcess,
184
+ rawTexts: rawTexts,
185
+ }, { maxConcurrency: pipelineConfig.maxConcurrentFiles });
186
+ const totalElapsed = ((Date.now() - batchStart) / 1000).toFixed(1);
187
+ const results = batchResult.results;
188
+ // Stop the spinner successfully
189
+ s.stop(color.green(`✔ Processing complete in ${totalElapsed}s!`));
190
+ // Print Summary using Clack formatting
191
+ const succeeded = results.filter((r) => r.status === "success");
192
+ const failed = results.filter((r) => r.status === "error");
193
+ log.step(`${color.bold("Final Results:")} ${color.green(`${succeeded.length} succeeded`)}, ${color.red(`${failed.length} failed`)}`);
194
+ for (const r of results) {
195
+ const fileName = r.file.padEnd(35).slice(0, 35);
196
+ if (r.status === "success") {
197
+ log.message(` ${color.green("✔")} ${color.cyan(fileName)} │ ${r.chunks.toString().padStart(4)} chunks │ ${r.vectors.toString().padStart(4)} vectors │ ${r.durationSec}s`);
198
+ }
199
+ else {
200
+ log.message(` ${color.red("✖")} ${color.cyan(fileName)} │ ${color.red(r.error)}`);
201
+ }
202
+ }
203
+ outro(color.bgGreen(color.black(" Pipeline Finished Successfully! ")));
204
+ if (failed.length > 0)
205
+ process.exit(1);
206
+ }
207
+ catch (err) {
208
+ s.stop(color.red("✖ Pipeline crashed"));
209
+ cancel(err.message);
210
+ process.exit(1);
211
+ }
212
+ }
213
+ main().catch((err) => {
214
+ console.error(err);
215
+ process.exit(1);
216
+ });
217
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import pLimit from "p-limit";
2
+ import { type VectorStoreAdapter } from "./vectorStore.js";
3
+ import { type LlmAdapter, type EmbeddingAdapter } from "./aiAdapters.js";
4
+ export interface RagPipelineConfig {
5
+ openRouterApiKey?: string;
6
+ vectorStore: VectorStoreAdapter;
7
+ llm: LlmAdapter;
8
+ embedder: EmbeddingAdapter;
9
+ chunkSize?: number;
10
+ chunkOverlap?: number;
11
+ pdfPagesPerChunk?: number;
12
+ embeddingDimensions?: number;
13
+ maxConcurrentFiles?: number;
14
+ maxConcurrentApi?: number;
15
+ systemPrompt?: string;
16
+ maxTokens?: number;
17
+ }
18
+ export declare let pipelineConfig: Required<RagPipelineConfig>;
19
+ export declare let apiLimit: ReturnType<typeof pLimit>;
20
+ export declare function initializeConfig(config: RagPipelineConfig): void;
21
+ export declare function requireInit(): void;
22
+ /**
23
+ * Helper for CLI/Tools to get a RagPipelineConfig object from process.env
24
+ */
25
+ export declare function getEnvConfig(): RagPipelineConfig;
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAoD,MAAM,iBAAiB,CAAC;AAG3H,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,eAAO,IAAI,cAAc,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC;AAGvD,eAAO,IAAI,QAAQ,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAG/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,iBAAiB,QA+BzD;AAGD,wBAAgB,WAAW,SAM1B;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,iBAAiB,CAiDhD"}
package/dist/config.js ADDED
@@ -0,0 +1,97 @@
1
+ import pLimit from "p-limit";
2
+ import { UpstashAdapter } from "./vectorStore.js";
3
+ import { OpenRouterLlmAdapter, OpenRouterEmbeddingAdapter } from "./aiAdapters.js";
4
+ // 2. Hold the global settings
5
+ export let pipelineConfig;
6
+ // Global API rate limiter initialized lazily
7
+ export let apiLimit;
8
+ // 3. Create the initialization function
9
+ export function initializeConfig(config) {
10
+ // 1. Validate required parameters
11
+ const missing = [];
12
+ if (!config.vectorStore)
13
+ missing.push("vectorStore");
14
+ if (!config.llm)
15
+ missing.push("llm");
16
+ if (!config.embedder)
17
+ missing.push("embedder");
18
+ if (missing.length > 0) {
19
+ throw new Error(`RAG Pipeline initialization failed. Missing required adapters: ${missing.join(", ")}`);
20
+ }
21
+ // Apply defaults for optional numeric fields
22
+ pipelineConfig = {
23
+ openRouterApiKey: config.openRouterApiKey || "",
24
+ vectorStore: config.vectorStore,
25
+ llm: config.llm,
26
+ embedder: config.embedder,
27
+ chunkSize: config.chunkSize || 1000,
28
+ chunkOverlap: config.chunkOverlap || 100,
29
+ pdfPagesPerChunk: config.pdfPagesPerChunk || 10,
30
+ embeddingDimensions: config.embeddingDimensions || 1536,
31
+ maxConcurrentFiles: config.maxConcurrentFiles || 3,
32
+ maxConcurrentApi: config.maxConcurrentApi || 15,
33
+ systemPrompt: config.systemPrompt,
34
+ maxTokens: config.maxTokens || 16384,
35
+ };
36
+ // Global rate limiter initialized lazily
37
+ apiLimit = pLimit(pipelineConfig.maxConcurrentApi);
38
+ }
39
+ // Helper to ensure config is loaded before a node runs
40
+ export function requireInit() {
41
+ if (!pipelineConfig) {
42
+ throw new Error("RAG Pipeline not initialized. Call initializeConfig() first.");
43
+ }
44
+ }
45
+ /**
46
+ * Helper for CLI/Tools to get a RagPipelineConfig object from process.env
47
+ */
48
+ export function getEnvConfig() {
49
+ const apiKey = process.env.OPENROUTER_API_KEY;
50
+ const llmModel = process.env.LLM_MODEL;
51
+ const embedModel = process.env.EMBEDDING_MODEL;
52
+ const url = process.env.UPSTASH_VECTOR_URL;
53
+ const token = process.env.UPSTASH_VECTOR_TOKEN;
54
+ const dimensions = process.env.EMBEDDING_DIMENSIONS
55
+ ? parseInt(process.env.EMBEDDING_DIMENSIONS, 10)
56
+ : 1536;
57
+ // Validate required ENVs for CLI/Defaults
58
+ const missing = [];
59
+ if (!apiKey)
60
+ missing.push("OPENROUTER_API_KEY");
61
+ if (!llmModel)
62
+ missing.push("LLM_MODEL");
63
+ if (!embedModel)
64
+ missing.push("EMBEDDING_MODEL");
65
+ if (!url)
66
+ missing.push("UPSTASH_VECTOR_URL");
67
+ if (!token)
68
+ missing.push("UPSTASH_VECTOR_TOKEN");
69
+ if (missing.length > 0) {
70
+ throw new Error(`Missing required environment variables: ${missing.join(", ")}`);
71
+ }
72
+ const vectorStore = new UpstashAdapter(url, token);
73
+ return {
74
+ openRouterApiKey: apiKey,
75
+ vectorStore: vectorStore,
76
+ llm: new OpenRouterLlmAdapter(apiKey, llmModel),
77
+ embedder: new OpenRouterEmbeddingAdapter(apiKey, embedModel, dimensions),
78
+ embeddingDimensions: dimensions,
79
+ chunkSize: process.env.CHUNK_SIZE
80
+ ? parseInt(process.env.CHUNK_SIZE, 10)
81
+ : undefined,
82
+ chunkOverlap: process.env.CHUNK_OVERLAP
83
+ ? parseInt(process.env.CHUNK_OVERLAP, 10)
84
+ : undefined,
85
+ maxConcurrentFiles: process.env.MAX_CONCURRENT_FILES
86
+ ? parseInt(process.env.MAX_CONCURRENT_FILES, 10)
87
+ : undefined,
88
+ maxConcurrentApi: process.env.MAX_CONCURRENT_API_CALLS
89
+ ? parseInt(process.env.MAX_CONCURRENT_API_CALLS, 10)
90
+ : undefined,
91
+ systemPrompt: process.env.SYSTEM_PROMPT,
92
+ maxTokens: process.env.MAX_TOKENS
93
+ ? parseInt(process.env.MAX_TOKENS, 10)
94
+ : undefined,
95
+ };
96
+ }
97
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import pLimit from "p-limit";
2
+ import { type VectorStoreAdapter } from "../adapters/vectorStore.js";
3
+ import { type LlmAdapter, type EmbeddingAdapter } from "../adapters/aiAdapters.js";
4
+ export interface VirstackDocIngestConfig {
5
+ openRouterApiKey?: string;
6
+ vectorStore: VectorStoreAdapter;
7
+ llm: LlmAdapter;
8
+ embedder: EmbeddingAdapter;
9
+ chunkSize?: number;
10
+ chunkOverlap?: number;
11
+ pdfPagesPerChunk?: number;
12
+ embeddingDimensions?: number;
13
+ maxConcurrentFiles?: number;
14
+ maxConcurrentApi?: number;
15
+ systemPrompt?: string;
16
+ maxTokens?: number;
17
+ }
18
+ export declare let pipelineConfig: Required<VirstackDocIngestConfig>;
19
+ export declare let apiLimit: ReturnType<typeof pLimit>;
20
+ export declare function initializeConfig(config: VirstackDocIngestConfig): void;
21
+ export declare function requireInit(): void;
22
+ /**
23
+ * Helper for CLI/Tools to get a VirstackDocIngestConfig object from process.env
24
+ */
25
+ export declare function getEnvConfig(): VirstackDocIngestConfig;
26
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,SAAS,CAAC;AAC7B,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AACrF,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,gBAAgB,EAAoD,MAAM,2BAA2B,CAAC;AAGrI,MAAM,WAAW,uBAAuB;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,WAAW,EAAE,kBAAkB,CAAC;IAChC,GAAG,EAAE,UAAU,CAAC;IAChB,QAAQ,EAAE,gBAAgB,CAAC;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAGD,eAAO,IAAI,cAAc,EAAE,QAAQ,CAAC,uBAAuB,CAAoB,CAAC;AAGhF,eAAO,IAAI,QAAQ,EAAE,UAAU,CAAC,OAAO,MAAM,CAAC,CAAC;AAG/C,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,uBAAuB,QA+B/D;AAGD,wBAAgB,WAAW,SAM1B;AAED;;GAEG;AACH,wBAAgB,YAAY,IAAI,uBAAuB,CAiDtD"}
@@ -0,0 +1,106 @@
1
+ import pLimit from "p-limit";
2
+ import { UpstashAdapter } from "../adapters/vectorStore.js";
3
+ import { OpenRouterLlmAdapter, OpenRouterEmbeddingAdapter } from "../adapters/aiAdapters.js";
4
+ // 2. Hold the global settings
5
+ export let pipelineConfig = undefined;
6
+ // Global API rate limiter initialized lazily
7
+ export let apiLimit;
8
+ // 3. Create the initialization function
9
+ export function initializeConfig(config) {
10
+ // 1. Validate required parameters
11
+ const missing = [];
12
+ if (!config.vectorStore)
13
+ missing.push("vectorStore");
14
+ if (!config.llm)
15
+ missing.push("llm");
16
+ if (!config.embedder)
17
+ missing.push("embedder");
18
+ if (missing.length > 0) {
19
+ throw new Error(`Virstack Doc Ingest initialization failed. Missing required adapters: ${missing.join(", ")}`);
20
+ }
21
+ // Apply defaults for optional numeric fields
22
+ pipelineConfig = {
23
+ openRouterApiKey: config.openRouterApiKey || "",
24
+ vectorStore: config.vectorStore,
25
+ llm: config.llm,
26
+ embedder: config.embedder,
27
+ chunkSize: config.chunkSize || 1000,
28
+ chunkOverlap: config.chunkOverlap || 100,
29
+ pdfPagesPerChunk: config.pdfPagesPerChunk || 10,
30
+ embeddingDimensions: config.embeddingDimensions || 1536,
31
+ maxConcurrentFiles: config.maxConcurrentFiles || 3,
32
+ maxConcurrentApi: config.maxConcurrentApi || 15,
33
+ systemPrompt: config.systemPrompt,
34
+ maxTokens: config.maxTokens || 16384,
35
+ };
36
+ // Global rate limiter initialized lazily
37
+ apiLimit = pLimit(pipelineConfig.maxConcurrentApi);
38
+ }
39
+ // Helper to ensure config is loaded before a node runs
40
+ export function requireInit() {
41
+ if (!pipelineConfig) {
42
+ throw new Error("Virstack Doc Ingest not initialized. Call initializeConfig() first.");
43
+ }
44
+ }
45
+ /**
46
+ * Helper for CLI/Tools to get a VirstackDocIngestConfig object from process.env
47
+ */
48
+ export function getEnvConfig() {
49
+ const apiKey = process.env.OPENROUTER_API_KEY;
50
+ const llmModel = process.env.LLM_MODEL;
51
+ const embedModel = process.env.EMBEDDING_MODEL;
52
+ const url = process.env.UPSTASH_VECTOR_URL;
53
+ const token = process.env.UPSTASH_VECTOR_TOKEN;
54
+ const dimensions = process.env.EMBEDDING_DIMENSIONS
55
+ ? parseInt(process.env.EMBEDDING_DIMENSIONS, 10)
56
+ : 1536;
57
+ // Validate required ENVs for CLI/Defaults
58
+ const missing = [];
59
+ if (!apiKey)
60
+ missing.push("OPENROUTER_API_KEY");
61
+ if (!llmModel)
62
+ missing.push("LLM_MODEL");
63
+ if (!embedModel)
64
+ missing.push("EMBEDDING_MODEL");
65
+ if (!url)
66
+ missing.push("UPSTASH_VECTOR_URL");
67
+ if (!token)
68
+ missing.push("UPSTASH_VECTOR_TOKEN");
69
+ if (missing.length > 0) {
70
+ throw new Error(`Missing required environment variables: ${missing.join(", ")}`);
71
+ }
72
+ const vectorStore = new UpstashAdapter(url, token);
73
+ return {
74
+ openRouterApiKey: apiKey,
75
+ vectorStore: vectorStore,
76
+ llm: new OpenRouterLlmAdapter(apiKey, llmModel),
77
+ embedder: new OpenRouterEmbeddingAdapter(apiKey, embedModel, dimensions),
78
+ embeddingDimensions: dimensions,
79
+ chunkSize: process.env.CHUNK_SIZE
80
+ ? parseInt(process.env.CHUNK_SIZE, 10)
81
+ : undefined,
82
+ chunkOverlap: process.env.CHUNK_OVERLAP
83
+ ? parseInt(process.env.CHUNK_OVERLAP, 10)
84
+ : undefined,
85
+ maxConcurrentFiles: process.env.MAX_CONCURRENT_FILES
86
+ ? parseInt(process.env.MAX_CONCURRENT_FILES, 10)
87
+ : undefined,
88
+ maxConcurrentApi: process.env.MAX_CONCURRENT_API_CALLS
89
+ ? parseInt(process.env.MAX_CONCURRENT_API_CALLS, 10)
90
+ : undefined,
91
+ systemPrompt: process.env.SYSTEM_PROMPT,
92
+ maxTokens: process.env.MAX_TOKENS
93
+ ? parseInt(process.env.MAX_TOKENS, 10)
94
+ : undefined,
95
+ };
96
+ }
97
+ // Auto-initialize for LangGraph Studio if running directly via the CLI/Studio
98
+ if (typeof pipelineConfig === "undefined" && process.env.OPENROUTER_API_KEY) {
99
+ try {
100
+ initializeConfig(getEnvConfig());
101
+ }
102
+ catch (e) {
103
+ console.warn("Auto-initialization for LangGraph Studio failed. Missing ENVs.");
104
+ }
105
+ }
106
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ export declare const LogSource: {
2
+ readonly BATCH: "Batch Pipeline";
3
+ readonly CLI: "CLI";
4
+ readonly FILE_ROUTER: "File Router";
5
+ readonly LLM_EXTRACTION: "LLM Extraction";
6
+ readonly LIBRE_OFFICE: "LibreOffice to PDF";
7
+ readonly MARKDOWN_CHUNKER: "Markdown Chunker";
8
+ readonly MARKDOWN_MERGER: "Markdown Merger";
9
+ readonly MARKDOWN_NORMALIZER: "Markdown Normalizer";
10
+ readonly VECTOR_EMBEDDER: "Vector Embedder";
11
+ readonly PDF_SPLITTER: "PDF Splitter";
12
+ readonly PIPELINE: "Pipeline";
13
+ readonly SAVE_MARKDOWN: "Save Markdown";
14
+ readonly TEXT_EXTRACTOR: "Text Extractor";
15
+ readonly VECTOR_UPSERT: "Vector Upsert";
16
+ };
17
+ export type LogSourceType = (typeof LogSource)[keyof typeof LogSource];
18
+ export interface CustomLogger {
19
+ info: (source: LogSourceType, message: string) => void;
20
+ warn: (source: LogSourceType, message: string) => void;
21
+ error: (source: LogSourceType, message: string, error?: unknown) => void;
22
+ success: (source: LogSourceType, message: string) => void;
23
+ }
24
+ export declare function setLogger(loggerInstance: CustomLogger): void;
25
+ export declare const logger: {
26
+ info: (s: LogSourceType, m: string) => void;
27
+ warn: (s: LogSourceType, m: string) => void;
28
+ error: (s: LogSourceType, m: string, e?: unknown) => void;
29
+ success: (s: LogSourceType, m: string) => void;
30
+ };
31
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;;;;;;;;;;;;;CAeZ,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,OAAO,SAAS,CAAC,CAAC;AAGvE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,IAAI,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IACvD,KAAK,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,KAAK,IAAI,CAAC;IACzE,OAAO,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D;AAiBD,wBAAgB,SAAS,CAAC,cAAc,EAAE,YAAY,QAErD;AAGD,eAAO,MAAM,MAAM;cACP,aAAa,KAAK,MAAM;cACxB,aAAa,KAAK,MAAM;eACvB,aAAa,KAAK,MAAM,MAAM,OAAO;iBACnC,aAAa,KAAK,MAAM;CACtC,CAAC"}
@@ -0,0 +1,42 @@
1
+ export const LogSource = {
2
+ BATCH: "Batch Pipeline",
3
+ CLI: "CLI",
4
+ FILE_ROUTER: "File Router",
5
+ LLM_EXTRACTION: "LLM Extraction",
6
+ LIBRE_OFFICE: "LibreOffice to PDF",
7
+ MARKDOWN_CHUNKER: "Markdown Chunker",
8
+ MARKDOWN_MERGER: "Markdown Merger",
9
+ MARKDOWN_NORMALIZER: "Markdown Normalizer",
10
+ VECTOR_EMBEDDER: "Vector Embedder",
11
+ PDF_SPLITTER: "PDF Splitter",
12
+ PIPELINE: "Pipeline",
13
+ SAVE_MARKDOWN: "Save Markdown",
14
+ TEXT_EXTRACTOR: "Text Extractor",
15
+ VECTOR_UPSERT: "Vector Upsert",
16
+ };
17
+ // Default console implementation (used by default for Library consumers)
18
+ const defaultLogger = {
19
+ info: (source, message) => console.log(`[${source}] ${message}`),
20
+ warn: (source, message) => console.warn(`[${source}] ⚠️ ${message}`),
21
+ error: (source, message, error) => {
22
+ if (error !== undefined)
23
+ console.error(`[${source}] ❌ ${message}`, error);
24
+ else
25
+ console.error(`[${source}] ❌ ${message}`);
26
+ },
27
+ success: (source, message) => console.log(`[${source}] ✅ ${message}`),
28
+ };
29
+ // Store the active logger
30
+ let activeLogger = defaultLogger;
31
+ // Allow the CLI to inject its own logger (like @clack/prompts)
32
+ export function setLogger(loggerInstance) {
33
+ activeLogger = loggerInstance;
34
+ }
35
+ // The exported logger object that all your nodes will use
36
+ export const logger = {
37
+ info: (s, m) => activeLogger.info(s, m),
38
+ warn: (s, m) => activeLogger.warn(s, m),
39
+ error: (s, m, e) => activeLogger.error(s, m, e),
40
+ success: (s, m) => activeLogger.success(s, m),
41
+ };
42
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/core/logger.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,SAAS,GAAG;IACvB,KAAK,EAAE,gBAAgB;IACvB,GAAG,EAAE,KAAK;IACV,WAAW,EAAE,aAAa;IAC1B,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,oBAAoB;IAClC,gBAAgB,EAAE,kBAAkB;IACpC,eAAe,EAAE,iBAAiB;IAClC,mBAAmB,EAAE,qBAAqB;IAC1C,eAAe,EAAE,iBAAiB;IAClC,YAAY,EAAE,cAAc;IAC5B,QAAQ,EAAE,UAAU;IACpB,aAAa,EAAE,eAAe;IAC9B,cAAc,EAAE,gBAAgB;IAChC,aAAa,EAAE,eAAe;CACtB,CAAC;AAYX,yEAAyE;AACzE,MAAM,aAAa,GAAiB;IAClC,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;IAChE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,MAAM,QAAQ,OAAO,EAAE,CAAC;IACpE,KAAK,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAChC,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,OAAO,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;;YACrE,OAAO,CAAC,KAAK,CAAC,IAAI,MAAM,OAAO,OAAO,EAAE,CAAC,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,MAAM,OAAO,OAAO,EAAE,CAAC;CACtE,CAAC;AAEF,0BAA0B;AAC1B,IAAI,YAAY,GAAiB,aAAa,CAAC;AAE/C,+DAA+D;AAC/D,MAAM,UAAU,SAAS,CAAC,cAA4B;IACpD,YAAY,GAAG,cAAc,CAAC;AAChC,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,MAAM,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,CAAgB,EAAE,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,IAAI,EAAE,CAAC,CAAgB,EAAE,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC;IAC9D,KAAK,EAAE,CAAC,CAAgB,EAAE,CAAS,EAAE,CAAW,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IAChF,OAAO,EAAE,CAAC,CAAgB,EAAE,CAAS,EAAE,EAAE,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC;CACrE,CAAC"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * LangGraph pipeline state definition.
3
+ * Every node reads from and writes to this shared state.
4
+ */
5
+ export declare const PipelineStateAnnotation: import("@langchain/langgraph").AnnotationRoot<{
6
+ /** Absolute path to the input file (optional if rawText is provided) */
7
+ filePath: {
8
+ (): import("@langchain/langgraph").LastValue<string | undefined>;
9
+ (annotation: import("@langchain/langgraph").SingleReducer<string | undefined, string | undefined>): import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
10
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
11
+ };
12
+ /** Detected MIME type of the input file (optional if rawText is provided) */
13
+ mimeType: {
14
+ (): import("@langchain/langgraph").LastValue<string | undefined>;
15
+ (annotation: import("@langchain/langgraph").SingleReducer<string | undefined, string | undefined>): import("@langchain/langgraph").BinaryOperatorAggregate<string | undefined, string | undefined>;
16
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
17
+ };
18
+ /** Extracted raw text (office / text branch) */
19
+ rawText: {
20
+ (): import("@langchain/langgraph").LastValue<string>;
21
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
22
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
23
+ };
24
+ /** 10-page PDF chunk buffers (base64 strings, PDF branch) */
25
+ pdfChunks: {
26
+ (): import("@langchain/langgraph").LastValue<string[]>;
27
+ (annotation: import("@langchain/langgraph").SingleReducer<string[], string[]>): import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
28
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
29
+ };
30
+ /** Per-chunk markdown outputs from Gemini (PDF branch) */
31
+ markdownParts: import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
32
+ /** Final merged / extracted markdown (both branches converge here) */
33
+ markdown: {
34
+ (): import("@langchain/langgraph").LastValue<string>;
35
+ (annotation: import("@langchain/langgraph").SingleReducer<string, string>): import("@langchain/langgraph").BinaryOperatorAggregate<string, string>;
36
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
37
+ };
38
+ /** Semantic text chunks after splitting */
39
+ textChunks: {
40
+ (): import("@langchain/langgraph").LastValue<string[]>;
41
+ (annotation: import("@langchain/langgraph").SingleReducer<string[], string[]>): import("@langchain/langgraph").BinaryOperatorAggregate<string[], string[]>;
42
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
43
+ };
44
+ /** OpenAI embedding vectors, one per text chunk */
45
+ vectors: {
46
+ (): import("@langchain/langgraph").LastValue<number[][]>;
47
+ (annotation: import("@langchain/langgraph").SingleReducer<number[][], number[][]>): import("@langchain/langgraph").BinaryOperatorAggregate<number[][], number[][]>;
48
+ Root: <S extends import("@langchain/langgraph").StateDefinition>(sd: S) => import("@langchain/langgraph").AnnotationRoot<S>;
49
+ };
50
+ }>;
51
+ export type PipelineState = typeof PipelineStateAnnotation.State;
52
+ //# sourceMappingURL=state.d.ts.map