@farukada/langchain-ts-rms 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 (175) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +446 -0
  3. package/dist/app/freshness/evaluator.d.ts +23 -0
  4. package/dist/app/freshness/evaluator.d.ts.map +1 -0
  5. package/dist/app/freshness/evaluator.js +72 -0
  6. package/dist/app/freshness/evaluator.js.map +1 -0
  7. package/dist/app/governance/guardrails.d.ts +51 -0
  8. package/dist/app/governance/guardrails.d.ts.map +1 -0
  9. package/dist/app/governance/guardrails.js +68 -0
  10. package/dist/app/governance/guardrails.js.map +1 -0
  11. package/dist/app/graph/workflow.d.ts +1159 -0
  12. package/dist/app/graph/workflow.d.ts.map +1 -0
  13. package/dist/app/graph/workflow.js +468 -0
  14. package/dist/app/graph/workflow.js.map +1 -0
  15. package/dist/app/queryPlanning/planner.d.ts +18 -0
  16. package/dist/app/queryPlanning/planner.d.ts.map +1 -0
  17. package/dist/app/queryPlanning/planner.js +80 -0
  18. package/dist/app/queryPlanning/planner.js.map +1 -0
  19. package/dist/app/queryRewriting/rewriter.d.ts +32 -0
  20. package/dist/app/queryRewriting/rewriter.d.ts.map +1 -0
  21. package/dist/app/queryRewriting/rewriter.js +111 -0
  22. package/dist/app/queryRewriting/rewriter.js.map +1 -0
  23. package/dist/app/reranking/reranker.d.ts +27 -0
  24. package/dist/app/reranking/reranker.d.ts.map +1 -0
  25. package/dist/app/reranking/reranker.js +67 -0
  26. package/dist/app/reranking/reranker.js.map +1 -0
  27. package/dist/app/state/schema.d.ts +121 -0
  28. package/dist/app/state/schema.d.ts.map +1 -0
  29. package/dist/app/state/schema.js +88 -0
  30. package/dist/app/state/schema.js.map +1 -0
  31. package/dist/app/summarization/summarizationSchema.d.ts +34 -0
  32. package/dist/app/summarization/summarizationSchema.d.ts.map +1 -0
  33. package/dist/app/summarization/summarizationSchema.js +65 -0
  34. package/dist/app/summarization/summarizationSchema.js.map +1 -0
  35. package/dist/app/summarization/summarizer.d.ts +51 -0
  36. package/dist/app/summarization/summarizer.d.ts.map +1 -0
  37. package/dist/app/summarization/summarizer.js +181 -0
  38. package/dist/app/summarization/summarizer.js.map +1 -0
  39. package/dist/app/summarization/synthesisSchema.d.ts +16 -0
  40. package/dist/app/summarization/synthesisSchema.d.ts.map +1 -0
  41. package/dist/app/summarization/synthesisSchema.js +43 -0
  42. package/dist/app/summarization/synthesisSchema.js.map +1 -0
  43. package/dist/app/summarization/synthesizer.d.ts +21 -0
  44. package/dist/app/summarization/synthesizer.d.ts.map +1 -0
  45. package/dist/app/summarization/synthesizer.js +86 -0
  46. package/dist/app/summarization/synthesizer.js.map +1 -0
  47. package/dist/config/env.d.ts +49 -0
  48. package/dist/config/env.d.ts.map +1 -0
  49. package/dist/config/env.js +54 -0
  50. package/dist/config/env.js.map +1 -0
  51. package/dist/domain/contracts.d.ts +59 -0
  52. package/dist/domain/contracts.d.ts.map +1 -0
  53. package/dist/domain/contracts.js +52 -0
  54. package/dist/domain/contracts.js.map +1 -0
  55. package/dist/domain/ports.d.ts +63 -0
  56. package/dist/domain/ports.d.ts.map +1 -0
  57. package/dist/domain/ports.js +2 -0
  58. package/dist/domain/ports.js.map +1 -0
  59. package/dist/domain/researchUtils.d.ts +51 -0
  60. package/dist/domain/researchUtils.d.ts.map +1 -0
  61. package/dist/domain/researchUtils.js +85 -0
  62. package/dist/domain/researchUtils.js.map +1 -0
  63. package/dist/infra/chat/chatModelProvider.d.ts +4 -0
  64. package/dist/infra/chat/chatModelProvider.d.ts.map +1 -0
  65. package/dist/infra/chat/chatModelProvider.js +13 -0
  66. package/dist/infra/chat/chatModelProvider.js.map +1 -0
  67. package/dist/infra/checkpoint/checkpointerFactory.d.ts +38 -0
  68. package/dist/infra/checkpoint/checkpointerFactory.d.ts.map +1 -0
  69. package/dist/infra/checkpoint/checkpointerFactory.js +54 -0
  70. package/dist/infra/checkpoint/checkpointerFactory.js.map +1 -0
  71. package/dist/infra/content/contentExtractor.d.ts +58 -0
  72. package/dist/infra/content/contentExtractor.d.ts.map +1 -0
  73. package/dist/infra/content/contentExtractor.js +296 -0
  74. package/dist/infra/content/contentExtractor.js.map +1 -0
  75. package/dist/infra/embeddings/embeddingProvider.d.ts +4 -0
  76. package/dist/infra/embeddings/embeddingProvider.d.ts.map +1 -0
  77. package/dist/infra/embeddings/embeddingProvider.js +11 -0
  78. package/dist/infra/embeddings/embeddingProvider.js.map +1 -0
  79. package/dist/infra/healthCheck.d.ts +23 -0
  80. package/dist/infra/healthCheck.d.ts.map +1 -0
  81. package/dist/infra/healthCheck.js +57 -0
  82. package/dist/infra/healthCheck.js.map +1 -0
  83. package/dist/infra/observability/tokenCounter.d.ts +30 -0
  84. package/dist/infra/observability/tokenCounter.d.ts.map +1 -0
  85. package/dist/infra/observability/tokenCounter.js +46 -0
  86. package/dist/infra/observability/tokenCounter.js.map +1 -0
  87. package/dist/infra/observability/tracing.d.ts +38 -0
  88. package/dist/infra/observability/tracing.d.ts.map +1 -0
  89. package/dist/infra/observability/tracing.js +92 -0
  90. package/dist/infra/observability/tracing.js.map +1 -0
  91. package/dist/infra/rateLimit/circuitBreaker.d.ts +54 -0
  92. package/dist/infra/rateLimit/circuitBreaker.d.ts.map +1 -0
  93. package/dist/infra/rateLimit/circuitBreaker.js +97 -0
  94. package/dist/infra/rateLimit/circuitBreaker.js.map +1 -0
  95. package/dist/infra/rateLimit/rateLimiter.d.ts +42 -0
  96. package/dist/infra/rateLimit/rateLimiter.d.ts.map +1 -0
  97. package/dist/infra/rateLimit/rateLimiter.js +89 -0
  98. package/dist/infra/rateLimit/rateLimiter.js.map +1 -0
  99. package/dist/infra/search/searxngClient.d.ts +29 -0
  100. package/dist/infra/search/searxngClient.d.ts.map +1 -0
  101. package/dist/infra/search/searxngClient.js +85 -0
  102. package/dist/infra/search/searxngClient.js.map +1 -0
  103. package/dist/infra/search/urlBlocklist.d.ts +28 -0
  104. package/dist/infra/search/urlBlocklist.d.ts.map +1 -0
  105. package/dist/infra/search/urlBlocklist.js +78 -0
  106. package/dist/infra/search/urlBlocklist.js.map +1 -0
  107. package/dist/infra/vector/qdrantClient.d.ts +18 -0
  108. package/dist/infra/vector/qdrantClient.d.ts.map +1 -0
  109. package/dist/infra/vector/qdrantClient.js +82 -0
  110. package/dist/infra/vector/qdrantClient.js.map +1 -0
  111. package/dist/infra/vector/researchRepository.d.ts +39 -0
  112. package/dist/infra/vector/researchRepository.d.ts.map +1 -0
  113. package/dist/infra/vector/researchRepository.js +294 -0
  114. package/dist/infra/vector/researchRepository.js.map +1 -0
  115. package/dist/lib/helpers.d.ts +50 -0
  116. package/dist/lib/helpers.d.ts.map +1 -0
  117. package/dist/lib/helpers.js +124 -0
  118. package/dist/lib/helpers.js.map +1 -0
  119. package/dist/lib/index.d.ts +65 -0
  120. package/dist/lib/index.d.ts.map +1 -0
  121. package/dist/lib/index.js +61 -0
  122. package/dist/lib/index.js.map +1 -0
  123. package/dist/lib/rmsTool.d.ts +28 -0
  124. package/dist/lib/rmsTool.d.ts.map +1 -0
  125. package/dist/lib/rmsTool.js +79 -0
  126. package/dist/lib/rmsTool.js.map +1 -0
  127. package/dist/lib/schemas/lifecycleSchemas.d.ts +42 -0
  128. package/dist/lib/schemas/lifecycleSchemas.d.ts.map +1 -0
  129. package/dist/lib/schemas/lifecycleSchemas.js +176 -0
  130. package/dist/lib/schemas/lifecycleSchemas.js.map +1 -0
  131. package/dist/lib/schemas/researchSchemas.d.ts +23 -0
  132. package/dist/lib/schemas/researchSchemas.d.ts.map +1 -0
  133. package/dist/lib/schemas/researchSchemas.js +83 -0
  134. package/dist/lib/schemas/researchSchemas.js.map +1 -0
  135. package/dist/lib/tools/deleteResearch.d.ts +19 -0
  136. package/dist/lib/tools/deleteResearch.d.ts.map +1 -0
  137. package/dist/lib/tools/deleteResearch.js +37 -0
  138. package/dist/lib/tools/deleteResearch.js.map +1 -0
  139. package/dist/lib/tools/getDatetime.d.ts +7 -0
  140. package/dist/lib/tools/getDatetime.d.ts.map +1 -0
  141. package/dist/lib/tools/getDatetime.js +26 -0
  142. package/dist/lib/tools/getDatetime.js.map +1 -0
  143. package/dist/lib/tools/getResearch.d.ts +19 -0
  144. package/dist/lib/tools/getResearch.d.ts.map +1 -0
  145. package/dist/lib/tools/getResearch.js +32 -0
  146. package/dist/lib/tools/getResearch.js.map +1 -0
  147. package/dist/lib/tools/listResearch.d.ts +25 -0
  148. package/dist/lib/tools/listResearch.d.ts.map +1 -0
  149. package/dist/lib/tools/listResearch.js +41 -0
  150. package/dist/lib/tools/listResearch.js.map +1 -0
  151. package/dist/lib/tools/refreshResearch.d.ts +27 -0
  152. package/dist/lib/tools/refreshResearch.d.ts.map +1 -0
  153. package/dist/lib/tools/refreshResearch.js +81 -0
  154. package/dist/lib/tools/refreshResearch.js.map +1 -0
  155. package/dist/lib/tools/research.d.ts +108 -0
  156. package/dist/lib/tools/research.d.ts.map +1 -0
  157. package/dist/lib/tools/research.js +273 -0
  158. package/dist/lib/tools/research.js.map +1 -0
  159. package/dist/lib/tools/searchResearch.d.ts +25 -0
  160. package/dist/lib/tools/searchResearch.d.ts.map +1 -0
  161. package/dist/lib/tools/searchResearch.js +45 -0
  162. package/dist/lib/tools/searchResearch.js.map +1 -0
  163. package/dist/lib/types.d.ts +51 -0
  164. package/dist/lib/types.d.ts.map +1 -0
  165. package/dist/lib/types.js +2 -0
  166. package/dist/lib/types.js.map +1 -0
  167. package/dist/mcp/index.d.ts +12 -0
  168. package/dist/mcp/index.d.ts.map +1 -0
  169. package/dist/mcp/index.js +12 -0
  170. package/dist/mcp/index.js.map +1 -0
  171. package/dist/mcp/server.d.ts +45 -0
  172. package/dist/mcp/server.d.ts.map +1 -0
  173. package/dist/mcp/server.js +440 -0
  174. package/dist/mcp/server.js.map +1 -0
  175. package/package.json +132 -0
@@ -0,0 +1,63 @@
1
+ import type { Research, ResearchStatus } from "./contracts.js";
2
+ /** Payload filter options for searching research entries. */
3
+ export interface ResearchSearchFilter {
4
+ tenantId?: string | undefined;
5
+ status?: ResearchStatus[] | undefined;
6
+ tags?: string[] | undefined;
7
+ }
8
+ /** Paging and filter options for listing research entries. */
9
+ export interface ResearchListOptions {
10
+ tenantId?: string | undefined;
11
+ status?: ResearchStatus[] | undefined;
12
+ limit?: number | undefined;
13
+ offset?: number | undefined;
14
+ /** Opaque cursor from a previous list() call. Takes precedence over offset. */
15
+ cursor?: string | undefined;
16
+ }
17
+ /** Deterministic page payload with total count metadata. */
18
+ export interface ResearchListResult {
19
+ items: Research[];
20
+ total: number;
21
+ limit: number;
22
+ offset: number;
23
+ /** Opaque cursor for fetching the next page. Undefined if no more pages. */
24
+ nextCursor?: string | undefined;
25
+ }
26
+ /**
27
+ * Storage-agnostic repository contract for research persistence.
28
+ *
29
+ * Implement this interface to plug in any vector store backend
30
+ * (Qdrant, Pinecone, pgvector, in-memory, etc.).
31
+ */
32
+ export interface IResearchRepository {
33
+ /** Upsert a research entry into the store. */
34
+ upsert(research: Research): Promise<void>;
35
+ /** Semantic search with optional payload filters. */
36
+ search(query: string, opts?: {
37
+ k?: number;
38
+ filter?: ResearchSearchFilter;
39
+ }): Promise<Array<{
40
+ research: Research;
41
+ score: number;
42
+ }>>;
43
+ /** Retrieve a research entry by ID (exact match). */
44
+ getById(researchId: string): Promise<Research | null>;
45
+ /** List research entries with server-side pagination and optional filters. */
46
+ list(options?: ResearchListOptions): Promise<ResearchListResult>;
47
+ /** Delete research entries by IDs. */
48
+ deleteByIds(ids: string[]): Promise<void>;
49
+ /** Find research entries by subject using semantic similarity. */
50
+ findBySubject(subject: string, opts?: {
51
+ tenantId?: string | undefined;
52
+ k?: number | undefined;
53
+ }): Promise<Array<{
54
+ research: Research;
55
+ score: number;
56
+ }>>;
57
+ /** Find stale (expired) research entries. */
58
+ findStale(now: Date, opts?: {
59
+ tenantId?: string | undefined;
60
+ limit?: number | undefined;
61
+ }): Promise<Research[]>;
62
+ }
63
+ //# sourceMappingURL=ports.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.d.ts","sourceRoot":"","sources":["../../src/domain/ports.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAE/D,6DAA6D;AAC7D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IACtC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;CAC7B;AAED,8DAA8D;AAC9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,MAAM,CAAC,EAAE,cAAc,EAAE,GAAG,SAAS,CAAC;IACtC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7B;AAED,4DAA4D;AAC5D,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACjC;AAED;;;;;GAKG;AACH,MAAM,WAAW,mBAAmB;IAClC,8CAA8C;IAC9C,MAAM,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,qDAAqD;IACrD,MAAM,CACJ,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE;QAAE,CAAC,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,oBAAoB,CAAA;KAAE,GACnD,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAEzD,qDAAqD;IACrD,OAAO,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAAC;IAEtD,8EAA8E;IAC9E,IAAI,CAAC,OAAO,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAAC;IAEjE,sCAAsC;IACtC,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,kEAAkE;IAClE,aAAa,CACX,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,CAAC,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GAC/D,OAAO,CAAC,KAAK,CAAC;QAAE,QAAQ,EAAE,QAAQ,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC,CAAC;IAEzD,6CAA6C;IAC7C,SAAS,CACP,GAAG,EAAE,IAAI,EACT,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,GACnE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC;CACxB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=ports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ports.js","sourceRoot":"","sources":["../../src/domain/ports.ts"],"names":[],"mappings":""}
@@ -0,0 +1,51 @@
1
+ import type { Research, SourceSummaryEntry } from "./contracts.js";
2
+ /**
3
+ * Checks whether a research entry is still fresh (not expired).
4
+ * A research entry is fresh if its `expiresAt` timestamp is in the future.
5
+ */
6
+ export declare function isResearchFresh(research: Research, now?: Date): boolean;
7
+ /**
8
+ * Calculates the expiration timestamp by adding `freshnessDays` to the given date.
9
+ */
10
+ export declare function calculateExpiresAt(updatedAt: string, freshnessDays: number): string;
11
+ /**
12
+ * Builds a human-readable composite summary from per-source summaries.
13
+ * Filters out low-relevance sources (< 0.3) so the summary stays useful.
14
+ */
15
+ export declare function buildCompositeSummary(sources: SourceSummaryEntry[]): string;
16
+ /**
17
+ * Constructs a new Research domain object with sensible defaults.
18
+ *
19
+ * When `sourceSummaries` is provided, the composite `summary` is
20
+ * auto-generated from per-source takeaways (unless an explicit
21
+ * `summary` override is also given).
22
+ */
23
+ export declare function buildResearch(input: {
24
+ subject: string;
25
+ sourceSummaries?: SourceSummaryEntry[] | undefined;
26
+ summary?: string | undefined;
27
+ sourceUrls?: string[] | undefined;
28
+ searchQueries?: string[] | undefined;
29
+ confidenceScore?: number | undefined;
30
+ tags?: string[] | undefined;
31
+ language?: string | undefined;
32
+ rawResultCount?: number | undefined;
33
+ keyFindings?: string[] | undefined;
34
+ limitations?: string[] | undefined;
35
+ tenantId?: string | undefined;
36
+ metadata?: Record<string, unknown> | undefined;
37
+ freshnessDays?: number | undefined;
38
+ }): Research;
39
+ /**
40
+ * Merges incoming metadata with existing metadata (shallow merge).
41
+ */
42
+ export declare function mergeResearchMetadata(existing: Record<string, unknown>, incoming: Record<string, unknown>): Record<string, unknown>;
43
+ /**
44
+ * Returns the age of a research entry in milliseconds.
45
+ */
46
+ export declare function getResearchAge(research: Research, now?: Date): number;
47
+ /**
48
+ * Returns the age of a research entry in days.
49
+ */
50
+ export declare function getResearchAgeDays(research: Research, now?: Date): number;
51
+ //# sourceMappingURL=researchUtils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchUtils.d.ts","sourceRoot":"","sources":["../../src/domain/researchUtils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,OAAO,CAIvE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,MAAM,CAInF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,MAAM,CAK3E;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,kBAAkB,EAAE,GAAG,SAAS,CAAC;IACnD,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC7B,UAAU,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAClC,aAAa,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACrC,eAAe,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACpC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,WAAW,CAAC,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;IACnC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC;IAC/C,aAAa,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACpC,GAAG,QAAQ,CA0BX;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAEzB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAIrE;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,QAAQ,EAAE,GAAG,CAAC,EAAE,IAAI,GAAG,MAAM,CAEzE"}
@@ -0,0 +1,85 @@
1
+ /**
2
+ * Checks whether a research entry is still fresh (not expired).
3
+ * A research entry is fresh if its `expiresAt` timestamp is in the future.
4
+ */
5
+ export function isResearchFresh(research, now) {
6
+ if (!research.expiresAt)
7
+ return false;
8
+ const currentTime = now ?? new Date();
9
+ return new Date(research.expiresAt).getTime() > currentTime.getTime();
10
+ }
11
+ /**
12
+ * Calculates the expiration timestamp by adding `freshnessDays` to the given date.
13
+ */
14
+ export function calculateExpiresAt(updatedAt, freshnessDays) {
15
+ const date = new Date(updatedAt);
16
+ date.setDate(date.getDate() + freshnessDays);
17
+ return date.toISOString();
18
+ }
19
+ /**
20
+ * Builds a human-readable composite summary from per-source summaries.
21
+ * Filters out low-relevance sources (< 0.3) so the summary stays useful.
22
+ */
23
+ export function buildCompositeSummary(sources) {
24
+ if (sources.length === 0)
25
+ return "No sources available.";
26
+ const relevant = sources.filter((s) => s.relevance >= 0.3);
27
+ if (relevant.length === 0)
28
+ return "No sufficiently relevant sources found.";
29
+ return relevant.map((s) => `**${s.title}**\n${s.keyTakeaways}\n[Source: ${s.url}]`).join("\n\n");
30
+ }
31
+ /**
32
+ * Constructs a new Research domain object with sensible defaults.
33
+ *
34
+ * When `sourceSummaries` is provided, the composite `summary` is
35
+ * auto-generated from per-source takeaways (unless an explicit
36
+ * `summary` override is also given).
37
+ */
38
+ export function buildResearch(input) {
39
+ const now = new Date().toISOString();
40
+ const freshnessDays = input.freshnessDays ?? 7;
41
+ const sourceSummaries = input.sourceSummaries ?? [];
42
+ const summary = input.summary ?? buildCompositeSummary(sourceSummaries);
43
+ return {
44
+ id: crypto.randomUUID(),
45
+ subject: input.subject,
46
+ summary,
47
+ sourceSummaries,
48
+ sourceUrls: input.sourceUrls ?? [],
49
+ searchQueries: input.searchQueries ?? [],
50
+ createdAt: now,
51
+ updatedAt: now,
52
+ expiresAt: calculateExpiresAt(now, freshnessDays),
53
+ status: "active",
54
+ confidenceScore: input.confidenceScore ?? 0.5,
55
+ sourceCount: input.sourceUrls?.length ?? 0,
56
+ tenantId: input.tenantId,
57
+ tags: input.tags ?? [],
58
+ language: input.language ?? "en",
59
+ rawResultCount: input.rawResultCount ?? 0,
60
+ keyFindings: input.keyFindings,
61
+ limitations: input.limitations,
62
+ metadata: input.metadata ?? {},
63
+ };
64
+ }
65
+ /**
66
+ * Merges incoming metadata with existing metadata (shallow merge).
67
+ */
68
+ export function mergeResearchMetadata(existing, incoming) {
69
+ return { ...existing, ...incoming };
70
+ }
71
+ /**
72
+ * Returns the age of a research entry in milliseconds.
73
+ */
74
+ export function getResearchAge(research, now) {
75
+ const currentTime = now ?? new Date();
76
+ const updatedAt = research.updatedAt ? new Date(research.updatedAt) : new Date(0);
77
+ return currentTime.getTime() - updatedAt.getTime();
78
+ }
79
+ /**
80
+ * Returns the age of a research entry in days.
81
+ */
82
+ export function getResearchAgeDays(research, now) {
83
+ return getResearchAge(research, now) / (1000 * 60 * 60 * 24);
84
+ }
85
+ //# sourceMappingURL=researchUtils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"researchUtils.js","sourceRoot":"","sources":["../../src/domain/researchUtils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { BaseChatModel } from "@langchain/core/language_models/chat_models";
2
+ /** Creates an Ollama chat model from environment configuration. */
3
+ export declare function createChatModelProvider(): BaseChatModel;
4
+ //# sourceMappingURL=chatModelProvider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatModelProvider.d.ts","sourceRoot":"","sources":["../../../src/infra/chat/chatModelProvider.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,6CAA6C,CAAC;AAIjF,mEAAmE;AACnE,wBAAgB,uBAAuB,IAAI,aAAa,CAQvD"}
@@ -0,0 +1,13 @@
1
+ import { ChatOllama } from "@langchain/ollama";
2
+ import { loadEnv } from "../../config/env.js";
3
+ /** Creates an Ollama chat model from environment configuration. */
4
+ export function createChatModelProvider() {
5
+ const env = loadEnv();
6
+ return new ChatOllama({
7
+ baseUrl: env.OLLAMA_HOST,
8
+ model: env.RMS_OLLAMA_CHAT_MODEL ?? env.OLLAMA_CHAT_MODEL,
9
+ temperature: 0,
10
+ numCtx: env.RMS_OLLAMA_NUM_CTX,
11
+ });
12
+ }
13
+ //# sourceMappingURL=chatModelProvider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chatModelProvider.js","sourceRoot":"","sources":["../../../src/infra/chat/chatModelProvider.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,mEAAmE;AACnE,MAAM,UAAU,uBAAuB;IACrC,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,OAAO,IAAI,UAAU,CAAC;QACpB,OAAO,EAAE,GAAG,CAAC,WAAW;QACxB,KAAK,EAAE,GAAG,CAAC,qBAAqB,IAAI,GAAG,CAAC,iBAAiB;QACzD,WAAW,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,CAAC,kBAAkB;KAC/B,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { type BaseCheckpointSaver } from "@langchain/langgraph";
2
+ /**
3
+ * Configuration for the checkpointer factory.
4
+ * All fields are optional — environment variables are used as defaults.
5
+ */
6
+ export interface CheckpointerOptions {
7
+ /**
8
+ * Backend to use: `"memory"` or `"sqlite"`.
9
+ * Falls back to `RMS_CHECKPOINTER` env var, then `"memory"`.
10
+ */
11
+ backend?: "memory" | "sqlite" | undefined;
12
+ /**
13
+ * SQLite connection string (file path).
14
+ * Falls back to `RMS_CHECKPOINT_DB` env var, then `"rms_checkpoints.db"`.
15
+ */
16
+ sqliteConnectionString?: string | undefined;
17
+ }
18
+ /**
19
+ * Creates a checkpointer based on configuration.
20
+ *
21
+ * - `"memory"` → in-process {@link MemorySaver} (development/testing only)
22
+ * - `"sqlite"` → durable SQLite-backed saver via `@langchain/langgraph-checkpoint-sqlite`
23
+ *
24
+ * The SQLite backend is dynamically imported so the package is only required
25
+ * when actually selected. This avoids adding a hard dependency for users who
26
+ * don't need HITL persistence.
27
+ *
28
+ * @example
29
+ * ```ts
30
+ * // Uses env vars (RMS_CHECKPOINTER, RMS_CHECKPOINT_DB)
31
+ * const checkpointer = await createCheckpointer();
32
+ *
33
+ * // Explicit configuration
34
+ * const checkpointer = await createCheckpointer({ backend: "sqlite", sqliteConnectionString: "./data/rms.db" });
35
+ * ```
36
+ */
37
+ export declare function createCheckpointer(opts?: CheckpointerOptions): Promise<BaseCheckpointSaver>;
38
+ //# sourceMappingURL=checkpointerFactory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpointerFactory.d.ts","sourceRoot":"","sources":["../../../src/infra/checkpoint/checkpointerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,KAAK,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAI7E;;;GAGG;AACH,MAAM,WAAW,mBAAmB;IAClC;;;OAGG;IACH,OAAO,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC1C;;;OAGG;IACH,sBAAsB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC7C;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,CAAC,EAAE,mBAAmB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAqCjG"}
@@ -0,0 +1,54 @@
1
+ import { MemorySaver } from "@langchain/langgraph";
2
+ import { loadEnv } from "../../config/env.js";
3
+ import { logInfo, logWarn } from "../observability/tracing.js";
4
+ /**
5
+ * Creates a checkpointer based on configuration.
6
+ *
7
+ * - `"memory"` → in-process {@link MemorySaver} (development/testing only)
8
+ * - `"sqlite"` → durable SQLite-backed saver via `@langchain/langgraph-checkpoint-sqlite`
9
+ *
10
+ * The SQLite backend is dynamically imported so the package is only required
11
+ * when actually selected. This avoids adding a hard dependency for users who
12
+ * don't need HITL persistence.
13
+ *
14
+ * @example
15
+ * ```ts
16
+ * // Uses env vars (RMS_CHECKPOINTER, RMS_CHECKPOINT_DB)
17
+ * const checkpointer = await createCheckpointer();
18
+ *
19
+ * // Explicit configuration
20
+ * const checkpointer = await createCheckpointer({ backend: "sqlite", sqliteConnectionString: "./data/rms.db" });
21
+ * ```
22
+ */
23
+ export async function createCheckpointer(opts) {
24
+ const env = loadEnv();
25
+ const backend = opts?.backend ?? env.RMS_CHECKPOINTER;
26
+ if (backend === "sqlite") {
27
+ const connString = opts?.sqliteConnectionString ?? env.RMS_CHECKPOINT_DB;
28
+ logInfo("Creating SQLite checkpointer", { connectionString: connString });
29
+ try {
30
+ // Dynamic import — @langchain/langgraph-checkpoint-sqlite is an optional peer dependency.
31
+ // Variable indirection prevents TS from resolving the module at compile time.
32
+ const pkgName = "@langchain/langgraph-checkpoint-sqlite";
33
+ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment
34
+ const mod = await import(pkgName);
35
+ const SqliteSaver = mod["SqliteSaver"];
36
+ if (!SqliteSaver) {
37
+ throw new Error("SqliteSaver not found in @langchain/langgraph-checkpoint-sqlite");
38
+ }
39
+ return SqliteSaver.fromConnString(connString);
40
+ }
41
+ catch (err) {
42
+ const msg = `Failed to create SQLite checkpointer: ${err instanceof Error ? err.message : String(err)}\n` +
43
+ "Install the package: npm install @langchain/langgraph-checkpoint-sqlite";
44
+ throw new Error(msg, { cause: err });
45
+ }
46
+ }
47
+ logInfo("Creating in-memory checkpointer (MemorySaver)", { backend });
48
+ if (process.env["NODE_ENV"] === "production") {
49
+ logWarn("MemorySaver is not suitable for production. " +
50
+ "Set RMS_CHECKPOINTER=sqlite or inject a durable checkpointer via deps.checkpointer.");
51
+ }
52
+ return new MemorySaver();
53
+ }
54
+ //# sourceMappingURL=checkpointerFactory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"checkpointerFactory.js","sourceRoot":"","sources":["../../../src/infra/checkpoint/checkpointerFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAA4B,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,6BAA6B,CAAC;AAmB/D;;;;;;;;;;;;;;;;;;GAkBG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAA0B;IACjE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,IAAI,GAAG,CAAC,gBAAgB,CAAC;IAEtD,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,MAAM,UAAU,GAAG,IAAI,EAAE,sBAAsB,IAAI,GAAG,CAAC,iBAAiB,CAAC;QACzE,OAAO,CAAC,8BAA8B,EAAE,EAAE,gBAAgB,EAAE,UAAU,EAAE,CAAC,CAAC;QAE1E,IAAI,CAAC;YACH,0FAA0F;YAC1F,8EAA8E;YAC9E,MAAM,OAAO,GAAG,wCAAwC,CAAC;YACzD,mEAAmE;YACnE,MAAM,GAAG,GAA4B,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC;YAC3D,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAExB,CAAC;YACd,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;YACrF,CAAC;YACD,OAAO,WAAW,CAAC,cAAc,CAAC,UAAU,CAAC,CAAC;QAChD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,MAAM,GAAG,GACP,yCAAyC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI;gBAC7F,yEAAyE,CAAC;YAC5E,MAAM,IAAI,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QACvC,CAAC;IACH,CAAC;IAED,OAAO,CAAC,+CAA+C,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC;IACtE,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,KAAK,YAAY,EAAE,CAAC;QAC7C,OAAO,CACL,8CAA8C;YAC5C,qFAAqF,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,WAAW,EAAE,CAAC;AAC3B,CAAC"}
@@ -0,0 +1,58 @@
1
+ import { type TokenBucketLimiter } from "../rateLimit/rateLimiter.js";
2
+ import { type CircuitBreaker } from "../rateLimit/circuitBreaker.js";
3
+ /** Which extraction tier produced the content. */
4
+ export type ExtractionMethod = "article-extractor" | "cheerio" | "snippet";
5
+ /** Result of content extraction from a URL. */
6
+ export interface ExtractedContent {
7
+ /** Extracted readable text (or original snippet as fallback). */
8
+ text: string;
9
+ /** Length of extracted text in characters. */
10
+ extractedLength: number;
11
+ /** True if full page content was fetched; false if fell back to snippet. */
12
+ wasExtracted: boolean;
13
+ /** Which extraction method produced this content. */
14
+ extractionMethod: ExtractionMethod;
15
+ }
16
+ export interface ContentExtractionOptions {
17
+ /** Max characters to extract per page (prevents blowing LLM context). */
18
+ maxChars?: number;
19
+ /** Request timeout per URL in milliseconds. */
20
+ timeoutMs?: number;
21
+ /** User-Agent header for HTTP requests. */
22
+ userAgent?: string;
23
+ /** Override the default content extraction rate limiter (for DI/testing). */
24
+ limiter?: TokenBucketLimiter;
25
+ /** Override the default content extraction circuit breaker (for DI/testing). */
26
+ breaker?: CircuitBreaker;
27
+ }
28
+ /**
29
+ * Extracts readable text content from an HTML page.
30
+ *
31
+ * Strips navigation, ads, scripts, and other non-content elements.
32
+ * Collapses whitespace and truncates to `maxChars`.
33
+ */
34
+ export declare function extractTextFromHtml(html: string, maxChars: number): string;
35
+ /**
36
+ * Fetches a web page and extracts readable text content.
37
+ *
38
+ * Uses a tiered extraction strategy:
39
+ * 1. `@extractus/article-extractor` — smart article detection with its own fetch
40
+ * 2. Direct fetch + Cheerio — fallback HTML parsing pipeline
41
+ * 3. SearXNG snippet — final fallback when both extraction methods fail
42
+ *
43
+ * Each tier only fires when the previous one didn't produce enough content.
44
+ */
45
+ export declare function extractContent(url: string, fallbackSnippet: string, options?: ContentExtractionOptions): Promise<ExtractedContent>;
46
+ /**
47
+ * Batch-extracts content from multiple URLs with concurrency limiting.
48
+ *
49
+ * Returns results in the same order as input URLs. Failed extractions
50
+ * fall back to the provided snippets.
51
+ */
52
+ export declare function batchExtractContent(sources: Array<{
53
+ url: string;
54
+ snippet: string;
55
+ }>, options?: ContentExtractionOptions & {
56
+ concurrency?: number;
57
+ }): Promise<ExtractedContent[]>;
58
+ //# sourceMappingURL=contentExtractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contentExtractor.d.ts","sourceRoot":"","sources":["../../../src/infra/content/contentExtractor.ts"],"names":[],"mappings":"AAGA,OAAO,EAAkB,KAAK,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtF,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,gCAAgC,CAAC;AAGrF,kDAAkD;AAClD,MAAM,MAAM,gBAAgB,GAAG,mBAAmB,GAAG,SAAS,GAAG,SAAS,CAAC;AAE3E,+CAA+C;AAC/C,MAAM,WAAW,gBAAgB;IAC/B,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,8CAA8C;IAC9C,eAAe,EAAE,MAAM,CAAC;IACxB,4EAA4E;IAC5E,YAAY,EAAE,OAAO,CAAC;IACtB,qDAAqD;IACrD,gBAAgB,EAAE,gBAAgB,CAAC;CACpC;AAED,MAAM,WAAW,wBAAwB;IACvC,yEAAyE;IACzE,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,OAAO,CAAC,EAAE,kBAAkB,CAAC;IAC7B,gFAAgF;IAChF,OAAO,CAAC,EAAE,cAAc,CAAC;CAC1B;AAwBD;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAqB1E;AAkHD;;;;;;;;;GASG;AACH,wBAAsB,cAAc,CAClC,GAAG,EAAE,MAAM,EACX,eAAe,EAAE,MAAM,EACvB,OAAO,CAAC,EAAE,wBAAwB,GACjC,OAAO,CAAC,gBAAgB,CAAC,CAsG3B;AAED;;;;;GAKG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,EAChD,OAAO,CAAC,EAAE,wBAAwB,GAAG;IAAE,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GAC5D,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmD7B"}