@fllf/agent-sdk 0.1.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 (326) hide show
  1. package/README.md +240 -0
  2. package/dist/agent/Agent.d.ts +34 -0
  3. package/dist/agent/Agent.d.ts.map +1 -0
  4. package/dist/agent/Agent.js +168 -0
  5. package/dist/agent/Agent.js.map +1 -0
  6. package/dist/agent/createAgent.d.ts +4 -0
  7. package/dist/agent/createAgent.d.ts.map +1 -0
  8. package/dist/agent/createAgent.js +8 -0
  9. package/dist/agent/createAgent.js.map +1 -0
  10. package/dist/agent/index.d.ts +4 -0
  11. package/dist/agent/index.d.ts.map +1 -0
  12. package/dist/agent/index.js +8 -0
  13. package/dist/agent/index.js.map +1 -0
  14. package/dist/agent/types.d.ts +23 -0
  15. package/dist/agent/types.d.ts.map +1 -0
  16. package/dist/agent/types.js +3 -0
  17. package/dist/agent/types.js.map +1 -0
  18. package/dist/config/config.d.ts +35 -0
  19. package/dist/config/config.d.ts.map +1 -0
  20. package/dist/config/config.js +123 -0
  21. package/dist/config/config.js.map +1 -0
  22. package/dist/config/index.d.ts +3 -0
  23. package/dist/config/index.d.ts.map +1 -0
  24. package/dist/config/index.js +6 -0
  25. package/dist/config/index.js.map +1 -0
  26. package/dist/executors/base.d.ts +44 -0
  27. package/dist/executors/base.d.ts.map +1 -0
  28. package/dist/executors/base.js +3 -0
  29. package/dist/executors/base.js.map +1 -0
  30. package/dist/executors/index.d.ts +7 -0
  31. package/dist/executors/index.d.ts.map +1 -0
  32. package/dist/executors/index.js +10 -0
  33. package/dist/executors/index.js.map +1 -0
  34. package/dist/executors/rag-executor.d.ts +16 -0
  35. package/dist/executors/rag-executor.d.ts.map +1 -0
  36. package/dist/executors/rag-executor.js +120 -0
  37. package/dist/executors/rag-executor.js.map +1 -0
  38. package/dist/executors/simple-chat-executor.d.ts +5 -0
  39. package/dist/executors/simple-chat-executor.d.ts.map +1 -0
  40. package/dist/executors/simple-chat-executor.js +77 -0
  41. package/dist/executors/simple-chat-executor.js.map +1 -0
  42. package/dist/executors/tool-calling-executor.d.ts +10 -0
  43. package/dist/executors/tool-calling-executor.d.ts.map +1 -0
  44. package/dist/executors/tool-calling-executor.js +151 -0
  45. package/dist/executors/tool-calling-executor.js.map +1 -0
  46. package/dist/history/base.d.ts +16 -0
  47. package/dist/history/base.d.ts.map +1 -0
  48. package/dist/history/base.js +10 -0
  49. package/dist/history/base.js.map +1 -0
  50. package/dist/history/in-memory.d.ts +26 -0
  51. package/dist/history/in-memory.d.ts.map +1 -0
  52. package/dist/history/in-memory.js +88 -0
  53. package/dist/history/in-memory.js.map +1 -0
  54. package/dist/history/index.d.ts +5 -0
  55. package/dist/history/index.d.ts.map +1 -0
  56. package/dist/history/index.js +10 -0
  57. package/dist/history/index.js.map +1 -0
  58. package/dist/index.d.ts +10 -0
  59. package/dist/index.d.ts.map +1 -0
  60. package/dist/index.js +26 -0
  61. package/dist/index.js.map +1 -0
  62. package/dist/llm/LLM.d.ts +23 -0
  63. package/dist/llm/LLM.d.ts.map +1 -0
  64. package/dist/llm/LLM.js +404 -0
  65. package/dist/llm/LLM.js.map +1 -0
  66. package/dist/llm/errors.d.ts +43 -0
  67. package/dist/llm/errors.d.ts.map +1 -0
  68. package/dist/llm/errors.js +128 -0
  69. package/dist/llm/errors.js.map +1 -0
  70. package/dist/llm/factory.d.ts +9 -0
  71. package/dist/llm/factory.d.ts.map +1 -0
  72. package/dist/llm/factory.js +28 -0
  73. package/dist/llm/factory.js.map +1 -0
  74. package/dist/llm/index.d.ts +6 -0
  75. package/dist/llm/index.d.ts.map +1 -0
  76. package/dist/llm/index.js +18 -0
  77. package/dist/llm/index.js.map +1 -0
  78. package/dist/llm/providers/base.d.ts +3 -0
  79. package/dist/llm/providers/base.d.ts.map +1 -0
  80. package/dist/llm/providers/base.js +3 -0
  81. package/dist/llm/providers/base.js.map +1 -0
  82. package/dist/llm/providers/local.d.ts +6 -0
  83. package/dist/llm/providers/local.d.ts.map +1 -0
  84. package/dist/llm/providers/local.js +19 -0
  85. package/dist/llm/providers/local.js.map +1 -0
  86. package/dist/llm/providers/openai-compatible.d.ts +13 -0
  87. package/dist/llm/providers/openai-compatible.d.ts.map +1 -0
  88. package/dist/llm/providers/openai-compatible.js +176 -0
  89. package/dist/llm/providers/openai-compatible.js.map +1 -0
  90. package/dist/llm/providers/openai.d.ts +6 -0
  91. package/dist/llm/providers/openai.d.ts.map +1 -0
  92. package/dist/llm/providers/openai.js +23 -0
  93. package/dist/llm/providers/openai.js.map +1 -0
  94. package/dist/llm/types.d.ts +116 -0
  95. package/dist/llm/types.d.ts.map +1 -0
  96. package/dist/llm/types.js +3 -0
  97. package/dist/llm/types.js.map +1 -0
  98. package/dist/messages/index.d.ts +3 -0
  99. package/dist/messages/index.d.ts.map +1 -0
  100. package/dist/messages/index.js +6 -0
  101. package/dist/messages/index.js.map +1 -0
  102. package/dist/messages/message.d.ts +25 -0
  103. package/dist/messages/message.d.ts.map +1 -0
  104. package/dist/messages/message.js +110 -0
  105. package/dist/messages/message.js.map +1 -0
  106. package/dist/messages/types.d.ts +20 -0
  107. package/dist/messages/types.d.ts.map +1 -0
  108. package/dist/messages/types.js +3 -0
  109. package/dist/messages/types.js.map +1 -0
  110. package/dist/observability/console-observer.d.ts +10 -0
  111. package/dist/observability/console-observer.d.ts.map +1 -0
  112. package/dist/observability/console-observer.js +28 -0
  113. package/dist/observability/console-observer.js.map +1 -0
  114. package/dist/observability/index.d.ts +5 -0
  115. package/dist/observability/index.d.ts.map +1 -0
  116. package/dist/observability/index.js +11 -0
  117. package/dist/observability/index.js.map +1 -0
  118. package/dist/observability/observer.d.ts +8 -0
  119. package/dist/observability/observer.d.ts.map +1 -0
  120. package/dist/observability/observer.js +46 -0
  121. package/dist/observability/observer.js.map +1 -0
  122. package/dist/observability/types.d.ts +34 -0
  123. package/dist/observability/types.d.ts.map +1 -0
  124. package/dist/observability/types.js +3 -0
  125. package/dist/observability/types.js.map +1 -0
  126. package/dist/rag/chunking/auto-chunker.d.ts +25 -0
  127. package/dist/rag/chunking/auto-chunker.d.ts.map +1 -0
  128. package/dist/rag/chunking/auto-chunker.js +101 -0
  129. package/dist/rag/chunking/auto-chunker.js.map +1 -0
  130. package/dist/rag/chunking/chunker.d.ts +44 -0
  131. package/dist/rag/chunking/chunker.d.ts.map +1 -0
  132. package/dist/rag/chunking/chunker.js +162 -0
  133. package/dist/rag/chunking/chunker.js.map +1 -0
  134. package/dist/rag/chunking/index.d.ts +6 -0
  135. package/dist/rag/chunking/index.d.ts.map +1 -0
  136. package/dist/rag/chunking/index.js +22 -0
  137. package/dist/rag/chunking/index.js.map +1 -0
  138. package/dist/rag/chunking/markdown-chunker.d.ts +13 -0
  139. package/dist/rag/chunking/markdown-chunker.d.ts.map +1 -0
  140. package/dist/rag/chunking/markdown-chunker.js +144 -0
  141. package/dist/rag/chunking/markdown-chunker.js.map +1 -0
  142. package/dist/rag/chunking/parent-child.d.ts +16 -0
  143. package/dist/rag/chunking/parent-child.d.ts.map +1 -0
  144. package/dist/rag/chunking/parent-child.js +76 -0
  145. package/dist/rag/chunking/parent-child.js.map +1 -0
  146. package/dist/rag/chunking/recursive-chunker.d.ts +11 -0
  147. package/dist/rag/chunking/recursive-chunker.d.ts.map +1 -0
  148. package/dist/rag/chunking/recursive-chunker.js +27 -0
  149. package/dist/rag/chunking/recursive-chunker.js.map +1 -0
  150. package/dist/rag/embeddings/embedder.d.ts +24 -0
  151. package/dist/rag/embeddings/embedder.d.ts.map +1 -0
  152. package/dist/rag/embeddings/embedder.js +73 -0
  153. package/dist/rag/embeddings/embedder.js.map +1 -0
  154. package/dist/rag/embeddings/embedding-cache.d.ts +40 -0
  155. package/dist/rag/embeddings/embedding-cache.d.ts.map +1 -0
  156. package/dist/rag/embeddings/embedding-cache.js +118 -0
  157. package/dist/rag/embeddings/embedding-cache.js.map +1 -0
  158. package/dist/rag/embeddings/fake-embedder.d.ts +20 -0
  159. package/dist/rag/embeddings/fake-embedder.d.ts.map +1 -0
  160. package/dist/rag/embeddings/fake-embedder.js +55 -0
  161. package/dist/rag/embeddings/fake-embedder.js.map +1 -0
  162. package/dist/rag/embeddings/index.d.ts +5 -0
  163. package/dist/rag/embeddings/index.d.ts.map +1 -0
  164. package/dist/rag/embeddings/index.js +21 -0
  165. package/dist/rag/embeddings/index.js.map +1 -0
  166. package/dist/rag/embeddings/openai-compatible-embedder.d.ts +46 -0
  167. package/dist/rag/embeddings/openai-compatible-embedder.d.ts.map +1 -0
  168. package/dist/rag/embeddings/openai-compatible-embedder.js +145 -0
  169. package/dist/rag/embeddings/openai-compatible-embedder.js.map +1 -0
  170. package/dist/rag/generation/context-builder.d.ts +22 -0
  171. package/dist/rag/generation/context-builder.d.ts.map +1 -0
  172. package/dist/rag/generation/context-builder.js +166 -0
  173. package/dist/rag/generation/context-builder.js.map +1 -0
  174. package/dist/rag/generation/generator.d.ts +25 -0
  175. package/dist/rag/generation/generator.d.ts.map +1 -0
  176. package/dist/rag/generation/generator.js +185 -0
  177. package/dist/rag/generation/generator.js.map +1 -0
  178. package/dist/rag/generation/index.d.ts +4 -0
  179. package/dist/rag/generation/index.d.ts.map +1 -0
  180. package/dist/rag/generation/index.js +20 -0
  181. package/dist/rag/generation/index.js.map +1 -0
  182. package/dist/rag/generation/verifier.d.ts +13 -0
  183. package/dist/rag/generation/verifier.d.ts.map +1 -0
  184. package/dist/rag/generation/verifier.js +43 -0
  185. package/dist/rag/generation/verifier.js.map +1 -0
  186. package/dist/rag/index.d.ts +9 -0
  187. package/dist/rag/index.d.ts.map +1 -0
  188. package/dist/rag/index.js +25 -0
  189. package/dist/rag/index.js.map +1 -0
  190. package/dist/rag/ingestion/index.d.ts +4 -0
  191. package/dist/rag/ingestion/index.d.ts.map +1 -0
  192. package/dist/rag/ingestion/index.js +20 -0
  193. package/dist/rag/ingestion/index.js.map +1 -0
  194. package/dist/rag/ingestion/loaders.d.ts +69 -0
  195. package/dist/rag/ingestion/loaders.d.ts.map +1 -0
  196. package/dist/rag/ingestion/loaders.js +653 -0
  197. package/dist/rag/ingestion/loaders.js.map +1 -0
  198. package/dist/rag/ingestion/metadata.d.ts +31 -0
  199. package/dist/rag/ingestion/metadata.d.ts.map +1 -0
  200. package/dist/rag/ingestion/metadata.js +81 -0
  201. package/dist/rag/ingestion/metadata.js.map +1 -0
  202. package/dist/rag/ingestion/normalizer.d.ts +20 -0
  203. package/dist/rag/ingestion/normalizer.d.ts.map +1 -0
  204. package/dist/rag/ingestion/normalizer.js +161 -0
  205. package/dist/rag/ingestion/normalizer.js.map +1 -0
  206. package/dist/rag/pipeline.d.ts +62 -0
  207. package/dist/rag/pipeline.d.ts.map +1 -0
  208. package/dist/rag/pipeline.js +75 -0
  209. package/dist/rag/pipeline.js.map +1 -0
  210. package/dist/rag/retrieval/dense-retriever.d.ts +17 -0
  211. package/dist/rag/retrieval/dense-retriever.d.ts.map +1 -0
  212. package/dist/rag/retrieval/dense-retriever.js +21 -0
  213. package/dist/rag/retrieval/dense-retriever.js.map +1 -0
  214. package/dist/rag/retrieval/fusion.d.ts +12 -0
  215. package/dist/rag/retrieval/fusion.d.ts.map +1 -0
  216. package/dist/rag/retrieval/fusion.js +54 -0
  217. package/dist/rag/retrieval/fusion.js.map +1 -0
  218. package/dist/rag/retrieval/http-rerank-model-client.d.ts +41 -0
  219. package/dist/rag/retrieval/http-rerank-model-client.d.ts.map +1 -0
  220. package/dist/rag/retrieval/http-rerank-model-client.js +130 -0
  221. package/dist/rag/retrieval/http-rerank-model-client.js.map +1 -0
  222. package/dist/rag/retrieval/hybrid-retriever.d.ts +22 -0
  223. package/dist/rag/retrieval/hybrid-retriever.d.ts.map +1 -0
  224. package/dist/rag/retrieval/hybrid-retriever.js +49 -0
  225. package/dist/rag/retrieval/hybrid-retriever.js.map +1 -0
  226. package/dist/rag/retrieval/index.d.ts +8 -0
  227. package/dist/rag/retrieval/index.d.ts.map +1 -0
  228. package/dist/rag/retrieval/index.js +24 -0
  229. package/dist/rag/retrieval/index.js.map +1 -0
  230. package/dist/rag/retrieval/reranker.d.ts +30 -0
  231. package/dist/rag/retrieval/reranker.d.ts.map +1 -0
  232. package/dist/rag/retrieval/reranker.js +85 -0
  233. package/dist/rag/retrieval/reranker.js.map +1 -0
  234. package/dist/rag/retrieval/sparse-retriever.d.ts +14 -0
  235. package/dist/rag/retrieval/sparse-retriever.d.ts.map +1 -0
  236. package/dist/rag/retrieval/sparse-retriever.js +18 -0
  237. package/dist/rag/retrieval/sparse-retriever.js.map +1 -0
  238. package/dist/rag/retrieval/types.d.ts +11 -0
  239. package/dist/rag/retrieval/types.d.ts.map +1 -0
  240. package/dist/rag/retrieval/types.js +10 -0
  241. package/dist/rag/retrieval/types.js.map +1 -0
  242. package/dist/rag/retrieval/utils.d.ts +8 -0
  243. package/dist/rag/retrieval/utils.d.ts.map +1 -0
  244. package/dist/rag/retrieval/utils.js +114 -0
  245. package/dist/rag/retrieval/utils.js.map +1 -0
  246. package/dist/rag/stores/in-memory-document-store.d.ts +14 -0
  247. package/dist/rag/stores/in-memory-document-store.d.ts.map +1 -0
  248. package/dist/rag/stores/in-memory-document-store.js +64 -0
  249. package/dist/rag/stores/in-memory-document-store.js.map +1 -0
  250. package/dist/rag/stores/in-memory-keyword-store.d.ts +10 -0
  251. package/dist/rag/stores/in-memory-keyword-store.d.ts.map +1 -0
  252. package/dist/rag/stores/in-memory-keyword-store.js +99 -0
  253. package/dist/rag/stores/in-memory-keyword-store.js.map +1 -0
  254. package/dist/rag/stores/in-memory-vector-store.d.ts +14 -0
  255. package/dist/rag/stores/in-memory-vector-store.d.ts.map +1 -0
  256. package/dist/rag/stores/in-memory-vector-store.js +61 -0
  257. package/dist/rag/stores/in-memory-vector-store.js.map +1 -0
  258. package/dist/rag/stores/index.d.ts +6 -0
  259. package/dist/rag/stores/index.d.ts.map +1 -0
  260. package/dist/rag/stores/index.js +22 -0
  261. package/dist/rag/stores/index.js.map +1 -0
  262. package/dist/rag/stores/postgres/index.d.ts +6 -0
  263. package/dist/rag/stores/postgres/index.d.ts.map +1 -0
  264. package/dist/rag/stores/postgres/index.js +22 -0
  265. package/dist/rag/stores/postgres/index.js.map +1 -0
  266. package/dist/rag/stores/postgres/pg-vector-store.d.ts +16 -0
  267. package/dist/rag/stores/postgres/pg-vector-store.d.ts.map +1 -0
  268. package/dist/rag/stores/postgres/pg-vector-store.js +77 -0
  269. package/dist/rag/stores/postgres/pg-vector-store.js.map +1 -0
  270. package/dist/rag/stores/postgres/postgres-document-store.d.ts +15 -0
  271. package/dist/rag/stores/postgres/postgres-document-store.d.ts.map +1 -0
  272. package/dist/rag/stores/postgres/postgres-document-store.js +174 -0
  273. package/dist/rag/stores/postgres/postgres-document-store.js.map +1 -0
  274. package/dist/rag/stores/postgres/postgres-keyword-store.d.ts +15 -0
  275. package/dist/rag/stores/postgres/postgres-keyword-store.d.ts.map +1 -0
  276. package/dist/rag/stores/postgres/postgres-keyword-store.js +163 -0
  277. package/dist/rag/stores/postgres/postgres-keyword-store.js.map +1 -0
  278. package/dist/rag/stores/postgres/schema.d.ts +8 -0
  279. package/dist/rag/stores/postgres/schema.d.ts.map +1 -0
  280. package/dist/rag/stores/postgres/schema.js +91 -0
  281. package/dist/rag/stores/postgres/schema.js.map +1 -0
  282. package/dist/rag/stores/postgres/sql.d.ts +23 -0
  283. package/dist/rag/stores/postgres/sql.d.ts.map +1 -0
  284. package/dist/rag/stores/postgres/sql.js +177 -0
  285. package/dist/rag/stores/postgres/sql.js.map +1 -0
  286. package/dist/rag/stores/postgres/types.d.ts +17 -0
  287. package/dist/rag/stores/postgres/types.d.ts.map +1 -0
  288. package/dist/rag/stores/postgres/types.js +3 -0
  289. package/dist/rag/stores/postgres/types.js.map +1 -0
  290. package/dist/rag/stores/types.d.ts +36 -0
  291. package/dist/rag/stores/types.d.ts.map +1 -0
  292. package/dist/rag/stores/types.js +3 -0
  293. package/dist/rag/stores/types.js.map +1 -0
  294. package/dist/rag/stores/utils.d.ts +11 -0
  295. package/dist/rag/stores/utils.d.ts.map +1 -0
  296. package/dist/rag/stores/utils.js +200 -0
  297. package/dist/rag/stores/utils.js.map +1 -0
  298. package/dist/rag/types.d.ts +174 -0
  299. package/dist/rag/types.d.ts.map +1 -0
  300. package/dist/rag/types.js +3 -0
  301. package/dist/rag/types.js.map +1 -0
  302. package/dist/tools/base.d.ts +28 -0
  303. package/dist/tools/base.d.ts.map +1 -0
  304. package/dist/tools/base.js +68 -0
  305. package/dist/tools/base.js.map +1 -0
  306. package/dist/tools/builtin/advancedSearchTool.d.ts +24 -0
  307. package/dist/tools/builtin/advancedSearchTool.d.ts.map +1 -0
  308. package/dist/tools/builtin/advancedSearchTool.js +134 -0
  309. package/dist/tools/builtin/advancedSearchTool.js.map +1 -0
  310. package/dist/tools/builtin/ragSearchTool.d.ts +29 -0
  311. package/dist/tools/builtin/ragSearchTool.d.ts.map +1 -0
  312. package/dist/tools/builtin/ragSearchTool.js +91 -0
  313. package/dist/tools/builtin/ragSearchTool.js.map +1 -0
  314. package/dist/tools/executor.d.ts +10 -0
  315. package/dist/tools/executor.d.ts.map +1 -0
  316. package/dist/tools/executor.js +86 -0
  317. package/dist/tools/executor.js.map +1 -0
  318. package/dist/tools/index.d.ts +9 -0
  319. package/dist/tools/index.d.ts.map +1 -0
  320. package/dist/tools/index.js +16 -0
  321. package/dist/tools/index.js.map +1 -0
  322. package/dist/tools/registry.d.ts +16 -0
  323. package/dist/tools/registry.d.ts.map +1 -0
  324. package/dist/tools/registry.js +35 -0
  325. package/dist/tools/registry.js.map +1 -0
  326. package/package.json +43 -0
@@ -0,0 +1,653 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AutoDocumentLoader = exports.PdfToMarkdownLoader = exports.DocxToMarkdownLoader = exports.HtmlToMarkdownLoader = exports.MarkdownLoader = exports.PlainTextLoader = void 0;
4
+ exports.createDefaultAutoDocumentLoaderRules = createDefaultAutoDocumentLoaderRules;
5
+ const metadata_1 = require("./metadata");
6
+ class PlainTextLoader {
7
+ metadataResolver;
8
+ defaultSource;
9
+ constructor(options = {}) {
10
+ this.metadataResolver = options.metadataResolver ?? new metadata_1.DefaultMetadataResolver();
11
+ this.defaultSource = options.defaultSource ?? 'inline';
12
+ }
13
+ async load(input) {
14
+ if (input.documents !== undefined) {
15
+ return input.documents.map(cloneRawDocument);
16
+ }
17
+ const content = requireInlineContent(input, 'PlainTextLoader');
18
+ const metadataInput = createMetadataInput({
19
+ content,
20
+ source: input.source ?? this.defaultSource,
21
+ metadata: withDefaultMimeType(input.metadata, 'text/plain'),
22
+ tenantId: input.tenantId,
23
+ knowledgeBaseId: input.knowledgeBaseId,
24
+ acl: input.acl,
25
+ });
26
+ const { id, metadata } = this.metadataResolver.resolve(metadataInput);
27
+ const document = {
28
+ id,
29
+ content,
30
+ metadata,
31
+ blocks: parsePlainTextBlocks(content),
32
+ };
33
+ return [document];
34
+ }
35
+ }
36
+ exports.PlainTextLoader = PlainTextLoader;
37
+ class MarkdownLoader {
38
+ metadataResolver;
39
+ defaultSource;
40
+ constructor(options = {}) {
41
+ this.metadataResolver = options.metadataResolver ?? new metadata_1.DefaultMetadataResolver();
42
+ this.defaultSource = options.defaultSource ?? 'inline';
43
+ }
44
+ async load(input) {
45
+ if (input.documents !== undefined) {
46
+ return input.documents.map(cloneRawDocument);
47
+ }
48
+ const content = requireInlineContent(input, 'MarkdownLoader');
49
+ const blocks = parseMarkdownBlocks(content);
50
+ const metadataInput = createMetadataInput({
51
+ content,
52
+ source: input.source ?? this.defaultSource,
53
+ metadata: withDefaultMimeType(input.metadata, 'text/markdown'),
54
+ title: inferTitleFromBlocks(blocks),
55
+ tenantId: input.tenantId,
56
+ knowledgeBaseId: input.knowledgeBaseId,
57
+ acl: input.acl,
58
+ });
59
+ const { id, metadata } = this.metadataResolver.resolve(metadataInput);
60
+ const document = {
61
+ id,
62
+ content,
63
+ metadata,
64
+ blocks,
65
+ };
66
+ return [document];
67
+ }
68
+ }
69
+ exports.MarkdownLoader = MarkdownLoader;
70
+ class HtmlToMarkdownLoader {
71
+ markdownLoader;
72
+ defaultSource;
73
+ convertToMarkdown;
74
+ constructor(options = {}) {
75
+ this.markdownLoader = new MarkdownLoader(options);
76
+ this.defaultSource = options.defaultSource ?? 'inline';
77
+ this.convertToMarkdown = options.convertToMarkdown ?? htmlToMarkdown;
78
+ }
79
+ async load(input) {
80
+ if (input.documents !== undefined) {
81
+ return input.documents.map(cloneRawDocument);
82
+ }
83
+ const html = requireInlineContent(input, 'HtmlToMarkdownLoader');
84
+ const markdown = normalizeConvertedMarkdown(await this.convertToMarkdown(html, input));
85
+ return await this.markdownLoader.load(createConvertedMarkdownInput({
86
+ input,
87
+ markdown,
88
+ source: input.source ?? this.defaultSource,
89
+ mimeType: 'text/html',
90
+ }));
91
+ }
92
+ }
93
+ exports.HtmlToMarkdownLoader = HtmlToMarkdownLoader;
94
+ class DocxToMarkdownLoader {
95
+ markdownLoader;
96
+ defaultSource;
97
+ convertToMarkdown;
98
+ constructor(options = {}) {
99
+ this.markdownLoader = new MarkdownLoader(options);
100
+ this.defaultSource = options.defaultSource ?? 'inline';
101
+ this.convertToMarkdown = options.convertToMarkdown ?? docxToMarkdown;
102
+ }
103
+ async load(input) {
104
+ if (input.documents !== undefined) {
105
+ return input.documents.map(cloneRawDocument);
106
+ }
107
+ const data = requireBinaryData(input, 'DocxToMarkdownLoader');
108
+ const markdown = normalizeConvertedMarkdown(await this.convertToMarkdown(data, input));
109
+ return await this.markdownLoader.load(createConvertedMarkdownInput({
110
+ input,
111
+ markdown,
112
+ source: input.source ?? this.defaultSource,
113
+ mimeType: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
114
+ }));
115
+ }
116
+ }
117
+ exports.DocxToMarkdownLoader = DocxToMarkdownLoader;
118
+ class PdfToMarkdownLoader {
119
+ markdownLoader;
120
+ defaultSource;
121
+ convertToMarkdown;
122
+ constructor(options = {}) {
123
+ this.markdownLoader = new MarkdownLoader(options);
124
+ this.defaultSource = options.defaultSource ?? 'inline';
125
+ this.convertToMarkdown = options.convertToMarkdown ?? pdfToMarkdown;
126
+ }
127
+ async load(input) {
128
+ if (input.documents !== undefined) {
129
+ return input.documents.map(cloneRawDocument);
130
+ }
131
+ const data = requireBinaryData(input, 'PdfToMarkdownLoader');
132
+ const markdown = normalizeConvertedMarkdown(await this.convertToMarkdown(data, input));
133
+ return await this.markdownLoader.load(createConvertedMarkdownInput({
134
+ input,
135
+ markdown,
136
+ source: input.source ?? this.defaultSource,
137
+ mimeType: 'application/pdf',
138
+ }));
139
+ }
140
+ }
141
+ exports.PdfToMarkdownLoader = PdfToMarkdownLoader;
142
+ class AutoDocumentLoader {
143
+ rules;
144
+ fallbackLoader;
145
+ constructor(options = {}) {
146
+ this.rules = (options.rules ?? createDefaultAutoDocumentLoaderRules())
147
+ .map(normalizeAutoDocumentLoaderRule);
148
+ this.fallbackLoader = options.fallbackLoader ?? new PlainTextLoader();
149
+ }
150
+ async load(input) {
151
+ if (input.documents !== undefined) {
152
+ return input.documents.map(cloneRawDocument);
153
+ }
154
+ const loader = this.resolveLoader(input);
155
+ return await loader.load(createRoutedLoaderInput(input));
156
+ }
157
+ resolveLoader(input) {
158
+ const mimeType = getInputMimeType(input);
159
+ const source = getInputSource(input);
160
+ const extension = getSourceExtension(source);
161
+ if (mimeType !== undefined && !isGenericMimeType(mimeType)) {
162
+ const loader = this.findLoaderByMimeType(mimeType);
163
+ if (loader !== undefined) {
164
+ return loader;
165
+ }
166
+ }
167
+ if (extension !== undefined) {
168
+ const loader = this.findLoaderByExtension(extension);
169
+ if (loader !== undefined) {
170
+ return loader;
171
+ }
172
+ }
173
+ if (mimeType !== undefined) {
174
+ const loader = this.findLoaderByMimeType(mimeType);
175
+ if (loader !== undefined) {
176
+ return loader;
177
+ }
178
+ }
179
+ return this.fallbackLoader;
180
+ }
181
+ findLoaderByMimeType(mimeType) {
182
+ return this.rules.find((rule) => rule.mimeTypes.has(mimeType))?.loader;
183
+ }
184
+ findLoaderByExtension(extension) {
185
+ return this.rules.find((rule) => rule.extensions.has(extension))?.loader;
186
+ }
187
+ }
188
+ exports.AutoDocumentLoader = AutoDocumentLoader;
189
+ function createDefaultAutoDocumentLoaderRules() {
190
+ return [
191
+ {
192
+ name: 'markdown',
193
+ loader: new MarkdownLoader(),
194
+ mimeTypes: ['text/markdown', 'text/x-markdown'],
195
+ extensions: ['.md', '.markdown', '.mdown', '.mkd'],
196
+ },
197
+ {
198
+ name: 'html',
199
+ loader: new HtmlToMarkdownLoader(),
200
+ mimeTypes: ['text/html', 'application/xhtml+xml'],
201
+ extensions: ['.html', '.htm', '.xhtml'],
202
+ },
203
+ {
204
+ name: 'docx',
205
+ loader: new DocxToMarkdownLoader(),
206
+ mimeTypes: [
207
+ 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
208
+ ],
209
+ extensions: ['.docx'],
210
+ },
211
+ {
212
+ name: 'pdf',
213
+ loader: new PdfToMarkdownLoader(),
214
+ mimeTypes: ['application/pdf'],
215
+ extensions: ['.pdf'],
216
+ },
217
+ {
218
+ name: 'text',
219
+ loader: new PlainTextLoader(),
220
+ mimeTypes: ['text/plain', 'text/csv'],
221
+ extensions: ['.txt', '.text', '.log', '.csv'],
222
+ },
223
+ ];
224
+ }
225
+ function requireInlineContent(input, loaderName) {
226
+ if (input.content === undefined) {
227
+ throw new Error(`${loaderName} requires input.content or input.documents.`);
228
+ }
229
+ return input.content;
230
+ }
231
+ function requireBinaryData(input, loaderName) {
232
+ if (input.data === undefined) {
233
+ throw new Error(`${loaderName} requires input.data or input.documents.`);
234
+ }
235
+ return toUint8Array(input.data);
236
+ }
237
+ function normalizeAutoDocumentLoaderRule(rule) {
238
+ return {
239
+ name: rule.name,
240
+ loader: rule.loader,
241
+ mimeTypes: normalizeMimeTypes(rule.mimeTypes),
242
+ extensions: normalizeExtensions(rule.extensions),
243
+ };
244
+ }
245
+ function normalizeMimeTypes(mimeTypes) {
246
+ const normalized = new Set();
247
+ for (const mimeType of mimeTypes ?? []) {
248
+ const value = normalizeMimeType(mimeType);
249
+ if (value !== undefined) {
250
+ normalized.add(value);
251
+ }
252
+ }
253
+ return normalized;
254
+ }
255
+ function normalizeExtensions(extensions) {
256
+ const normalized = new Set();
257
+ for (const extension of extensions ?? []) {
258
+ const value = normalizeExtension(extension);
259
+ if (value !== undefined) {
260
+ normalized.add(value);
261
+ }
262
+ }
263
+ return normalized;
264
+ }
265
+ function getInputMimeType(input) {
266
+ return normalizeMimeType(input.metadata?.mimeType ?? input.mimeType);
267
+ }
268
+ function getInputSource(input) {
269
+ return input.source ?? input.metadata?.source;
270
+ }
271
+ function createRoutedLoaderInput(input) {
272
+ const mimeType = normalizeMimeType(input.mimeType);
273
+ if (input.metadata?.mimeType !== undefined
274
+ || mimeType === undefined
275
+ || isGenericMimeType(mimeType)) {
276
+ return input;
277
+ }
278
+ return {
279
+ ...input,
280
+ metadata: {
281
+ ...(input.metadata ?? {}),
282
+ mimeType,
283
+ },
284
+ };
285
+ }
286
+ function getSourceExtension(source) {
287
+ if (source === undefined) {
288
+ return undefined;
289
+ }
290
+ const withoutQuery = source.split(/[?#]/, 1)[0] ?? source;
291
+ const normalizedPath = withoutQuery.replace(/\\/g, '/');
292
+ const filename = normalizedPath.split('/').filter(Boolean).at(-1);
293
+ if (filename === undefined) {
294
+ return undefined;
295
+ }
296
+ const dotIndex = filename.lastIndexOf('.');
297
+ if (dotIndex <= 0 || dotIndex === filename.length - 1) {
298
+ return undefined;
299
+ }
300
+ return filename.slice(dotIndex).toLowerCase();
301
+ }
302
+ function normalizeMimeType(mimeType) {
303
+ const normalized = (mimeType?.split(';', 1)[0] ?? '').trim().toLowerCase();
304
+ return normalized.length > 0 ? normalized : undefined;
305
+ }
306
+ function normalizeExtension(extension) {
307
+ const normalized = extension.trim().toLowerCase();
308
+ if (normalized.length === 0) {
309
+ return undefined;
310
+ }
311
+ return normalized.startsWith('.') ? normalized : `.${normalized}`;
312
+ }
313
+ function isGenericMimeType(mimeType) {
314
+ return mimeType === 'text/plain' || mimeType === 'application/octet-stream';
315
+ }
316
+ function withDefaultMimeType(metadata, mimeType) {
317
+ return {
318
+ ...metadata,
319
+ mimeType: metadata?.mimeType ?? mimeType,
320
+ };
321
+ }
322
+ function createConvertedMarkdownInput(draft) {
323
+ const metadata = {
324
+ ...(draft.input.metadata ?? {}),
325
+ mimeType: draft.input.metadata?.mimeType ?? draft.mimeType,
326
+ };
327
+ metadata.extra = {
328
+ ...(draft.input.metadata?.extra ?? {}),
329
+ convertedToMimeType: 'text/markdown',
330
+ originalMimeType: draft.mimeType,
331
+ };
332
+ const input = {
333
+ content: draft.markdown,
334
+ source: draft.source,
335
+ metadata,
336
+ };
337
+ assignIfDefined(input, 'tenantId', draft.input.tenantId);
338
+ assignIfDefined(input, 'knowledgeBaseId', draft.input.knowledgeBaseId);
339
+ assignIfDefined(input, 'acl', draft.input.acl);
340
+ assignIfDefined(input, 'replaceExisting', draft.input.replaceExisting);
341
+ return input;
342
+ }
343
+ async function htmlToMarkdown(html) {
344
+ const service = await createTurndownService();
345
+ const title = extractHtmlTitle(html);
346
+ const markdown = service.turndown(stripHtmlNoise(html));
347
+ if (title !== undefined && !hasMarkdownHeading(markdown)) {
348
+ return `# ${escapeMarkdownHeading(title)}\n\n${markdown}`;
349
+ }
350
+ return markdown;
351
+ }
352
+ async function docxToMarkdown(data) {
353
+ const mammoth = await importRuntimeDependency('mammoth', 'DocxToMarkdownLoader');
354
+ const converter = readProperty(mammoth, 'convertToHtml');
355
+ if (typeof converter !== 'function') {
356
+ throw new Error('DocxToMarkdownLoader dependency "mammoth" does not expose convertToHtml().');
357
+ }
358
+ const result = await converter({ buffer: toBuffer(data) });
359
+ const html = typeof result.value === 'string' ? result.value : '';
360
+ return await htmlToMarkdown(html);
361
+ }
362
+ async function pdfToMarkdown(data) {
363
+ const pdfParseModule = await importRuntimeDependency('pdf-parse', 'PdfToMarkdownLoader');
364
+ const parser = readDefaultExport(pdfParseModule);
365
+ if (typeof parser !== 'function') {
366
+ throw new Error('PdfToMarkdownLoader dependency "pdf-parse" does not expose a parser function.');
367
+ }
368
+ const result = await parser(toBuffer(data));
369
+ const text = typeof result.text === 'string' ? result.text : '';
370
+ return plainTextToMarkdown(text, typeof result.numpages === 'number' ? result.numpages : undefined);
371
+ }
372
+ async function createTurndownService() {
373
+ const turndown = await importRuntimeDependency('turndown', 'HtmlToMarkdownLoader');
374
+ const plugin = await importRuntimeDependency('turndown-plugin-gfm', 'HtmlToMarkdownLoader');
375
+ const Service = readDefaultExport(turndown);
376
+ if (typeof Service !== 'function') {
377
+ throw new Error('HtmlToMarkdownLoader dependency "turndown" does not expose a constructor.');
378
+ }
379
+ const TurndownService = Service;
380
+ const service = new TurndownService({
381
+ headingStyle: 'atx',
382
+ codeBlockStyle: 'fenced',
383
+ bulletListMarker: '-',
384
+ });
385
+ const gfm = readProperty(plugin, 'gfm');
386
+ if (typeof gfm === 'function') {
387
+ service.use(gfm);
388
+ }
389
+ return service;
390
+ }
391
+ async function importRuntimeDependency(name, loaderName) {
392
+ try {
393
+ return await import(name);
394
+ }
395
+ catch (error) {
396
+ throw new Error(`${loaderName} requires dependency "${name}". Install it with: npm install ${name}`, { cause: error });
397
+ }
398
+ }
399
+ function readDefaultExport(module) {
400
+ const defaultExport = readProperty(module, 'default');
401
+ return defaultExport ?? module;
402
+ }
403
+ function readProperty(value, key) {
404
+ return isRecord(value) ? value[key] : undefined;
405
+ }
406
+ function isRecord(value) {
407
+ return typeof value === 'object' && value !== null;
408
+ }
409
+ function stripHtmlNoise(html) {
410
+ return html
411
+ .replace(/<!--[\s\S]*?-->/g, '')
412
+ .replace(/<(script|style|noscript)\b[\s\S]*?<\/\1>/gi, '');
413
+ }
414
+ function extractHtmlTitle(html) {
415
+ const match = html.match(/<title\b[^>]*>([\s\S]*?)<\/title>/i);
416
+ const title = match?.[1]
417
+ ?.replace(/<[^>]+>/g, '')
418
+ .replace(/\s+/g, ' ')
419
+ .trim();
420
+ return title && title.length > 0 ? title : undefined;
421
+ }
422
+ function hasMarkdownHeading(markdown) {
423
+ return /^\s{0,3}#{1,6}\s+\S/m.test(markdown);
424
+ }
425
+ function escapeMarkdownHeading(text) {
426
+ return text
427
+ .replace(/^#+\s*/, '')
428
+ .replace(/\s+/g, ' ')
429
+ .trim();
430
+ }
431
+ function plainTextToMarkdown(text, pageCount) {
432
+ const normalized = normalizeConvertedMarkdown(text);
433
+ const pages = normalized
434
+ .split(/\f/g)
435
+ .map((page) => page.trim())
436
+ .filter((page) => page.length > 0);
437
+ if (pages.length > 1) {
438
+ return pages
439
+ .map((page, index) => `## Page ${index + 1}\n\n${page}`)
440
+ .join('\n\n');
441
+ }
442
+ if (pageCount !== undefined && pageCount > 1 && normalized.length > 0) {
443
+ return `## PDF Text\n\n${normalized}`;
444
+ }
445
+ return normalized;
446
+ }
447
+ function normalizeConvertedMarkdown(markdown) {
448
+ return normalizeLineEndings(markdown)
449
+ .replace(/[ \t]+\n/g, '\n')
450
+ .replace(/\n{3,}/g, '\n\n')
451
+ .trim();
452
+ }
453
+ function toUint8Array(data) {
454
+ if (data instanceof Uint8Array) {
455
+ return data;
456
+ }
457
+ return new Uint8Array(data);
458
+ }
459
+ function toBuffer(data) {
460
+ return Buffer.from(data.buffer, data.byteOffset, data.byteLength);
461
+ }
462
+ function parsePlainTextBlocks(content) {
463
+ return normalizeLineEndings(content)
464
+ .split(/\n{2,}/)
465
+ .map((paragraph) => paragraph.trim())
466
+ .filter((paragraph) => paragraph.length > 0)
467
+ .map((text) => ({ type: 'paragraph', text }));
468
+ }
469
+ /**
470
+ * MarkdownLoader 只做轻量结构识别,不尝试成为完整 Markdown 解析器。
471
+ * 它保留标题、表格、代码块和段落边界,后续 chunker 可以基于 blocks 继续切割。
472
+ */
473
+ function parseMarkdownBlocks(content) {
474
+ const lines = normalizeLineEndings(content).split('\n');
475
+ const blocks = [];
476
+ let index = 0;
477
+ while (index < lines.length) {
478
+ const line = lines[index] ?? '';
479
+ if (line.trim().length === 0) {
480
+ index += 1;
481
+ continue;
482
+ }
483
+ const fence = parseFenceStart(line);
484
+ if (fence !== undefined) {
485
+ const codeLines = [];
486
+ index += 1;
487
+ while (index < lines.length) {
488
+ const current = lines[index] ?? '';
489
+ if (current.trim().startsWith(fence.marker)) {
490
+ index += 1;
491
+ break;
492
+ }
493
+ codeLines.push(current);
494
+ index += 1;
495
+ }
496
+ const codeBlock = {
497
+ type: 'code',
498
+ code: codeLines.join('\n'),
499
+ };
500
+ if (fence.language !== undefined) {
501
+ codeBlock.language = fence.language;
502
+ }
503
+ blocks.push(codeBlock);
504
+ continue;
505
+ }
506
+ const heading = line.match(/^(#{1,6})\s+(.+?)\s*#*$/);
507
+ if (heading !== null) {
508
+ blocks.push({
509
+ type: 'heading',
510
+ level: heading[1]?.length ?? 1,
511
+ text: heading[2]?.trim() ?? '',
512
+ });
513
+ index += 1;
514
+ continue;
515
+ }
516
+ if (isTableStart(lines, index)) {
517
+ const tableLines = [];
518
+ while (index < lines.length && isPipeLine(lines[index] ?? '')) {
519
+ tableLines.push((lines[index] ?? '').trim());
520
+ index += 1;
521
+ }
522
+ blocks.push({
523
+ type: 'table',
524
+ markdown: tableLines.join('\n'),
525
+ });
526
+ continue;
527
+ }
528
+ const paragraphLines = [];
529
+ while (index < lines.length) {
530
+ const current = lines[index] ?? '';
531
+ if (current.trim().length === 0
532
+ || parseFenceStart(current) !== undefined
533
+ || current.match(/^(#{1,6})\s+(.+?)\s*#*$/) !== null
534
+ || isTableStart(lines, index)) {
535
+ break;
536
+ }
537
+ paragraphLines.push(current.trim());
538
+ index += 1;
539
+ }
540
+ if (paragraphLines.length > 0) {
541
+ blocks.push({
542
+ type: 'paragraph',
543
+ text: paragraphLines.join('\n'),
544
+ });
545
+ }
546
+ }
547
+ return blocks;
548
+ }
549
+ function normalizeLineEndings(content) {
550
+ return content.replace(/\r\n?/g, '\n');
551
+ }
552
+ function parseFenceStart(line) {
553
+ const match = line.trim().match(/^(```|~~~)\s*([A-Za-z0-9_+.-]+)?\s*$/);
554
+ if (match === null) {
555
+ return undefined;
556
+ }
557
+ const result = {
558
+ marker: match[1] ?? '```',
559
+ };
560
+ const language = match[2]?.trim();
561
+ if (language !== undefined && language.length > 0) {
562
+ result.language = language;
563
+ }
564
+ return result;
565
+ }
566
+ function isTableStart(lines, index) {
567
+ const current = lines[index] ?? '';
568
+ const next = lines[index + 1] ?? '';
569
+ return isPipeLine(current) && isTableSeparator(next);
570
+ }
571
+ function isPipeLine(line) {
572
+ return line.includes('|') && line.trim().length > 0;
573
+ }
574
+ function isTableSeparator(line) {
575
+ const cells = line.trim().split('|').map((cell) => cell.trim()).filter(Boolean);
576
+ return cells.length > 0 && cells.every((cell) => /^:?-{3,}:?$/.test(cell));
577
+ }
578
+ function inferTitleFromBlocks(blocks) {
579
+ const firstHeading = blocks.find((block) => block.type === 'heading');
580
+ return firstHeading?.type === 'heading' ? firstHeading.text : undefined;
581
+ }
582
+ function createMetadataInput(draft) {
583
+ const input = {
584
+ content: draft.content,
585
+ };
586
+ assignIfDefined(input, 'source', draft.source);
587
+ assignIfDefined(input, 'metadata', draft.metadata);
588
+ assignIfDefined(input, 'title', draft.title);
589
+ assignIfDefined(input, 'mimeType', draft.mimeType);
590
+ assignIfDefined(input, 'tenantId', draft.tenantId);
591
+ assignIfDefined(input, 'knowledgeBaseId', draft.knowledgeBaseId);
592
+ assignIfDefined(input, 'acl', draft.acl);
593
+ return input;
594
+ }
595
+ function cloneRawDocument(document) {
596
+ const clone = {
597
+ id: document.id,
598
+ content: document.content,
599
+ metadata: cloneMetadata(document.metadata),
600
+ };
601
+ if (document.blocks !== undefined) {
602
+ clone.blocks = document.blocks.map(cloneBlock);
603
+ }
604
+ return clone;
605
+ }
606
+ function cloneMetadata(metadata) {
607
+ const clone = {
608
+ source: metadata.source,
609
+ };
610
+ assignIfDefined(clone, 'title', metadata.title);
611
+ assignIfDefined(clone, 'mimeType', metadata.mimeType);
612
+ assignIfDefined(clone, 'tenantId', metadata.tenantId);
613
+ assignIfDefined(clone, 'knowledgeBaseId', metadata.knowledgeBaseId);
614
+ assignIfDefined(clone, 'version', metadata.version);
615
+ assignIfDefined(clone, 'checksum', metadata.checksum);
616
+ assignIfDefined(clone, 'createdAt', metadata.createdAt);
617
+ assignIfDefined(clone, 'updatedAt', metadata.updatedAt);
618
+ if (metadata.acl !== undefined) {
619
+ clone.acl = [...metadata.acl];
620
+ }
621
+ if (metadata.extra !== undefined) {
622
+ clone.extra = { ...metadata.extra };
623
+ }
624
+ return clone;
625
+ }
626
+ function cloneBlock(block) {
627
+ switch (block.type) {
628
+ case 'heading':
629
+ return { ...block };
630
+ case 'paragraph':
631
+ return { ...block };
632
+ case 'table': {
633
+ const clone = {
634
+ type: 'table',
635
+ markdown: block.markdown,
636
+ };
637
+ if (block.rows !== undefined) {
638
+ clone.rows = [...block.rows];
639
+ }
640
+ return clone;
641
+ }
642
+ case 'code':
643
+ return { ...block };
644
+ case 'image':
645
+ return { ...block };
646
+ }
647
+ }
648
+ function assignIfDefined(target, key, value) {
649
+ if (value !== undefined) {
650
+ target[key] = value;
651
+ }
652
+ }
653
+ //# sourceMappingURL=loaders.js.map