@devilsdev/rag-core 3.7.1 → 3.8.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -302,6 +302,19 @@ var require_plugin_signature_verifier = __commonJS({
302
302
  format: "jwk"
303
303
  });
304
304
  }
305
+ function rejectReservedKeys(value) {
306
+ if (value === null || typeof value !== "object") return;
307
+ if (Array.isArray(value)) {
308
+ value.forEach(rejectReservedKeys);
309
+ return;
310
+ }
311
+ for (const key of Object.keys(value)) {
312
+ if (key === "__proto__") {
313
+ throw new Error(`Invalid manifest: reserved key "${key}"`);
314
+ }
315
+ rejectReservedKeys(value[key]);
316
+ }
317
+ }
305
318
  function computeContentDigest({ files = [], baseDir, contents = {} } = {}) {
306
319
  const root = path.resolve(baseDir || process.cwd());
307
320
  const entries = /* @__PURE__ */ new Map();
@@ -465,7 +478,7 @@ var require_plugin_signature_verifier = __commonJS({
465
478
  * @private
466
479
  */
467
480
  _verifyContentDigest(canonicalManifest, content) {
468
- const declared = canonicalManifest.contentDigest;
481
+ const declared = Object.hasOwn(canonicalManifest, "contentDigest") ? canonicalManifest.contentDigest : void 0;
469
482
  const hasContent = content && (Array.isArray(content.files) && content.files.length > 0 || content.contents && Object.keys(content.contents).length > 0);
470
483
  if (declared === void 0 || declared === null) {
471
484
  if (this.requireContentDigest) {
@@ -514,6 +527,7 @@ var require_plugin_signature_verifier = __commonJS({
514
527
  */
515
528
  _canonicalizeManifest(manifest) {
516
529
  const canonical = JSON.parse(JSON.stringify(manifest));
530
+ rejectReservedKeys(canonical);
517
531
  delete canonical.signature;
518
532
  delete canonical.signerId;
519
533
  delete canonical.signedAt;
@@ -1370,7 +1384,7 @@ var require_package = __commonJS({
1370
1384
  "package.json"(exports2, module2) {
1371
1385
  module2.exports = {
1372
1386
  name: "@devilsdev/rag-pipeline-utils",
1373
- version: "3.7.1",
1387
+ version: "3.8.1",
1374
1388
  description: "Composable retrieval-augmented generation (RAG) for Node.js: grounded citations, evaluation, guardrails, hybrid retrieval and a CLI.",
1375
1389
  main: "dist/index.cjs",
1376
1390
  type: "commonjs",
@@ -1586,17 +1600,9 @@ var require_package = __commonJS({
1586
1600
  "@octokit/rest": "^21.1.1",
1587
1601
  "@opentelemetry/api": "^1.9.1",
1588
1602
  "@opentelemetry/api-logs": "^0.223.0",
1589
- "@opentelemetry/auto-instrumentations-node": "^0.52.1",
1590
1603
  "@opentelemetry/context-async-hooks": "^2.12.0",
1591
- "@opentelemetry/exporter-jaeger": "^1.26.0",
1592
- "@opentelemetry/exporter-prometheus": "^0.53.0",
1593
- "@opentelemetry/exporter-trace-otlp-http": "^0.53.0",
1594
- "@opentelemetry/resources": "^1.26.0",
1595
1604
  "@opentelemetry/sdk-logs": "^0.223.0",
1596
- "@opentelemetry/sdk-metrics": "^1.26.0",
1597
- "@opentelemetry/sdk-node": "^0.53.0",
1598
1605
  "@opentelemetry/sdk-trace-base": "^2.12.0",
1599
- "@opentelemetry/semantic-conventions": "^1.27.0",
1600
1606
  "@types/jest": "^29.5.14",
1601
1607
  "@types/node": "22.14.1",
1602
1608
  acorn: "8.15.0",
@@ -1611,7 +1617,6 @@ var require_package = __commonJS({
1611
1617
  "docusaurus-plugin-llms": "0.6.1",
1612
1618
  esbuild: "^0.25.2",
1613
1619
  eslint: "^8.57.1",
1614
- "eslint-plugin-storybook": "^0.12.0",
1615
1620
  events: "3.3.0",
1616
1621
  "framer-motion": "^12.7.4",
1617
1622
  husky: "^8.0.3",
@@ -1638,10 +1643,10 @@ var require_package = __commonJS({
1638
1643
  "why-is-node-running": "^3.2.2"
1639
1644
  },
1640
1645
  dependencies: {
1641
- "@devilsdev/rag-connectors": "3.7.1",
1642
- "@devilsdev/rag-core": "3.7.1",
1643
- "@devilsdev/rag-eval": "3.7.1",
1644
- "@devilsdev/rag-guardrails": "3.7.1",
1646
+ "@devilsdev/rag-connectors": "3.8.1",
1647
+ "@devilsdev/rag-core": "3.8.1",
1648
+ "@devilsdev/rag-eval": "3.8.1",
1649
+ "@devilsdev/rag-guardrails": "3.8.1",
1645
1650
  ajv: "^8.17.1",
1646
1651
  axios: "^1.21.0",
1647
1652
  chokidar: "^4.0.3",
@@ -5236,11 +5241,26 @@ var require_chunking_engine = __commonJS({
5236
5241
  }
5237
5242
  });
5238
5243
 
5244
+ // src/retrieval/access-fields.js
5245
+ var require_access_fields = __commonJS({
5246
+ "src/retrieval/access-fields.js"(exports2, module2) {
5247
+ "use strict";
5248
+ function accessFields(doc) {
5249
+ const fields = {};
5250
+ if (doc.acl !== void 0) fields.acl = doc.acl;
5251
+ if (doc.requiredRole !== void 0) fields.requiredRole = doc.requiredRole;
5252
+ return fields;
5253
+ }
5254
+ module2.exports = { accessFields };
5255
+ }
5256
+ });
5257
+
5239
5258
  // src/retrieval/bm25-search.js
5240
5259
  var require_bm25_search = __commonJS({
5241
5260
  "src/retrieval/bm25-search.js"(exports2, module2) {
5242
5261
  "use strict";
5243
5262
  var { EventEmitter } = require("events");
5263
+ var { accessFields } = require_access_fields();
5244
5264
  var scoring = require_scoring();
5245
5265
  var DEFAULT_CONFIG = { k1: 1.2, b: 0.75 };
5246
5266
  var BM25Search = class extends EventEmitter {
@@ -5329,7 +5349,8 @@ var require_bm25_search = __commonJS({
5329
5349
  id: doc.id,
5330
5350
  score,
5331
5351
  content: doc.content || doc.text || "",
5332
- metadata: doc.metadata || {}
5352
+ metadata: doc.metadata || {},
5353
+ ...accessFields(doc)
5333
5354
  });
5334
5355
  }
5335
5356
  results.sort((a, b2) => b2.score - a.score);
@@ -7294,6 +7315,7 @@ var require_memory_retriever = __commonJS({
7294
7315
  var { randomBytes } = require("crypto");
7295
7316
  var { BaseConnector } = require_base_connector();
7296
7317
  var { throwIfAborted } = require_connector_utils();
7318
+ var { accessFields } = require_access_fields();
7297
7319
  var DEFAULT_CONFIG = {
7298
7320
  maxDocuments: 1e5,
7299
7321
  // 'error' rejects a store() that would exceed maxDocuments; 'fifo' evicts
@@ -7375,7 +7397,8 @@ var require_memory_retriever = __commonJS({
7375
7397
  this.documents.set(doc.id, {
7376
7398
  vector: doc.vector,
7377
7399
  metadata: doc.metadata || {},
7378
- content: doc.content || ""
7400
+ content: doc.content || "",
7401
+ ...accessFields(doc)
7379
7402
  });
7380
7403
  }
7381
7404
  if (vectors.length > 0) this.dimensions = dimensions;
@@ -7433,7 +7456,8 @@ var require_memory_retriever = __commonJS({
7433
7456
  id,
7434
7457
  score,
7435
7458
  metadata: doc.metadata,
7436
- content: doc.content
7459
+ content: doc.content,
7460
+ ...accessFields(doc)
7437
7461
  });
7438
7462
  }
7439
7463
  results.sort((a, b) => b.score - a.score);
@@ -7601,6 +7625,7 @@ var modules = {
7601
7625
  "reranker/cascade-reranker.js": () => require_cascade_reranker(),
7602
7626
  "reranker/embedding-reranker.js": () => require_embedding_reranker(),
7603
7627
  "reranker/scoring-reranker.js": () => require_scoring_reranker(),
7628
+ "retrieval/access-fields.js": () => require_access_fields(),
7604
7629
  "retrieval/bm25-search.js": () => require_bm25_search(),
7605
7630
  "retrieval/hybrid-retriever.js": () => require_hybrid_retriever(),
7606
7631
  "retrieval/rank-fusion.js": () => require_rank_fusion(),
@@ -0,0 +1,8 @@
1
+ /**
2
+ * The access fields (`acl`, `requiredRole`) set on a document's top level.
3
+ * Stores keep them on each result, as well as whatever metadata holds, so
4
+ * RetrievalGuard sees a restriction wherever it was set.
5
+ * @param {object} doc
6
+ * @returns {object}
7
+ */
8
+ export function accessFields(doc: object): object;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devilsdev/rag-core",
3
- "version": "3.7.1",
3
+ "version": "3.8.1",
4
4
  "description": "createRagPipeline and its building blocks: retrieval, reranking, caching, cost tracking and model routing.",
5
5
  "keywords": [
6
6
  "rag",