@carlonicora/nestjs-neo4jsonapi 2.1.0 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/graph/graph.module.d.ts.map +1 -1
- package/dist/agents/graph/graph.module.js +3 -0
- package/dist/agents/graph/graph.module.js.map +1 -1
- package/dist/agents/graph/interfaces/graph.catalog.interface.d.ts +24 -0
- package/dist/agents/graph/interfaces/graph.catalog.interface.d.ts.map +1 -1
- package/dist/agents/graph/services/graph.catalog.service.d.ts +9 -0
- package/dist/agents/graph/services/graph.catalog.service.d.ts.map +1 -1
- package/dist/agents/graph/services/graph.catalog.service.js +61 -1
- package/dist/agents/graph/services/graph.catalog.service.js.map +1 -1
- package/dist/agents/graph/services/graph.search.service.d.ts +16 -1
- package/dist/agents/graph/services/graph.search.service.d.ts.map +1 -1
- package/dist/agents/graph/services/graph.search.service.js +51 -4
- package/dist/agents/graph/services/graph.search.service.js.map +1 -1
- package/dist/agents/graph/services/humanize-tool.d.ts +17 -2
- package/dist/agents/graph/services/humanize-tool.d.ts.map +1 -1
- package/dist/agents/graph/services/humanize-tool.js +71 -6
- package/dist/agents/graph/services/humanize-tool.js.map +1 -1
- package/dist/agents/graph/services/materialise-bridge.d.ts +6 -0
- package/dist/agents/graph/services/materialise-bridge.d.ts.map +1 -1
- package/dist/agents/graph/services/materialise-bridge.js +17 -1
- package/dist/agents/graph/services/materialise-bridge.js.map +1 -1
- package/dist/agents/graph/services/scope.guard.d.ts +43 -0
- package/dist/agents/graph/services/scope.guard.d.ts.map +1 -0
- package/dist/agents/graph/services/scope.guard.js +91 -0
- package/dist/agents/graph/services/scope.guard.js.map +1 -0
- package/dist/agents/graph/tools/read-entity.tool.d.ts +9 -1
- package/dist/agents/graph/tools/read-entity.tool.d.ts.map +1 -1
- package/dist/agents/graph/tools/read-entity.tool.js +30 -5
- package/dist/agents/graph/tools/read-entity.tool.js.map +1 -1
- package/dist/agents/graph/tools/resolve-entity.tool.d.ts.map +1 -1
- package/dist/agents/graph/tools/resolve-entity.tool.js +8 -1
- package/dist/agents/graph/tools/resolve-entity.tool.js.map +1 -1
- package/dist/agents/graph/tools/search-entities.tool.d.ts +9 -1
- package/dist/agents/graph/tools/search-entities.tool.d.ts.map +1 -1
- package/dist/agents/graph/tools/search-entities.tool.js +37 -8
- package/dist/agents/graph/tools/search-entities.tool.js.map +1 -1
- package/dist/agents/graph/tools/tool.factory.d.ts +4 -0
- package/dist/agents/graph/tools/tool.factory.d.ts.map +1 -1
- package/dist/agents/graph/tools/tool.factory.js.map +1 -1
- package/dist/agents/graph/tools/traverse.tool.d.ts +9 -1
- package/dist/agents/graph/tools/traverse.tool.d.ts.map +1 -1
- package/dist/agents/graph/tools/traverse.tool.js +21 -5
- package/dist/agents/graph/tools/traverse.tool.js.map +1 -1
- package/dist/agents/operator/contexts/operator.context.d.ts +4 -0
- package/dist/agents/operator/contexts/operator.context.d.ts.map +1 -1
- package/dist/agents/operator/contexts/operator.context.js +4 -0
- package/dist/agents/operator/contexts/operator.context.js.map +1 -1
- package/dist/agents/operator/operator.module.d.ts.map +1 -1
- package/dist/agents/operator/operator.module.js +4 -0
- package/dist/agents/operator/operator.module.js.map +1 -1
- package/dist/agents/operator/services/operator.service.d.ts +8 -0
- package/dist/agents/operator/services/operator.service.d.ts.map +1 -1
- package/dist/agents/operator/services/operator.service.js +8 -0
- package/dist/agents/operator/services/operator.service.js.map +1 -1
- package/dist/agents/operator/tools/entity-write.tools.d.ts +124 -0
- package/dist/agents/operator/tools/entity-write.tools.d.ts.map +1 -0
- package/dist/agents/operator/tools/entity-write.tools.js +471 -0
- package/dist/agents/operator/tools/entity-write.tools.js.map +1 -0
- package/dist/agents/operator/tools/operator.tool.registry.d.ts +5 -1
- package/dist/agents/operator/tools/operator.tool.registry.d.ts.map +1 -1
- package/dist/agents/operator/tools/operator.tool.registry.js +19 -2
- package/dist/agents/operator/tools/operator.tool.registry.js.map +1 -1
- package/dist/agents/operator/tools/search-documents.tool.d.ts +16 -1
- package/dist/agents/operator/tools/search-documents.tool.d.ts.map +1 -1
- package/dist/agents/operator/tools/search-documents.tool.js +59 -3
- package/dist/agents/operator/tools/search-documents.tool.js.map +1 -1
- package/dist/agents/prompts/index.d.ts +1 -0
- package/dist/agents/prompts/index.d.ts.map +1 -1
- package/dist/agents/prompts/index.js +7 -1
- package/dist/agents/prompts/index.js.map +1 -1
- package/dist/agents/responder/contexts/responder.context.d.ts +12 -0
- package/dist/agents/responder/contexts/responder.context.d.ts.map +1 -1
- package/dist/agents/responder/contexts/responder.context.js +4 -0
- package/dist/agents/responder/contexts/responder.context.js.map +1 -1
- package/dist/agents/responder/factories/responder.context.factory.d.ts +4 -0
- package/dist/agents/responder/factories/responder.context.factory.d.ts.map +1 -1
- package/dist/agents/responder/factories/responder.context.factory.js +2 -0
- package/dist/agents/responder/factories/responder.context.factory.js.map +1 -1
- package/dist/agents/responder/nodes/graph.node.service.d.ts.map +1 -1
- package/dist/agents/responder/nodes/graph.node.service.js +18 -2
- package/dist/agents/responder/nodes/graph.node.service.js.map +1 -1
- package/dist/agents/responder/nodes/responder.answer.node.service.d.ts +32 -0
- package/dist/agents/responder/nodes/responder.answer.node.service.d.ts.map +1 -1
- package/dist/agents/responder/nodes/responder.answer.node.service.js +31 -19
- package/dist/agents/responder/nodes/responder.answer.node.service.js.map +1 -1
- package/dist/agents/responder/services/responder.service.d.ts +4 -0
- package/dist/agents/responder/services/responder.service.d.ts.map +1 -1
- package/dist/agents/responder/services/responder.service.js +2 -0
- package/dist/agents/responder/services/responder.service.js.map +1 -1
- package/dist/common/interfaces/entity.schema.interface.d.ts +16 -0
- package/dist/common/interfaces/entity.schema.interface.d.ts.map +1 -1
- package/dist/config/interfaces/config.prompts.interface.d.ts +12 -0
- package/dist/config/interfaces/config.prompts.interface.d.ts.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.d.ts +23 -14
- package/dist/core/blocknote/services/blocknote.service.d.ts.map +1 -1
- package/dist/core/blocknote/services/blocknote.service.js +48 -32
- package/dist/core/blocknote/services/blocknote.service.js.map +1 -1
- package/dist/core/llm/services/llm.service.d.ts.map +1 -1
- package/dist/core/llm/services/llm.service.js +34 -2
- package/dist/core/llm/services/llm.service.js.map +1 -1
- package/dist/core/llm/services/tool-error-feedback.d.ts +40 -0
- package/dist/core/llm/services/tool-error-feedback.d.ts.map +1 -0
- package/dist/core/llm/services/tool-error-feedback.js +131 -0
- package/dist/core/llm/services/tool-error-feedback.js.map +1 -0
- package/dist/foundations/assistant/assistant.module.d.ts.map +1 -1
- package/dist/foundations/assistant/assistant.module.js +7 -1
- package/dist/foundations/assistant/assistant.module.js.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts +13 -1
- package/dist/foundations/assistant/controllers/assistant.controller.d.ts.map +1 -1
- package/dist/foundations/assistant/controllers/assistant.controller.js +37 -3
- package/dist/foundations/assistant/controllers/assistant.controller.js.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts +6 -0
- package/dist/foundations/assistant/dtos/assistant-append.dto.d.ts.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-append.dto.js +1 -1
- package/dist/foundations/assistant/dtos/assistant-append.dto.js.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts +29 -0
- package/dist/foundations/assistant/dtos/assistant-post.dto.d.ts.map +1 -1
- package/dist/foundations/assistant/dtos/assistant-post.dto.js +47 -2
- package/dist/foundations/assistant/dtos/assistant-post.dto.js.map +1 -1
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts +22 -0
- package/dist/foundations/assistant/repositories/assistant.repository.d.ts.map +1 -1
- package/dist/foundations/assistant/repositories/assistant.repository.js +28 -0
- package/dist/foundations/assistant/repositories/assistant.repository.js.map +1 -1
- package/dist/foundations/assistant/services/assistant-mention.extractor.d.ts +36 -0
- package/dist/foundations/assistant/services/assistant-mention.extractor.d.ts.map +1 -0
- package/dist/foundations/assistant/services/assistant-mention.extractor.js +99 -0
- package/dist/foundations/assistant/services/assistant-mention.extractor.js.map +1 -0
- package/dist/foundations/assistant/services/assistant.service.d.ts +84 -2
- package/dist/foundations/assistant/services/assistant.service.d.ts.map +1 -1
- package/dist/foundations/assistant/services/assistant.service.js +312 -60
- package/dist/foundations/assistant/services/assistant.service.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"humanize-tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/humanize-tool.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"humanize-tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/humanize-tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,6 +2,7 @@ import { CatalogEntity } from "../interfaces/graph.catalog.interface";
|
|
|
2
2
|
import { GraphCatalogService } from "./graph.catalog.service";
|
|
3
3
|
import { EntityServiceRegistry } from "../../../common/registries/entity.service.registry";
|
|
4
4
|
import { UserContext } from "../tools/tool.factory";
|
|
5
|
+
import { ScopeGuard } from "./scope.guard";
|
|
5
6
|
/** Hard cap per cardinality-many materialised relationship. */
|
|
6
7
|
export declare const MATERIALISE_LIMIT = 50;
|
|
7
8
|
export interface BridgeRecordIn {
|
|
@@ -24,6 +25,11 @@ export interface BridgeRecordOut {
|
|
|
24
25
|
export interface MaterialiseBridgeDeps {
|
|
25
26
|
catalog: GraphCatalogService;
|
|
26
27
|
registry: EntityServiceRegistry;
|
|
28
|
+
/**
|
|
29
|
+
* Optional so pre-existing call sites keep compiling; supplied by every
|
|
30
|
+
* production call site. Only consulted for a scoped run.
|
|
31
|
+
*/
|
|
32
|
+
scopeGuard?: ScopeGuard;
|
|
27
33
|
}
|
|
28
34
|
export declare function materialiseBridge(params: {
|
|
29
35
|
bridge: CatalogEntity;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialise-bridge.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"materialise-bridge.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAK3C,+DAA+D;AAC/D,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,uFAAuF;IACvF,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,IAAI,CAAA;KAAE,CAAC,CAAC;IAElE,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,mBAAmB,CAAC;IAC7B,QAAQ,EAAE,qBAAqB,CAAC;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAoBD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE;IAC9C,MAAM,EAAE,aAAa,CAAC;IACtB,MAAM,EAAE,cAAc,CAAC;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,IAAI,EAAE,qBAAqB,CAAC;IAC5B,qFAAqF;IACrF,cAAc,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CAC3D,GAAG,OAAO,CAAC,eAAe,CAAC,CA0E3B"}
|
|
@@ -7,6 +7,19 @@ const field_formatting_1 = require("./field-formatting");
|
|
|
7
7
|
const logger = new common_1.Logger("materialiseBridge");
|
|
8
8
|
/** Hard cap per cardinality-many materialised relationship. */
|
|
9
9
|
exports.MATERIALISE_LIMIT = 50;
|
|
10
|
+
/**
|
|
11
|
+
* Drop records outside the run's scope. An unscoped run short-circuits before
|
|
12
|
+
* the guard is consulted. A scoped run without a guard is a wiring error and
|
|
13
|
+
* throws rather than silently returning cross-scope records.
|
|
14
|
+
*/
|
|
15
|
+
async function filterInScope(type, records, ctx, scopeGuard) {
|
|
16
|
+
if (!ctx.scopeId || !ctx.scopeType)
|
|
17
|
+
return records;
|
|
18
|
+
if (!scopeGuard) {
|
|
19
|
+
throw new Error("materialiseBridge: a scoped run requires deps.scopeGuard.");
|
|
20
|
+
}
|
|
21
|
+
return scopeGuard.filter({ type, records, ctx });
|
|
22
|
+
}
|
|
10
23
|
async function materialiseBridge(params) {
|
|
11
24
|
const { bridge, record, ctx, deps } = params;
|
|
12
25
|
if (!bridge.bridge) {
|
|
@@ -40,13 +53,16 @@ async function materialiseBridge(params) {
|
|
|
40
53
|
continue;
|
|
41
54
|
}
|
|
42
55
|
const targetDirection = rel.cypherDirection === "out" ? "in" : "out";
|
|
43
|
-
const
|
|
56
|
+
const fanned = await targetSvc.findRelatedRecordsByEdge({
|
|
44
57
|
cypherLabel: rel.cypherLabel,
|
|
45
58
|
cypherDirection: targetDirection,
|
|
46
59
|
relatedLabel: bridge.labelName,
|
|
47
60
|
relatedId: record.id,
|
|
48
61
|
limit: exports.MATERIALISE_LIMIT + 1, // overfetch by one to detect truncation cheaply
|
|
49
62
|
});
|
|
63
|
+
// Bridge fanout is a data-access point like any other: a scoped run must
|
|
64
|
+
// not see fanned-out records from another scope root.
|
|
65
|
+
const records = await filterInScope(target.type, fanned, ctx, deps.scopeGuard);
|
|
50
66
|
const truncated = records.length > exports.MATERIALISE_LIMIT;
|
|
51
67
|
const visible = records.slice(0, exports.MATERIALISE_LIMIT);
|
|
52
68
|
const summariser = target.summary ?? ((d) => String(d.name ?? d.id));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"materialise-bridge.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"materialise-bridge.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/materialise-bridge.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { Neo4jService } from "../../../core/neo4j/services/neo4j.service";
|
|
2
|
+
import { CatalogEntity } from "../interfaces/graph.catalog.interface";
|
|
3
|
+
import { GraphCatalogService } from "./graph.catalog.service";
|
|
4
|
+
import { UserContext } from "../tools/tool.factory";
|
|
5
|
+
/**
|
|
6
|
+
* Single place a scope predicate is built or applied. Every agent data-access
|
|
7
|
+
* point routes through here so "which campaign is this run confined to" has
|
|
8
|
+
* exactly one answer.
|
|
9
|
+
*
|
|
10
|
+
* Fail-closed rule: in a scoped run, a type with no compiled scope chain is
|
|
11
|
+
* treated as OUT of scope. The alternative — treating it as universally
|
|
12
|
+
* visible — is a cross-scope leak, which is the whole failure this service
|
|
13
|
+
* exists to prevent.
|
|
14
|
+
*/
|
|
15
|
+
export declare class ScopeGuard {
|
|
16
|
+
private readonly catalog;
|
|
17
|
+
private readonly neo4j;
|
|
18
|
+
private readonly logger;
|
|
19
|
+
constructor(catalog: GraphCatalogService, neo4j: Neo4jService);
|
|
20
|
+
buildMatchClause(params: {
|
|
21
|
+
entity: CatalogEntity;
|
|
22
|
+
ctx: UserContext;
|
|
23
|
+
nodeAlias: string;
|
|
24
|
+
}): {
|
|
25
|
+
cypher: string;
|
|
26
|
+
params: Record<string, unknown>;
|
|
27
|
+
} | null;
|
|
28
|
+
isInScope(params: {
|
|
29
|
+
type: string;
|
|
30
|
+
id: string;
|
|
31
|
+
ctx: UserContext;
|
|
32
|
+
}): Promise<boolean>;
|
|
33
|
+
filter<T extends {
|
|
34
|
+
id: string;
|
|
35
|
+
}>(params: {
|
|
36
|
+
type: string;
|
|
37
|
+
records: T[];
|
|
38
|
+
ctx: UserContext;
|
|
39
|
+
}): Promise<T[]>;
|
|
40
|
+
/** `(alias)-[:REL]->(:Label)…-[:REL]->(:Root { id: $scopeId })` */
|
|
41
|
+
private buildPattern;
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=scope.guard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.guard.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/services/scope.guard.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,4CAA4C,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD;;;;;;;;;GASG;AACH,qBACa,UAAU;IAInB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAA+B;gBAGnC,OAAO,EAAE,mBAAmB,EAC5B,KAAK,EAAE,YAAY;IAGtC,gBAAgB,CAAC,MAAM,EAAE;QACvB,MAAM,EAAE,aAAa,CAAC;QACtB,GAAG,EAAE,WAAW,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,GAAG;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,GAAG,IAAI;IAYxD,SAAS,CAAC,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAKnF,MAAM,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,EAAE,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QAAC,GAAG,EAAE,WAAW,CAAA;KAAE,GAAG,OAAO,CAAC,CAAC,EAAE,CAAC;IAiC9G,mEAAmE;IACnE,OAAO,CAAC,YAAY;CASrB"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
6
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
|
+
};
|
|
8
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
|
+
};
|
|
11
|
+
var ScopeGuard_1;
|
|
12
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
|
+
exports.ScopeGuard = void 0;
|
|
14
|
+
const common_1 = require("@nestjs/common");
|
|
15
|
+
const neo4j_service_1 = require("../../../core/neo4j/services/neo4j.service");
|
|
16
|
+
const graph_catalog_service_1 = require("./graph.catalog.service");
|
|
17
|
+
/**
|
|
18
|
+
* Single place a scope predicate is built or applied. Every agent data-access
|
|
19
|
+
* point routes through here so "which campaign is this run confined to" has
|
|
20
|
+
* exactly one answer.
|
|
21
|
+
*
|
|
22
|
+
* Fail-closed rule: in a scoped run, a type with no compiled scope chain is
|
|
23
|
+
* treated as OUT of scope. The alternative — treating it as universally
|
|
24
|
+
* visible — is a cross-scope leak, which is the whole failure this service
|
|
25
|
+
* exists to prevent.
|
|
26
|
+
*/
|
|
27
|
+
let ScopeGuard = ScopeGuard_1 = class ScopeGuard {
|
|
28
|
+
constructor(catalog, neo4j) {
|
|
29
|
+
this.catalog = catalog;
|
|
30
|
+
this.neo4j = neo4j;
|
|
31
|
+
this.logger = new common_1.Logger(ScopeGuard_1.name);
|
|
32
|
+
}
|
|
33
|
+
buildMatchClause(params) {
|
|
34
|
+
if (!params.ctx.scopeId || !params.ctx.scopeType)
|
|
35
|
+
return null;
|
|
36
|
+
const scope = params.entity.scope;
|
|
37
|
+
if (!scope || scope.rootType !== params.ctx.scopeType)
|
|
38
|
+
return null;
|
|
39
|
+
const pattern = this.buildPattern(scope, params.nodeAlias);
|
|
40
|
+
return {
|
|
41
|
+
cypher: `AND EXISTS { MATCH ${pattern} }`,
|
|
42
|
+
params: { scopeId: params.ctx.scopeId },
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
async isInScope(params) {
|
|
46
|
+
const kept = await this.filter({ type: params.type, records: [{ id: params.id }], ctx: params.ctx });
|
|
47
|
+
return kept.length === 1;
|
|
48
|
+
}
|
|
49
|
+
async filter(params) {
|
|
50
|
+
if (!params.ctx.scopeId || !params.ctx.scopeType)
|
|
51
|
+
return params.records;
|
|
52
|
+
if (params.records.length === 0)
|
|
53
|
+
return params.records;
|
|
54
|
+
const entity = this.catalog.getEntityDetail(params.type, params.ctx.userModuleIds);
|
|
55
|
+
const scope = entity?.scope;
|
|
56
|
+
if (!entity || !scope || scope.rootType !== params.ctx.scopeType) {
|
|
57
|
+
this.logger.warn(`filter: type "${params.type}" has no scope chain to "${params.ctx.scopeType}" — dropping ${params.records.length} record(s).`);
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
if (scope.path.length === 0) {
|
|
61
|
+
// The entity IS the root: it is in scope iff it is the scope root itself.
|
|
62
|
+
return params.records.filter((record) => record.id === params.ctx.scopeId);
|
|
63
|
+
}
|
|
64
|
+
const pattern = this.buildPattern(scope, "node");
|
|
65
|
+
const result = await this.neo4j.read(`
|
|
66
|
+
MATCH (node:${entity.labelName})
|
|
67
|
+
WHERE node.id IN $ids
|
|
68
|
+
AND EXISTS { MATCH ${pattern} }
|
|
69
|
+
RETURN node.id AS id
|
|
70
|
+
`, { ids: params.records.map((record) => record.id), scopeId: params.ctx.scopeId });
|
|
71
|
+
const allowed = new Set((result.records ?? []).map((row) => row.get("id")));
|
|
72
|
+
return params.records.filter((record) => allowed.has(record.id));
|
|
73
|
+
}
|
|
74
|
+
/** `(alias)-[:REL]->(:Label)…-[:REL]->(:Root { id: $scopeId })` */
|
|
75
|
+
buildPattern(scope, alias) {
|
|
76
|
+
let pattern = `(${alias})`;
|
|
77
|
+
scope.path.forEach((hop, index) => {
|
|
78
|
+
const isLast = index === scope.path.length - 1;
|
|
79
|
+
const node = isLast ? `(:${hop.targetLabel} { id: $scopeId })` : `(:${hop.targetLabel})`;
|
|
80
|
+
pattern += hop.cypherDirection === "out" ? `-[:${hop.cypherLabel}]->${node}` : `<-[:${hop.cypherLabel}]-${node}`;
|
|
81
|
+
});
|
|
82
|
+
return pattern;
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
exports.ScopeGuard = ScopeGuard;
|
|
86
|
+
exports.ScopeGuard = ScopeGuard = ScopeGuard_1 = __decorate([
|
|
87
|
+
(0, common_1.Injectable)(),
|
|
88
|
+
__metadata("design:paramtypes", [graph_catalog_service_1.GraphCatalogService,
|
|
89
|
+
neo4j_service_1.Neo4jService])
|
|
90
|
+
], ScopeGuard);
|
|
91
|
+
//# sourceMappingURL=scope.guard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scope.guard.js","sourceRoot":"","sources":["../../../../src/agents/graph/services/scope.guard.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,7 @@ import { z } from "zod";
|
|
|
3
3
|
import { ToolFactory, ToolCallRecord, UserContext } from "./tool.factory";
|
|
4
4
|
import { GraphCatalogService } from "../services/graph.catalog.service";
|
|
5
5
|
import { EntityServiceRegistry } from "../../../common/registries/entity.service.registry";
|
|
6
|
+
import { ScopeGuard } from "../services/scope.guard";
|
|
6
7
|
declare const inputSchema: z.ZodObject<{
|
|
7
8
|
type: z.ZodString;
|
|
8
9
|
id: z.ZodString;
|
|
@@ -13,8 +14,15 @@ export declare class ReadEntityTool {
|
|
|
13
14
|
private readonly factory;
|
|
14
15
|
private readonly catalog;
|
|
15
16
|
private readonly registry;
|
|
16
|
-
|
|
17
|
+
private readonly scopeGuard;
|
|
18
|
+
constructor(factory: ToolFactory, catalog: GraphCatalogService, registry: EntityServiceRegistry, scopeGuard: ScopeGuard);
|
|
17
19
|
build(ctx: UserContext, recorder: ToolCallRecord[]): DynamicStructuredTool;
|
|
18
20
|
invoke(input: z.infer<typeof inputSchema>, ctx: UserContext, recorder: ToolCallRecord[]): Promise<unknown>;
|
|
21
|
+
/**
|
|
22
|
+
* Drop records outside the run's scope. An unscoped run short-circuits
|
|
23
|
+
* before the guard is consulted — the same contract ScopeGuard.filter
|
|
24
|
+
* applies internally, restated here so an unscoped run never depends on it.
|
|
25
|
+
*/
|
|
26
|
+
private filterInScope;
|
|
19
27
|
}
|
|
20
28
|
//# sourceMappingURL=read-entity.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"read-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAG1E,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAErD,QAAA,MAAM,WAAW;;;;iBAIf,CAAC;AAEH,OAAO,EAAE,WAAW,IAAI,qBAAqB,EAAE,CAAC;AAEhD,qBACa,cAAc;IAEvB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAGzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBALV,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,qBAAqB,EAG/B,UAAU,EAAE,UAAU;IAGzC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IASpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IA6GhH;;;;OAIG;YACW,aAAa;CAI5B"}
|
|
@@ -18,6 +18,7 @@ const field_formatting_1 = require("../services/field-formatting");
|
|
|
18
18
|
const materialise_bridge_1 = require("../services/materialise-bridge");
|
|
19
19
|
const graph_catalog_service_1 = require("../services/graph.catalog.service");
|
|
20
20
|
const entity_service_registry_1 = require("../../../common/registries/entity.service.registry");
|
|
21
|
+
const scope_guard_1 = require("../services/scope.guard");
|
|
21
22
|
const inputSchema = zod_1.z.object({
|
|
22
23
|
type: zod_1.z.string(),
|
|
23
24
|
id: zod_1.z.string(),
|
|
@@ -25,10 +26,14 @@ const inputSchema = zod_1.z.object({
|
|
|
25
26
|
});
|
|
26
27
|
exports.readEntityInputSchema = inputSchema;
|
|
27
28
|
let ReadEntityTool = class ReadEntityTool {
|
|
28
|
-
constructor(factory, catalog, registry
|
|
29
|
+
constructor(factory, catalog, registry,
|
|
30
|
+
// ScopeGuard is deliberately the LAST constructor parameter so existing
|
|
31
|
+
// positional call sites keep working.
|
|
32
|
+
scopeGuard) {
|
|
29
33
|
this.factory = factory;
|
|
30
34
|
this.catalog = catalog;
|
|
31
35
|
this.registry = registry;
|
|
36
|
+
this.scopeGuard = scopeGuard;
|
|
32
37
|
}
|
|
33
38
|
build(ctx, recorder) {
|
|
34
39
|
return new tools_1.DynamicStructuredTool({
|
|
@@ -60,6 +65,15 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
60
65
|
const svc = this.factory.resolveService(entity.type);
|
|
61
66
|
if (!svc)
|
|
62
67
|
return { error: `Service not available for "${entity.type}".` };
|
|
68
|
+
// An out-of-scope id must be indistinguishable from a non-existent
|
|
69
|
+
// one, and must never cause the record to be read at all.
|
|
70
|
+
if (ctx.scopeId && ctx.scopeType) {
|
|
71
|
+
const inScope = await this.scopeGuard.isInScope({ type: entity.type, id: input.id, ctx });
|
|
72
|
+
// Byte-identical to the missing-record message below: a different
|
|
73
|
+
// string would tell the caller "this exists, in another scope".
|
|
74
|
+
if (!inScope)
|
|
75
|
+
return { error: `No ${entity.type} with id ${input.id}.` };
|
|
76
|
+
}
|
|
63
77
|
const record = await svc.findRecordById({ id: input.id });
|
|
64
78
|
if (!record)
|
|
65
79
|
return { error: `No ${entity.type} with id ${input.id}.` };
|
|
@@ -75,13 +89,13 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
75
89
|
// Use edge-based lookup so this works for relationships that are
|
|
76
90
|
// reverse-only on the catalog (not declared on the target descriptor).
|
|
77
91
|
const targetDirection = rel.cypherDirection === "out" ? "in" : "out";
|
|
78
|
-
const records = await targetSvc.findRelatedRecordsByEdge({
|
|
92
|
+
const records = await this.filterInScope(rel.targetType, await targetSvc.findRelatedRecordsByEdge({
|
|
79
93
|
cypherLabel: rel.cypherLabel,
|
|
80
94
|
cypherDirection: targetDirection,
|
|
81
95
|
relatedLabel: entity.labelName,
|
|
82
96
|
relatedId: input.id,
|
|
83
97
|
limit: 50,
|
|
84
|
-
});
|
|
98
|
+
}), ctx);
|
|
85
99
|
const targetEntity = this.factory.resolveEntity(rel.targetType, ctx);
|
|
86
100
|
const summariser = "error" in targetEntity
|
|
87
101
|
? (d) => String(d.id)
|
|
@@ -103,7 +117,7 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
103
117
|
bridge: entity,
|
|
104
118
|
record: { id: record.id, fields: baseFields },
|
|
105
119
|
ctx,
|
|
106
|
-
deps: { catalog: this.catalog, registry: this.registry },
|
|
120
|
+
deps: { catalog: this.catalog, registry: this.registry, scopeGuard: this.scopeGuard },
|
|
107
121
|
onMaterialised: (relName, count) => localMaterialised.push({ relName, count }),
|
|
108
122
|
});
|
|
109
123
|
return input.include?.length ? { ...materialised, related } : materialised;
|
|
@@ -121,12 +135,23 @@ let ReadEntityTool = class ReadEntityTool {
|
|
|
121
135
|
}
|
|
122
136
|
return result;
|
|
123
137
|
}
|
|
138
|
+
/**
|
|
139
|
+
* Drop records outside the run's scope. An unscoped run short-circuits
|
|
140
|
+
* before the guard is consulted — the same contract ScopeGuard.filter
|
|
141
|
+
* applies internally, restated here so an unscoped run never depends on it.
|
|
142
|
+
*/
|
|
143
|
+
async filterInScope(type, records, ctx) {
|
|
144
|
+
if (!ctx.scopeId || !ctx.scopeType)
|
|
145
|
+
return records;
|
|
146
|
+
return this.scopeGuard.filter({ type, records, ctx });
|
|
147
|
+
}
|
|
124
148
|
};
|
|
125
149
|
exports.ReadEntityTool = ReadEntityTool;
|
|
126
150
|
exports.ReadEntityTool = ReadEntityTool = __decorate([
|
|
127
151
|
(0, common_1.Injectable)(),
|
|
128
152
|
__metadata("design:paramtypes", [tool_factory_1.ToolFactory,
|
|
129
153
|
graph_catalog_service_1.GraphCatalogService,
|
|
130
|
-
entity_service_registry_1.EntityServiceRegistry
|
|
154
|
+
entity_service_registry_1.EntityServiceRegistry,
|
|
155
|
+
scope_guard_1.ScopeGuard])
|
|
131
156
|
], ReadEntityTool);
|
|
132
157
|
//# sourceMappingURL=read-entity.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"read-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAC1E,mEAAqE;AACrE,uEAAmE;AACnE,6EAAwE;AACxE,gGAA2F;
|
|
1
|
+
{"version":3,"file":"read-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/read-entity.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/resolve-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,QAAA,MAAM,WAAW;;iBAEf,CAAC;AAEH,OAAO,EAAE,WAAW,IAAI,wBAAwB,EAAE,CAAC;AAEnD,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,kBAAkB;IAG7C,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IAUpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"resolve-entity.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/resolve-entity.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AAEtE,QAAA,MAAM,WAAW;;iBAEf,CAAC;AAEH,OAAO,EAAE,WAAW,IAAI,wBAAwB,EAAE,CAAC;AAEnD,qBACa,iBAAiB;IAE1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBADN,OAAO,EAAE,WAAW,EACpB,MAAM,EAAE,kBAAkB;IAG7C,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IAUpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;CAkBjH"}
|
|
@@ -33,10 +33,17 @@ let ResolveEntityTool = class ResolveEntityTool {
|
|
|
33
33
|
});
|
|
34
34
|
}
|
|
35
35
|
async invoke(input, ctx, recorder) {
|
|
36
|
-
return this.factory.capture({ tool: "resolve_entity", input }, async () =>
|
|
36
|
+
return this.factory.capture({ tool: "resolve_entity", input }, async () =>
|
|
37
|
+
// scopeId/scopeType are load-bearing: without them GraphSearchService
|
|
38
|
+
// skips its scope predicate entirely and name resolution ranks
|
|
39
|
+
// candidates from every scope root in the company, leaking names and
|
|
40
|
+
// types across campaigns even though read/traverse would refuse them.
|
|
41
|
+
this.search.resolveEntity({
|
|
37
42
|
text: input.text,
|
|
38
43
|
companyId: ctx.companyId,
|
|
39
44
|
userModuleIds: ctx.userModuleIds,
|
|
45
|
+
scopeId: ctx.scopeId,
|
|
46
|
+
scopeType: ctx.scopeType,
|
|
40
47
|
}), recorder);
|
|
41
48
|
}
|
|
42
49
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolve-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/resolve-entity.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAC1E,2EAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uEAAuE,CAAC;CAC1G,CAAC,CAAC;AAEqB,+CAAwB;AAGzC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACmB,OAAoB,EACpB,MAA0B;QAD1B,YAAO,GAAP,OAAO,CAAa;QACpB,WAAM,GAAN,MAAM,CAAoB;IAC1C,CAAC;IAEJ,KAAK,CAAC,GAAgB,EAAE,QAA0B;QAChD,OAAO,IAAI,6BAAqB,CAAC;YAC/B,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,yPAAyP;YAC3P,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkC,EAAE,GAAgB,EAAE,QAA0B;QAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACzB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EACjC,KAAK,IAAI,EAAE,
|
|
1
|
+
{"version":3,"file":"resolve-entity.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/resolve-entity.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAC1E,2EAAsE;AAEtE,MAAM,WAAW,GAAG,OAAC,CAAC,MAAM,CAAC;IAC3B,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,uEAAuE,CAAC;CAC1G,CAAC,CAAC;AAEqB,+CAAwB;AAGzC,IAAM,iBAAiB,GAAvB,MAAM,iBAAiB;IAC5B,YACmB,OAAoB,EACpB,MAA0B;QAD1B,YAAO,GAAP,OAAO,CAAa;QACpB,WAAM,GAAN,MAAM,CAAoB;IAC1C,CAAC;IAEJ,KAAK,CAAC,GAAgB,EAAE,QAA0B;QAChD,OAAO,IAAI,6BAAqB,CAAC;YAC/B,IAAI,EAAE,gBAAgB;YACtB,WAAW,EACT,yPAAyP;YAC3P,MAAM,EAAE,WAAW;YACnB,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;SAC/E,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,KAAkC,EAAE,GAAgB,EAAE,QAA0B;QAC3F,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,CACzB,EAAE,IAAI,EAAE,gBAAgB,EAAE,KAAK,EAAE,EACjC,KAAK,IAAI,EAAE;QACT,sEAAsE;QACtE,+DAA+D;QAC/D,qEAAqE;QACrE,sEAAsE;QACtE,IAAI,CAAC,MAAM,CAAC,aAAa,CAAC;YACxB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,SAAS,EAAE,GAAG,CAAC,SAAS;YACxB,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,OAAO,EAAE,GAAG,CAAC,OAAO;YACpB,SAAS,EAAE,GAAG,CAAC,SAAS;SACzB,CAAC,EACJ,QAAQ,CACT,CAAC;IACJ,CAAC;CACF,CAAA;AAlCY,8CAAiB;4BAAjB,iBAAiB;IAD7B,IAAA,mBAAU,GAAE;qCAGiB,0BAAW;QACZ,yCAAkB;GAHlC,iBAAiB,CAkC7B"}
|
|
@@ -4,6 +4,7 @@ import { ToolFactory, ToolCallRecord, UserContext } from "./tool.factory";
|
|
|
4
4
|
import { GraphSearchService } from "../services/graph.search.service";
|
|
5
5
|
import { GraphCatalogService } from "../services/graph.catalog.service";
|
|
6
6
|
import { EntityServiceRegistry } from "../../../common/registries/entity.service.registry";
|
|
7
|
+
import { ScopeGuard } from "../services/scope.guard";
|
|
7
8
|
declare const inputSchema: z.ZodObject<{
|
|
8
9
|
type: z.ZodString;
|
|
9
10
|
filters: z.ZodOptional<z.ZodAny>;
|
|
@@ -16,9 +17,16 @@ export declare class SearchEntitiesTool {
|
|
|
16
17
|
private readonly _search;
|
|
17
18
|
private readonly catalog;
|
|
18
19
|
private readonly registry;
|
|
19
|
-
|
|
20
|
+
private readonly scopeGuard;
|
|
21
|
+
constructor(factory: ToolFactory, _search: GraphSearchService, catalog: GraphCatalogService, registry: EntityServiceRegistry, scopeGuard: ScopeGuard);
|
|
20
22
|
build(ctx: UserContext, recorder: ToolCallRecord[]): DynamicStructuredTool;
|
|
21
23
|
invoke(input: z.infer<typeof inputSchema>, ctx: UserContext, recorder: ToolCallRecord[]): Promise<unknown>;
|
|
24
|
+
/**
|
|
25
|
+
* Drop records outside the run's scope. An unscoped run short-circuits
|
|
26
|
+
* before the guard is consulted — the same contract ScopeGuard.filter
|
|
27
|
+
* applies internally, restated here so an unscoped run never depends on it.
|
|
28
|
+
*/
|
|
29
|
+
private filterInScope;
|
|
22
30
|
private buildOutput;
|
|
23
31
|
}
|
|
24
32
|
//# sourceMappingURL=search-entities.tool.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/search-entities.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;
|
|
1
|
+
{"version":3,"file":"search-entities.tool.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/search-entities.tool.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAE1E,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAGrD,QAAA,MAAM,WAAW;;;;;kBAON,CAAC;AAEZ,OAAO,EAAE,WAAW,IAAI,yBAAyB,EAAE,CAAC;AAUpD,qBACa,kBAAkB;IAE3B,OAAO,CAAC,QAAQ,CAAC,OAAO;IAGxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAGzB,OAAO,CAAC,QAAQ,CAAC,UAAU;gBARV,OAAO,EAAE,WAAW,EAGpB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,qBAAqB,EAG/B,UAAU,EAAE,UAAU;IAGzC,KAAK,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,qBAAqB;IAUpE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,EAAE,GAAG,EAAE,WAAW,EAAE,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC;IAsGhH;;;;OAIG;YACW,aAAa;YAKb,WAAW;CA+B1B"}
|
|
@@ -19,6 +19,7 @@ const graph_catalog_service_1 = require("../services/graph.catalog.service");
|
|
|
19
19
|
const field_formatting_1 = require("../services/field-formatting");
|
|
20
20
|
const materialise_bridge_1 = require("../services/materialise-bridge");
|
|
21
21
|
const entity_service_registry_1 = require("../../../common/registries/entity.service.registry");
|
|
22
|
+
const scope_guard_1 = require("../services/scope.guard");
|
|
22
23
|
const traverse_tool_1 = require("./traverse.tool");
|
|
23
24
|
const inputSchema = zod_1.z
|
|
24
25
|
.object({
|
|
@@ -40,11 +41,15 @@ let SearchEntitiesTool = class SearchEntitiesTool {
|
|
|
40
41
|
constructor(factory,
|
|
41
42
|
// Injected for DI compatibility with GraphModule; no longer used at runtime
|
|
42
43
|
// now that name resolution lives in resolve_entity.
|
|
43
|
-
_search, catalog, registry
|
|
44
|
+
_search, catalog, registry,
|
|
45
|
+
// ScopeGuard is deliberately the LAST constructor parameter so existing
|
|
46
|
+
// positional call sites keep working.
|
|
47
|
+
scopeGuard) {
|
|
44
48
|
this.factory = factory;
|
|
45
49
|
this._search = _search;
|
|
46
50
|
this.catalog = catalog;
|
|
47
51
|
this.registry = registry;
|
|
52
|
+
this.scopeGuard = scopeGuard;
|
|
48
53
|
}
|
|
49
54
|
build(ctx, recorder) {
|
|
50
55
|
return new tools_1.DynamicStructuredTool({
|
|
@@ -102,13 +107,26 @@ let SearchEntitiesTool = class SearchEntitiesTool {
|
|
|
102
107
|
if (!svc)
|
|
103
108
|
return { error: `Service not available for "${entity.type}".` };
|
|
104
109
|
const limit = Math.min(Math.max(input.limit ?? 10, 1), 50);
|
|
110
|
+
const scopeRelKey = entity.scope?.path.length === 1 ? entity.scope.path[0].key : undefined;
|
|
111
|
+
const useScopedRead = !!ctx.scopeId && entity.scope?.rootType === ctx.scopeType;
|
|
112
|
+
// A 1-hop scope is expressible as a relationship read, which reuses the
|
|
113
|
+
// entity's own repository (and therefore its ownership rules). Deeper
|
|
114
|
+
// chains fall back to an unrestricted read plus a ScopeGuard filter.
|
|
105
115
|
// Probe one extra record so truncation is visible to the model:
|
|
106
116
|
// without this, a silently clipped list is reported as complete.
|
|
107
|
-
const fetched =
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
117
|
+
const fetched = useScopedRead && scopeRelKey
|
|
118
|
+
? await svc.findRelatedRecords({
|
|
119
|
+
relationship: scopeRelKey,
|
|
120
|
+
id: ctx.scopeId,
|
|
121
|
+
filters,
|
|
122
|
+
orderByFields: sort,
|
|
123
|
+
limit: limit + 1,
|
|
124
|
+
})
|
|
125
|
+
: await this.filterInScope(entity.type, await svc.findRecords({
|
|
126
|
+
filters,
|
|
127
|
+
orderByFields: sort,
|
|
128
|
+
limit: limit + 1,
|
|
129
|
+
}), ctx);
|
|
112
130
|
const hasMore = fetched.length > limit;
|
|
113
131
|
const records = hasMore ? fetched.slice(0, limit) : fetched;
|
|
114
132
|
const output = await this.buildOutput(entity, records, ctx, localMaterialised);
|
|
@@ -125,6 +143,16 @@ let SearchEntitiesTool = class SearchEntitiesTool {
|
|
|
125
143
|
}
|
|
126
144
|
return result;
|
|
127
145
|
}
|
|
146
|
+
/**
|
|
147
|
+
* Drop records outside the run's scope. An unscoped run short-circuits
|
|
148
|
+
* before the guard is consulted — the same contract ScopeGuard.filter
|
|
149
|
+
* applies internally, restated here so an unscoped run never depends on it.
|
|
150
|
+
*/
|
|
151
|
+
async filterInScope(type, records, ctx) {
|
|
152
|
+
if (!ctx.scopeId || !ctx.scopeType)
|
|
153
|
+
return records;
|
|
154
|
+
return this.scopeGuard.filter({ type, records, ctx });
|
|
155
|
+
}
|
|
128
156
|
async buildOutput(entity, records, ctx, localMaterialised) {
|
|
129
157
|
const baseItems = records.map((r) => ({
|
|
130
158
|
id: r.id,
|
|
@@ -141,7 +169,7 @@ let SearchEntitiesTool = class SearchEntitiesTool {
|
|
|
141
169
|
bridge: entity,
|
|
142
170
|
record: { id: item.id, fields: item.fields },
|
|
143
171
|
ctx,
|
|
144
|
-
deps: { catalog: this.catalog, registry: this.registry },
|
|
172
|
+
deps: { catalog: this.catalog, registry: this.registry, scopeGuard: this.scopeGuard },
|
|
145
173
|
onMaterialised: (relName, count) => localMaterialised.push({ relName, count }),
|
|
146
174
|
}).then((m) => ({ ...m, score }))));
|
|
147
175
|
return { matchMode: "none", items };
|
|
@@ -153,6 +181,7 @@ exports.SearchEntitiesTool = SearchEntitiesTool = __decorate([
|
|
|
153
181
|
__metadata("design:paramtypes", [tool_factory_1.ToolFactory,
|
|
154
182
|
graph_search_service_1.GraphSearchService,
|
|
155
183
|
graph_catalog_service_1.GraphCatalogService,
|
|
156
|
-
entity_service_registry_1.EntityServiceRegistry
|
|
184
|
+
entity_service_registry_1.EntityServiceRegistry,
|
|
185
|
+
scope_guard_1.ScopeGuard])
|
|
157
186
|
], SearchEntitiesTool);
|
|
158
187
|
//# sourceMappingURL=search-entities.tool.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search-entities.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/search-entities.tool.ts"],"names":[],"mappings":";;;;;;;;;;;;AAAA,2CAA4C;AAC5C,iDAA8D;AAC9D,6BAAwB;AACxB,iDAA0E;AAE1E,2EAAsE;AACtE,6EAAwE;AACxE,mEAAqE;AACrE,uEAAmE;AACnE,gGAA2F;AAC3F,mDAA4D;AAE5D,MAAM,WAAW,GAAG,OAAC;KAClB,MAAM,CAAC;IACN,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC9C,OAAO,EAAE,OAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,OAAC,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IACxB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC;KACD,MAAM,EAAE,CAAC;AAEY,gDAAyB;AAEjD,MAAM,kBAAkB,GAAgC;IACtD,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAClE,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACpF,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IACrD,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;IAC5E,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;CACjF,CAAC;AAGK,IAAM,kBAAkB,GAAxB,MAAM,kBAAkB;IAC7B,YACmB,OAAoB;IACrC,4EAA4E;IAC5E,oDAAoD;IACnC,OAA2B,EAC3B,OAA4B,EAC5B,QAA+B;
|
|
1
|
+
{"version":3,"file":"search-entities.tool.js","sourceRoot":"","sources":["../../../../src/agents/graph/tools/search-entities.tool.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,10 @@ export interface UserContext {
|
|
|
5
5
|
companyId: string;
|
|
6
6
|
userId: string;
|
|
7
7
|
userModuleIds: string[];
|
|
8
|
+
/** Id of the scope-root node the whole run is confined to. Absent = unscoped. */
|
|
9
|
+
scopeId?: string;
|
|
10
|
+
/** JSON:API type of the scope root, e.g. "campaigns". Present iff scopeId is. */
|
|
11
|
+
scopeType?: string;
|
|
8
12
|
}
|
|
9
13
|
export interface ToolCallRecord {
|
|
10
14
|
tool: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool.factory.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/tool.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"tool.factory.d.ts","sourceRoot":"","sources":["../../../../src/agents/graph/tools/tool.factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,MAAM,mCAAmC,CAAC;AACxE,OAAO,EAAE,qBAAqB,EAAE,MAAM,oDAAoD,CAAC;AAC3F,OAAO,EAAE,aAAa,EAAE,MAAM,uCAAuC,CAAC;AAEtE,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,iFAAiF;IACjF,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iFAAiF;IACjF,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,YAAY,CAAC,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAC1D;AA2BD,qBACa,WAAW;IAIpB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IAJ3B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAgC;gBAGpC,OAAO,EAAE,mBAAmB,EAC5B,QAAQ,EAAE,qBAAqB;IAGlD,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,WAAW,GAAG,aAAa,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE;IAuCrG,OAAO,CAAC,WAAW;IAWnB,cAAc,CAAC,IAAI,EAAE,MAAM;IAI3B,OAAO,CAAC,CAAC,EACP,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,EACxD,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,EACpB,QAAQ,EAAE,cAAc,EAAE,GACzB,OAAO,CAAC,CAAC,CAAC;CAsCd"}
|