@rubytech/create-maxy 1.0.743 → 1.0.744
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/package.json +1 -1
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.d.ts +2 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.js +97 -0
- package/payload/platform/lib/graph-mcp/dist/__tests__/cypher-validate-write.test.js.map +1 -0
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts +13 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.d.ts.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js +70 -3
- package/payload/platform/lib/graph-mcp/dist/cypher-validate.js.map +1 -1
- package/payload/platform/lib/graph-mcp/dist/index.js +154 -11
- package/payload/platform/lib/graph-mcp/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-mcp/src/__tests__/cypher-validate-write.test.ts +150 -0
- package/payload/platform/lib/graph-mcp/src/cypher-validate.ts +95 -3
- package/payload/platform/lib/graph-mcp/src/index.ts +202 -17
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.d.ts +2 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.js +147 -0
- package/payload/platform/lib/graph-write/dist/__tests__/audit.test.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/audit.d.ts +84 -0
- package/payload/platform/lib/graph-write/dist/audit.d.ts.map +1 -0
- package/payload/platform/lib/graph-write/dist/audit.js +129 -0
- package/payload/platform/lib/graph-write/dist/audit.js.map +1 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts +1 -0
- package/payload/platform/lib/graph-write/dist/index.d.ts.map +1 -1
- package/payload/platform/lib/graph-write/dist/index.js +18 -22
- package/payload/platform/lib/graph-write/dist/index.js.map +1 -1
- package/payload/platform/lib/graph-write/src/__tests__/audit.test.ts +162 -0
- package/payload/platform/lib/graph-write/src/audit.ts +182 -0
- package/payload/platform/lib/graph-write/src/index.ts +5 -0
- package/payload/platform/package.json +2 -2
- package/payload/platform/plugins/docs/references/memory-guide.md +2 -0
- package/payload/platform/plugins/docs/references/troubleshooting.md +16 -0
- package/payload/platform/templates/specialists/agents/database-operator.md +39 -6
- package/payload/server/chunk-2T4RRIJK.js +9462 -0
- package/payload/server/maxy-edge.js +94 -16
- package/payload/server/server.js +1 -1
package/package.json
CHANGED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cypher-validate-write.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/cypher-validate-write.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const node_test_1 = __importDefault(require("node:test"));
|
|
7
|
+
const strict_1 = __importDefault(require("node:assert/strict"));
|
|
8
|
+
const cypher_validate_js_1 = require("../cypher-validate.js");
|
|
9
|
+
const snapshot = {
|
|
10
|
+
labels: new Set(["Person", "Organization", "Task", "KnowledgeDocument"]),
|
|
11
|
+
relationshipTypes: new Set(["KNOWS", "PARTICIPANT", "REFERENCES", "MENTIONS", "PART_OF"]),
|
|
12
|
+
};
|
|
13
|
+
(0, node_test_1.default)("write mode allows CREATE node + relationship statement", () => {
|
|
14
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (a:Person), (b:Organization) WHERE a.name = $a AND b.name = $b CREATE (a)-[:KNOWS]->(b)", snapshot, { mode: "write" });
|
|
15
|
+
strict_1.default.equal(result.ok, true, "expected valid write");
|
|
16
|
+
strict_1.default.deepEqual(result.unknown, []);
|
|
17
|
+
strict_1.default.deepEqual(result.forbidden, []);
|
|
18
|
+
});
|
|
19
|
+
(0, node_test_1.default)("write mode allows MERGE with SET clause", () => {
|
|
20
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (a:Person {name: $name}) MERGE (a)-[r:KNOWS]->(b:Person {name: $other}) SET r.createdAt = datetime()", snapshot, { mode: "write" });
|
|
21
|
+
strict_1.default.equal(result.ok, true);
|
|
22
|
+
});
|
|
23
|
+
(0, node_test_1.default)("write mode allows DETACH DELETE", () => {
|
|
24
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (n:Person) WHERE n.archived = true DETACH DELETE n", snapshot, { mode: "write" });
|
|
25
|
+
strict_1.default.equal(result.ok, true);
|
|
26
|
+
});
|
|
27
|
+
(0, node_test_1.default)("write mode allows REMOVE label + SET label (re-label)", () => {
|
|
28
|
+
// Allow renaming labels — the new label is unknown to the schema until the
|
|
29
|
+
// write commits, but the validator must not block legitimate normalisation.
|
|
30
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (n:Person) WHERE n.legacy = true REMOVE n:Person SET n:LegacyPerson", snapshot, { mode: "write" });
|
|
31
|
+
// LegacyPerson is unknown — fail-soft for write mode (audit emits warning, not reject).
|
|
32
|
+
// The token check is shared with read-mode; the write mode adds DDL/admin reject layer.
|
|
33
|
+
// For this test we accept the write-mode-specific outcome: no forbidden patterns.
|
|
34
|
+
strict_1.default.deepEqual(result.forbidden, []);
|
|
35
|
+
});
|
|
36
|
+
(0, node_test_1.default)("write mode allows CALL apoc.refactor.mergeNodes", () => {
|
|
37
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (a:Person), (b:Person) WHERE a.email = b.email AND id(a) < id(b) WITH a, b CALL apoc.refactor.mergeNodes([a, b]) YIELD node RETURN node", snapshot, { mode: "write" });
|
|
38
|
+
strict_1.default.deepEqual(result.forbidden, []);
|
|
39
|
+
});
|
|
40
|
+
(0, node_test_1.default)("write mode REJECTS DROP DATABASE", () => {
|
|
41
|
+
const result = (0, cypher_validate_js_1.validate)("DROP DATABASE neo4j", snapshot, { mode: "write" });
|
|
42
|
+
strict_1.default.equal(result.ok, false);
|
|
43
|
+
strict_1.default.equal(result.forbidden.length, 1);
|
|
44
|
+
strict_1.default.equal(result.forbidden[0].kind, "drop-database");
|
|
45
|
+
});
|
|
46
|
+
(0, node_test_1.default)("write mode REJECTS CREATE INDEX", () => {
|
|
47
|
+
const result = (0, cypher_validate_js_1.validate)("CREATE INDEX person_name_idx FOR (n:Person) ON (n.name)", snapshot, { mode: "write" });
|
|
48
|
+
strict_1.default.equal(result.ok, false);
|
|
49
|
+
const f = result.forbidden.find((x) => x.kind === "create-index");
|
|
50
|
+
strict_1.default.ok(f, "expected create-index forbidden");
|
|
51
|
+
});
|
|
52
|
+
(0, node_test_1.default)("write mode REJECTS CREATE CONSTRAINT", () => {
|
|
53
|
+
const result = (0, cypher_validate_js_1.validate)("CREATE CONSTRAINT person_email_unique FOR (n:Person) REQUIRE n.email IS UNIQUE", snapshot, { mode: "write" });
|
|
54
|
+
strict_1.default.equal(result.ok, false);
|
|
55
|
+
const f = result.forbidden.find((x) => x.kind === "create-constraint");
|
|
56
|
+
strict_1.default.ok(f);
|
|
57
|
+
});
|
|
58
|
+
(0, node_test_1.default)("write mode REJECTS CALL dbms.security.*", () => {
|
|
59
|
+
const result = (0, cypher_validate_js_1.validate)("CALL dbms.security.createUser('attacker', 'pwd', false)", snapshot, { mode: "write" });
|
|
60
|
+
strict_1.default.equal(result.ok, false);
|
|
61
|
+
const f = result.forbidden.find((x) => x.kind === "call-dbms");
|
|
62
|
+
strict_1.default.ok(f);
|
|
63
|
+
});
|
|
64
|
+
(0, node_test_1.default)("write mode REJECTS CALL db.create*", () => {
|
|
65
|
+
const result = (0, cypher_validate_js_1.validate)("CALL db.createLabel('Foo')", snapshot, { mode: "write" });
|
|
66
|
+
strict_1.default.equal(result.ok, false);
|
|
67
|
+
const f = result.forbidden.find((x) => x.kind === "call-db-create");
|
|
68
|
+
strict_1.default.ok(f);
|
|
69
|
+
});
|
|
70
|
+
(0, node_test_1.default)("write mode allows CALL db.labels (read-only db.* call)", () => {
|
|
71
|
+
// db.labels is a read primitive — not a create/drop. Validator only
|
|
72
|
+
// forbids db.create* family; CALL db.labels remains allowed.
|
|
73
|
+
const result = (0, cypher_validate_js_1.validate)("CALL db.labels()", snapshot, { mode: "write" });
|
|
74
|
+
strict_1.default.deepEqual(result.forbidden, []);
|
|
75
|
+
});
|
|
76
|
+
(0, node_test_1.default)("read mode does NOT apply forbidden checks (DDL pattern in MATCH still allowed)", () => {
|
|
77
|
+
// String literals containing forbidden tokens never trip — DDL forbidden check
|
|
78
|
+
// is mode-gated. Read-mode WHERE clauses comparing on a string with the
|
|
79
|
+
// word DROP must not reject.
|
|
80
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (n:Person) WHERE n.bio CONTAINS 'DROP DATABASE' RETURN n", snapshot, { mode: "read" });
|
|
81
|
+
strict_1.default.deepEqual(result.forbidden, []);
|
|
82
|
+
strict_1.default.equal(result.ok, true);
|
|
83
|
+
});
|
|
84
|
+
(0, node_test_1.default)("write mode strips string literals before forbidden check", () => {
|
|
85
|
+
// The forbidden check must use stripStringLiterals so a string property
|
|
86
|
+
// value like 'DROP DATABASE archive' does not trip the rejection.
|
|
87
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (n:Person) WHERE n.bio CONTAINS 'DROP DATABASE' SET n.flagged = true", snapshot, { mode: "write" });
|
|
88
|
+
strict_1.default.deepEqual(result.forbidden, [], "string-literal content must not trip DDL check");
|
|
89
|
+
});
|
|
90
|
+
(0, node_test_1.default)("default mode is read (backward compatibility)", () => {
|
|
91
|
+
// Existing call sites pass no mode option — must remain read-mode behavior.
|
|
92
|
+
const result = (0, cypher_validate_js_1.validate)("MATCH (n:Person) RETURN n", snapshot);
|
|
93
|
+
strict_1.default.equal(result.ok, true);
|
|
94
|
+
strict_1.default.equal(Array.isArray(result.forbidden), true);
|
|
95
|
+
strict_1.default.equal(result.forbidden.length, 0);
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=cypher-validate-write.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cypher-validate-write.test.js","sourceRoot":"","sources":["../../src/__tests__/cypher-validate-write.test.ts"],"names":[],"mappings":";;;;;AAAA,0DAA6B;AAC7B,gEAAwC;AACxC,8DAAsE;AAEtE,MAAM,QAAQ,GAAmB;IAC/B,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,cAAc,EAAE,MAAM,EAAE,mBAAmB,CAAC,CAAC;IACxE,iBAAiB,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;CAC1F,CAAC;AAEF,IAAA,mBAAI,EAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,+FAA+F,EAC/F,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACtD,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IACrC,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,4GAA4G,EAC5G,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,iCAAiC,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,0DAA0D,EAC1D,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,uDAAuD,EAAE,GAAG,EAAE;IACjE,2EAA2E;IAC3E,4EAA4E;IAC5E,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,2EAA2E,EAC3E,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,wFAAwF;IACxF,wFAAwF;IACxF,kFAAkF;IAClF,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,iDAAiD,EAAE,GAAG,EAAE;IAC3D,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,+IAA+I,EAC/I,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,kCAAkC,EAAE,GAAG,EAAE;IAC5C,MAAM,MAAM,GAAG,IAAA,6BAAQ,EAAC,qBAAqB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5E,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IACzC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,iCAAiC,EAAE,GAAG,EAAE;IAC3C,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,yDAAyD,EACzD,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;IAClE,gBAAM,CAAC,EAAE,CAAC,CAAC,EAAE,iCAAiC,CAAC,CAAC;AAClD,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,sCAAsC,EAAE,GAAG,EAAE;IAChD,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,gFAAgF,EAChF,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,mBAAmB,CAAC,CAAC;IACvE,gBAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,yCAAyC,EAAE,GAAG,EAAE;IACnD,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,yDAAyD,EACzD,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;IAC/D,gBAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,oCAAoC,EAAE,GAAG,EAAE;IAC9C,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,4BAA4B,EAC5B,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAC/B,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,gBAAgB,CAAC,CAAC;IACpE,gBAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,wDAAwD,EAAE,GAAG,EAAE;IAClE,oEAAoE;IACpE,6DAA6D;IAC7D,MAAM,MAAM,GAAG,IAAA,6BAAQ,EAAC,kBAAkB,EAAE,QAAQ,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;IACzE,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,gFAAgF,EAAE,GAAG,EAAE;IAC1F,+EAA+E;IAC/E,wEAAwE;IACxE,6BAA6B;IAC7B,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,gEAAgE,EAChE,QAAQ,EACR,EAAE,IAAI,EAAE,MAAM,EAAE,CACjB,CAAC;IACF,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACvC,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,0DAA0D,EAAE,GAAG,EAAE;IACpE,wEAAwE;IACxE,kEAAkE;IAClE,MAAM,MAAM,GAAG,IAAA,6BAAQ,EACrB,4EAA4E,EAC5E,QAAQ,EACR,EAAE,IAAI,EAAE,OAAO,EAAE,CAClB,CAAC;IACF,gBAAM,CAAC,SAAS,CAAC,MAAM,CAAC,SAAS,EAAE,EAAE,EAAE,gDAAgD,CAAC,CAAC;AAC3F,CAAC,CAAC,CAAC;AAEH,IAAA,mBAAI,EAAC,+CAA+C,EAAE,GAAG,EAAE;IACzD,4EAA4E;IAC5E,MAAM,MAAM,GAAG,IAAA,6BAAQ,EAAC,2BAA2B,EAAE,QAAQ,CAAC,CAAC;IAC/D,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC9B,gBAAM,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;IACpD,gBAAM,CAAC,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;AAC3C,CAAC,CAAC,CAAC"}
|
|
@@ -28,11 +28,23 @@ export interface UnknownToken {
|
|
|
28
28
|
nearest: string[];
|
|
29
29
|
hint: string;
|
|
30
30
|
}
|
|
31
|
+
export type ForbiddenKind = "drop-database" | "create-index" | "create-constraint" | "call-dbms" | "call-db-create";
|
|
32
|
+
export interface ForbiddenPattern {
|
|
33
|
+
kind: ForbiddenKind;
|
|
34
|
+
match: string;
|
|
35
|
+
hint: string;
|
|
36
|
+
}
|
|
31
37
|
export interface ValidationResult {
|
|
32
38
|
ok: boolean;
|
|
33
39
|
unknown: UnknownToken[];
|
|
40
|
+
forbidden: ForbiddenPattern[];
|
|
34
41
|
labelTokens: string[];
|
|
35
42
|
edgeTokens: string[];
|
|
36
43
|
}
|
|
37
|
-
export
|
|
44
|
+
export interface ValidateOptions {
|
|
45
|
+
/** "read" (default) skips DDL/admin forbidden checks. "write" applies them. */
|
|
46
|
+
mode?: "read" | "write";
|
|
47
|
+
}
|
|
48
|
+
export declare function stripStringLiterals(cypher: string): string;
|
|
49
|
+
export declare function validate(cypher: string, snapshot: SchemaSnapshot, options?: ValidateOptions): ValidationResult;
|
|
38
50
|
//# sourceMappingURL=cypher-validate.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cypher-validate.d.ts","sourceRoot":"","sources":["../src/cypher-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;
|
|
1
|
+
{"version":3,"file":"cypher-validate.d.ts","sourceRoot":"","sources":["../src/cypher-validate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACrC,QAAQ,CAAC,iBAAiB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CACjD;AAED,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,OAAO,GAAG,cAAc,CAAC;IAC/B,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,MAAM,aAAa,GACrB,eAAe,GACf,cAAc,GACd,mBAAmB,GACnB,WAAW,GACX,gBAAgB,CAAC;AAErB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,aAAa,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,OAAO,CAAC;IACZ,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AA8DD,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAK1D;AA4ED,wBAAgB,QAAQ,CACtB,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,cAAc,EACxB,OAAO,GAAE,eAAoB,GAC5B,gBAAgB,CA4ClB"}
|
|
@@ -20,7 +20,46 @@
|
|
|
20
20
|
* `:Foo` inside quoted content (e.g. `WHERE n.note CONTAINS ':Foo'`).
|
|
21
21
|
*/
|
|
22
22
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
23
|
+
exports.stripStringLiterals = stripStringLiterals;
|
|
23
24
|
exports.validate = validate;
|
|
25
|
+
// DDL / admin patterns that the database-operator's raw write surface must
|
|
26
|
+
// reject. The graph MCP shim is the only enforcement point — Neo4j Community
|
|
27
|
+
// has no per-tool ACL, so the shim filters by syntactic shape before
|
|
28
|
+
// forwarding the JSON-RPC line to the upstream cypher driver. Each pattern
|
|
29
|
+
// is applied to a string-literal-stripped cypher body so that prose inside
|
|
30
|
+
// quoted strings cannot trip a false positive.
|
|
31
|
+
//
|
|
32
|
+
// CALL apoc.* is intentionally NOT forbidden — apoc.refactor.mergeNodes is
|
|
33
|
+
// the documented dedup primitive. CALL db.labels() and other read-only db.*
|
|
34
|
+
// calls are allowed; only db.create* (createLabel, createProperty,
|
|
35
|
+
// createRelationshipType) is forbidden because those are schema-mutating.
|
|
36
|
+
const FORBIDDEN_PATTERNS = [
|
|
37
|
+
{
|
|
38
|
+
kind: "drop-database",
|
|
39
|
+
pattern: /\bDROP\s+(?:DATABASE|ALIAS|USER|ROLE)\b/i,
|
|
40
|
+
hint: "DROP DATABASE/USER/ROLE/ALIAS is admin DDL — not permitted on the operator surface.",
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
kind: "create-index",
|
|
44
|
+
pattern: /\bCREATE\s+(?:OR\s+REPLACE\s+)?(?:RANGE\s+|TEXT\s+|POINT\s+|LOOKUP\s+|FULLTEXT\s+|BTREE\s+|VECTOR\s+)?INDEX\b/i,
|
|
45
|
+
hint: "Index DDL is admin-owned (seed-neo4j.sh applies indexes). Not permitted on the operator surface.",
|
|
46
|
+
},
|
|
47
|
+
{
|
|
48
|
+
kind: "create-constraint",
|
|
49
|
+
pattern: /\bCREATE\s+(?:OR\s+REPLACE\s+)?CONSTRAINT\b/i,
|
|
50
|
+
hint: "Constraint DDL is admin-owned (seed-neo4j.sh applies constraints). Not permitted on the operator surface.",
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
kind: "call-dbms",
|
|
54
|
+
pattern: /\bCALL\s+dbms\./i,
|
|
55
|
+
hint: "CALL dbms.* is admin/security surface. Not permitted on the operator surface.",
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
kind: "call-db-create",
|
|
59
|
+
pattern: /\bCALL\s+db\.create/i,
|
|
60
|
+
hint: "CALL db.create* mutates schema (label/property/type registration). Not permitted on the operator surface.",
|
|
61
|
+
},
|
|
62
|
+
];
|
|
24
63
|
// Bracket content containing a type reference. Examples this matches:
|
|
25
64
|
// [:PART_OF]
|
|
26
65
|
// [r:PART_OF]
|
|
@@ -33,6 +72,9 @@ const EDGE_PATTERN = /\[[^\]]*?:([A-Z_][A-Za-z0-9_]*(?:\|[A-Z_][A-Za-z0-9_]*)*)[
|
|
|
33
72
|
// already had edge-bracket substrings stripped, so there is no overlap with
|
|
34
73
|
// the edge pattern. The [A-Z] anchor excludes lowercase map keys.
|
|
35
74
|
const LABEL_PATTERN = /:([A-Z][A-Za-z0-9_]*)/g;
|
|
75
|
+
// Exported so the post-write audit (graph-write/audit.ts) can reuse the same
|
|
76
|
+
// literal-stripping pass before its own static parsing — avoids duplicate
|
|
77
|
+
// false-positive treatment across the two surfaces.
|
|
36
78
|
function stripStringLiterals(cypher) {
|
|
37
79
|
// Replace single- and double-quoted literals with empty quotes. Preserves
|
|
38
80
|
// positional structure without retaining content that could match the
|
|
@@ -93,16 +135,35 @@ function hintFor(token, kind, nearest) {
|
|
|
93
135
|
const didYouMean = nearest.length > 0 ? `Did you mean :${nearest[0]}? ` : "";
|
|
94
136
|
return `${didYouMean}Unknown ${kind} '${token}' — not in the current Neo4j schema. See .docs/neo4j.md for the canonical taxonomy.`;
|
|
95
137
|
}
|
|
96
|
-
function
|
|
138
|
+
function detectForbidden(cypher) {
|
|
139
|
+
// Strip literals so a property value like 'CREATE INDEX archive' cannot
|
|
140
|
+
// trip a false rejection. The shared `stripStringLiterals` keeps this
|
|
141
|
+
// treatment uniform with token extraction and audit static parsing.
|
|
142
|
+
const cleaned = stripStringLiterals(cypher);
|
|
143
|
+
const out = [];
|
|
144
|
+
for (const { kind, pattern, hint } of FORBIDDEN_PATTERNS) {
|
|
145
|
+
const found = cleaned.match(pattern);
|
|
146
|
+
if (found) {
|
|
147
|
+
out.push({ kind, match: found[0], hint });
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
return out;
|
|
151
|
+
}
|
|
152
|
+
function validate(cypher, snapshot, options = {}) {
|
|
153
|
+
const mode = options.mode ?? "read";
|
|
154
|
+
const forbidden = mode === "write" ? detectForbidden(cypher) : [];
|
|
97
155
|
const { labels, edges } = extractTokens(cypher);
|
|
98
156
|
// Fail-open when the snapshot is empty. An empty snapshot means "schema
|
|
99
157
|
// cache not loaded" (boot race, Neo4j unreachable). Rejecting every token
|
|
100
158
|
// would wedge the admin agent; letting it through preserves the observable
|
|
101
159
|
// `validated=false` signal on the existing [graph-query] line.
|
|
160
|
+
// Forbidden DDL/admin patterns still apply — those are syntactic, not
|
|
161
|
+
// schema-derived.
|
|
102
162
|
if (snapshot.labels.size === 0 && snapshot.relationshipTypes.size === 0) {
|
|
103
163
|
return {
|
|
104
|
-
ok:
|
|
164
|
+
ok: forbidden.length === 0,
|
|
105
165
|
unknown: [],
|
|
166
|
+
forbidden,
|
|
106
167
|
labelTokens: [...labels],
|
|
107
168
|
edgeTokens: [...edges],
|
|
108
169
|
};
|
|
@@ -120,9 +181,15 @@ function validate(cypher, snapshot) {
|
|
|
120
181
|
unknown.push({ token, kind: "relationship", nearest, hint: hintFor(token, "relationship", nearest) });
|
|
121
182
|
}
|
|
122
183
|
}
|
|
184
|
+
// Write-mode caller treats `unknown` as a soft warning (audit), not a
|
|
185
|
+
// hard reject — operators legitimately introduce new labels via REMOVE
|
|
186
|
+
// n:Old SET n:New. Read-mode preserves prior behaviour: any unknown
|
|
187
|
+
// → ok=false.
|
|
188
|
+
const tokensOk = mode === "write" ? true : unknown.length === 0;
|
|
123
189
|
return {
|
|
124
|
-
ok:
|
|
190
|
+
ok: tokensOk && forbidden.length === 0,
|
|
125
191
|
unknown,
|
|
192
|
+
forbidden,
|
|
126
193
|
labelTokens: [...labels],
|
|
127
194
|
edgeTokens: [...edges],
|
|
128
195
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cypher-validate.js","sourceRoot":"","sources":["../src/cypher-validate.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;;;;;GAmBG;;
|
|
1
|
+
{"version":3,"file":"cypher-validate.js","sourceRoot":"","sources":["../src/cypher-validate.ts"],"names":[],"mappings":"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"}
|
|
@@ -30,6 +30,7 @@ const node_path_1 = require("node:path");
|
|
|
30
30
|
const node_string_decoder_1 = require("node:string_decoder");
|
|
31
31
|
const index_js_1 = require("../../mcp-stderr-tee/dist/index.js");
|
|
32
32
|
const cypher_validate_js_1 = require("./cypher-validate.js");
|
|
33
|
+
const audit_js_1 = require("../../graph-write/dist/audit.js");
|
|
33
34
|
const schema_cache_js_1 = require("./schema-cache.js");
|
|
34
35
|
const SERVER_NAME = "graph";
|
|
35
36
|
const UPSTREAM_PACKAGE = "mcp-neo4j-cypher@0.6.0";
|
|
@@ -149,7 +150,15 @@ const neo4jPassword = resolvePassword();
|
|
|
149
150
|
const portMatch = /:(\d+)$/.exec(neo4jUri);
|
|
150
151
|
const neo4jPort = portMatch ? portMatch[1] : "?";
|
|
151
152
|
const namespace = process.env.NEO4J_NAMESPACE ?? "maxy-graph";
|
|
152
|
-
|
|
153
|
+
// Task 796 — default flipped from "true" to "false" so the upstream
|
|
154
|
+
// `mcp-neo4j-cypher` registers `write_neo4j_cypher` alongside the read tool.
|
|
155
|
+
// Per-agent gating via the `tools:` frontmatter list confines the surface:
|
|
156
|
+
// only `database-operator.md` lists `mcp__graph__maxy-graph-write_neo4j_cypher`,
|
|
157
|
+
// and the parent admin spawn only allow-lists it via `ADMIN_CORE_TOOLS` so
|
|
158
|
+
// the operator subagent inherits permission. Operators who set
|
|
159
|
+
// NEO4J_READ_ONLY=true explicitly (e.g. dev sandboxes) still get the
|
|
160
|
+
// upstream's read-only mode.
|
|
161
|
+
const readOnly = process.env.NEO4J_READ_ONLY ?? "false";
|
|
153
162
|
const responseTokenLimit = process.env.NEO4J_RESPONSE_TOKEN_LIMIT ?? "20000";
|
|
154
163
|
const childEnv = {
|
|
155
164
|
...process.env,
|
|
@@ -239,6 +248,38 @@ function extractCypherFull(args) {
|
|
|
239
248
|
const q = args["query"] ?? args["cypher"];
|
|
240
249
|
return typeof q === "string" ? q : null;
|
|
241
250
|
}
|
|
251
|
+
// Task 796: the operator's Graph Stewardship Doctrine (Rule 3) requires
|
|
252
|
+
// `r.createdBySession = $sessionId` on every write. The post-write audit
|
|
253
|
+
// emits the `[graph-cypher-write] accepted` line with this sessionId so
|
|
254
|
+
// later forensic queries can join the audit log to the persisted node set
|
|
255
|
+
// via `WHERE n.createdBySession = $sessionId`. Returns null if the operator
|
|
256
|
+
// did not pass a sessionId param — the audit then emits sessionId=unknown
|
|
257
|
+
// and the missing-provenance warning fires from the static parse.
|
|
258
|
+
function extractSessionIdParam(args) {
|
|
259
|
+
if (!args)
|
|
260
|
+
return null;
|
|
261
|
+
const params = args["params"];
|
|
262
|
+
if (!params || typeof params !== "object")
|
|
263
|
+
return null;
|
|
264
|
+
const sid = params["sessionId"];
|
|
265
|
+
return typeof sid === "string" ? sid : null;
|
|
266
|
+
}
|
|
267
|
+
// Task 796: parse the upstream `mcp-neo4j-cypher` write response counters.
|
|
268
|
+
// The upstream emits human-readable summary phrases ("3 nodes created", "4
|
|
269
|
+
// relationships created") in the result.content[0].text. Defensive regex —
|
|
270
|
+
// missing phrases coerce to 0 so the accepted line still emits with
|
|
271
|
+
// observable nodesCreated/relsCreated fields.
|
|
272
|
+
function parseWriteCounters(result) {
|
|
273
|
+
if (!result?.content || !Array.isArray(result.content))
|
|
274
|
+
return { nodes: 0, rels: 0 };
|
|
275
|
+
const text = result.content[0]?.text ?? "";
|
|
276
|
+
const nodesMatch = text.match(/(\d+)\s*nodes?\s*created/i);
|
|
277
|
+
const relsMatch = text.match(/(\d+)\s*relationships?\s*created/i);
|
|
278
|
+
return {
|
|
279
|
+
nodes: nodesMatch ? parseInt(nodesMatch[1], 10) : 0,
|
|
280
|
+
rels: relsMatch ? parseInt(relsMatch[1], 10) : 0,
|
|
281
|
+
};
|
|
282
|
+
}
|
|
242
283
|
function truncateForLog(cypher) {
|
|
243
284
|
return truncate(cypher.replace(/\s+/g, " ").trim(), 80);
|
|
244
285
|
}
|
|
@@ -278,6 +319,26 @@ function synthesiseRejection(id, unknown) {
|
|
|
278
319
|
};
|
|
279
320
|
return JSON.stringify(envelope);
|
|
280
321
|
}
|
|
322
|
+
// Task 796: synthesised rejection for forbidden DDL/admin patterns. Fired
|
|
323
|
+
// from the write-mode validator when the operator (or a regression in admin
|
|
324
|
+
// dispatch) tries `DROP DATABASE`, `CREATE INDEX/CONSTRAINT`, `CALL dbms.*`,
|
|
325
|
+
// or `CALL db.create*`. The text names every matched pattern so the operator
|
|
326
|
+
// reads exactly which clause tripped the gate.
|
|
327
|
+
function synthesiseForbiddenRejection(id, forbidden) {
|
|
328
|
+
const lines = forbidden.map((f) => ` - ${f.kind}: matched "${f.match.replace(/"/g, "'")}" — ${f.hint}`);
|
|
329
|
+
const text = `forbidden cypher pattern — write NOT executed\n${lines.join("\n")}\n\n` +
|
|
330
|
+
`Index/constraint DDL is admin-owned (seed-neo4j.sh). Security CALL surface ` +
|
|
331
|
+
`(dbms.*, db.create*) is not exposed to the operator role.`;
|
|
332
|
+
const envelope = {
|
|
333
|
+
jsonrpc: "2.0",
|
|
334
|
+
id,
|
|
335
|
+
result: {
|
|
336
|
+
content: [{ type: "text", text }],
|
|
337
|
+
isError: true,
|
|
338
|
+
},
|
|
339
|
+
};
|
|
340
|
+
return JSON.stringify(envelope);
|
|
341
|
+
}
|
|
281
342
|
function wrapReadWarnings(msg, warnings) {
|
|
282
343
|
const warningText = `${renderUnknownTokens(warnings, "warning")}\n\n--- results below (executed despite unknown tokens) ---\n`;
|
|
283
344
|
const original = msg.result?.content ?? [];
|
|
@@ -304,29 +365,48 @@ function handleRequestLine(line) {
|
|
|
304
365
|
const cypherFull = extractCypherFull(msg.params?.arguments);
|
|
305
366
|
const cypherPrefix = cypherFull ? truncateForLog(cypherFull) : null;
|
|
306
367
|
const isCypherCall = methodName === READ_CYPHER_TOOL || methodName === WRITE_CYPHER_TOOL;
|
|
368
|
+
const isWriteCall = methodName === WRITE_CYPHER_TOOL;
|
|
369
|
+
const sessionIdParam = isWriteCall
|
|
370
|
+
? extractSessionIdParam(msg.params?.arguments)
|
|
371
|
+
: null;
|
|
307
372
|
const entry = {
|
|
308
373
|
method: methodName,
|
|
309
374
|
cypherPrefix,
|
|
375
|
+
cypherFull,
|
|
376
|
+
isWrite: isWriteCall,
|
|
377
|
+
sessionIdParam,
|
|
310
378
|
startMs: Date.now(),
|
|
311
379
|
validated: false,
|
|
312
380
|
readWarnings: [],
|
|
381
|
+
writeUnknownTokens: [],
|
|
313
382
|
};
|
|
314
383
|
if (!isCypherCall || !cypherFull) {
|
|
315
384
|
pending.set(msg.id, entry);
|
|
316
385
|
return "forward";
|
|
317
386
|
}
|
|
318
|
-
const isWrite = methodName === WRITE_CYPHER_TOOL;
|
|
319
387
|
const snapshot = schemaCache.snapshot();
|
|
320
388
|
const cacheReady = schemaCache.ready();
|
|
321
389
|
if (!cacheReady) {
|
|
322
|
-
console.error(`[cypher-validate] tool=${
|
|
390
|
+
console.error(`[cypher-validate] tool=${isWriteCall ? "write" : "read"} outcome=skipped reason=cache-not-ready cypher="${(cypherPrefix ?? "").replace(/"/g, "'")}"`);
|
|
323
391
|
pending.set(msg.id, entry);
|
|
324
392
|
return "forward";
|
|
325
393
|
}
|
|
326
|
-
const result = (0, cypher_validate_js_1.validate)(cypherFull, snapshot
|
|
394
|
+
const result = (0, cypher_validate_js_1.validate)(cypherFull, snapshot, {
|
|
395
|
+
mode: isWriteCall ? "write" : "read",
|
|
396
|
+
});
|
|
327
397
|
entry.validated = true;
|
|
398
|
+
// Task 796: forbidden DDL/admin → hard reject in write mode (only path
|
|
399
|
+
// that produces forbidden entries; read mode never populates them).
|
|
400
|
+
if (isWriteCall && result.forbidden.length > 0) {
|
|
401
|
+
const forbiddenSummary = result.forbidden.map((f) => f.kind).join(",");
|
|
402
|
+
console.error(`[cypher-validate] tool=write outcome=rejected forbidden=${forbiddenSummary} cypher="${(cypherPrefix ?? "").replace(/"/g, "'")}"`);
|
|
403
|
+
const response = synthesiseForbiddenRejection(msg.id, result.forbidden);
|
|
404
|
+
process.stdout.write(`${response}\n`);
|
|
405
|
+
console.error(`[graph-query] op=${methodName} brand=${brand} port=${neo4jPort} cypher="${(cypherPrefix ?? "").replace(/"/g, "'")}" rejected=true forbidden=${forbiddenSummary} validated=true ms=${Date.now() - entry.startMs}`);
|
|
406
|
+
return "intercepted";
|
|
407
|
+
}
|
|
328
408
|
if (result.ok) {
|
|
329
|
-
console.error(`[cypher-validate] tool=${
|
|
409
|
+
console.error(`[cypher-validate] tool=${isWriteCall ? "write" : "read"} outcome=accepted labels=${result.labelTokens.length} relationships=${result.edgeTokens.length}`);
|
|
330
410
|
pending.set(msg.id, entry);
|
|
331
411
|
return "forward";
|
|
332
412
|
}
|
|
@@ -334,12 +414,16 @@ function handleRequestLine(line) {
|
|
|
334
414
|
const tokenSummary = result.unknown
|
|
335
415
|
.map((u) => `${u.kind}:${u.token}`)
|
|
336
416
|
.join(",");
|
|
337
|
-
if (
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
417
|
+
if (isWriteCall) {
|
|
418
|
+
// Task 796: write mode treats unknown tokens as soft warnings — operators
|
|
419
|
+
// legitimately introduce new labels (REMOVE n:Old SET n:New) and edges
|
|
420
|
+
// pending an ontology update. The post-write audit emits one
|
|
421
|
+
// unknown-type-warning per unknown so operators see the gap; the cypher
|
|
422
|
+
// forwards to upstream and commits.
|
|
423
|
+
entry.writeUnknownTokens = result.unknown;
|
|
424
|
+
console.error(`[cypher-validate] tool=write outcome=warned unknown=${tokenSummary} cypher="${(cypherPrefix ?? "").replace(/"/g, "'")}"`);
|
|
425
|
+
pending.set(msg.id, entry);
|
|
426
|
+
return "forward";
|
|
343
427
|
}
|
|
344
428
|
entry.readWarnings = result.unknown;
|
|
345
429
|
console.error(`[cypher-validate] tool=read outcome=warned unknown=${tokenSummary} cypher="${(cypherPrefix ?? "").replace(/"/g, "'")}"`);
|
|
@@ -369,6 +453,65 @@ function handleResponseLine(line) {
|
|
|
369
453
|
const rows = countRows(msg.result);
|
|
370
454
|
const warnedField = p.readWarnings.length > 0 ? ` warned=${p.readWarnings.length}` : "";
|
|
371
455
|
console.error(`[graph-query] op=${p.method} brand=${brand} port=${neo4jPort} ${cypherField} rows=${rows} ${validatedField}${warnedField} ms=${elapsed}`);
|
|
456
|
+
// Task 796 — post-write audit. The shim emits the `[graph-cypher-write]`
|
|
457
|
+
// family alongside the existing `[graph-query]` line so operators have a
|
|
458
|
+
// dedicated stream to grep without read-side noise. Static-only audit:
|
|
459
|
+
// unknown-type and missing-provenance warnings come from regex over the
|
|
460
|
+
// cypher body. Dynamic orphan detection (querying Neo4j for nodes
|
|
461
|
+
// matching createdBySession=$id AND NOT (n)--()) is deferred to Task 797
|
|
462
|
+
// — the audit module's `orphanIds` input stays empty here, the
|
|
463
|
+
// `[graph-cypher-write] orphan-warning` line never fires from production
|
|
464
|
+
// until that wires up.
|
|
465
|
+
if (p.isWrite && p.cypherFull && msg.result && !msg.result.isError) {
|
|
466
|
+
const counters = parseWriteCounters(msg.result);
|
|
467
|
+
const cypherPrefix = p.cypherPrefix ?? "";
|
|
468
|
+
const agentName = process.env.AGENT_SLUG ?? "unknown";
|
|
469
|
+
const sessionIdField = p.sessionIdParam ?? "unknown";
|
|
470
|
+
const snapshot = schemaCache.snapshot();
|
|
471
|
+
console.error((0, audit_js_1.formatAuditLine)({
|
|
472
|
+
kind: "accepted",
|
|
473
|
+
cypherPrefix,
|
|
474
|
+
nodesCreated: counters.nodes,
|
|
475
|
+
relsCreated: counters.rels,
|
|
476
|
+
agentName,
|
|
477
|
+
sessionId: sessionIdField,
|
|
478
|
+
}));
|
|
479
|
+
const auditWarnings = (0, audit_js_1.auditCypherWrite)({
|
|
480
|
+
cypher: p.cypherFull,
|
|
481
|
+
schema: snapshot,
|
|
482
|
+
agentName,
|
|
483
|
+
sessionId: sessionIdField,
|
|
484
|
+
nodesCreated: counters.nodes,
|
|
485
|
+
relsCreated: counters.rels,
|
|
486
|
+
orphanIds: [],
|
|
487
|
+
});
|
|
488
|
+
for (const w of auditWarnings) {
|
|
489
|
+
switch (w.kind) {
|
|
490
|
+
case "unknown-type-warning":
|
|
491
|
+
console.error((0, audit_js_1.formatAuditLine)({
|
|
492
|
+
kind: "unknown-type-warning",
|
|
493
|
+
cypherPrefix,
|
|
494
|
+
type: w.type,
|
|
495
|
+
}));
|
|
496
|
+
break;
|
|
497
|
+
case "missing-provenance-warning":
|
|
498
|
+
console.error((0, audit_js_1.formatAuditLine)({
|
|
499
|
+
kind: "missing-provenance-warning",
|
|
500
|
+
cypherPrefix,
|
|
501
|
+
created: w.created,
|
|
502
|
+
stamped: w.stamped,
|
|
503
|
+
}));
|
|
504
|
+
break;
|
|
505
|
+
case "orphan-warning":
|
|
506
|
+
console.error((0, audit_js_1.formatAuditLine)({
|
|
507
|
+
kind: "orphan-warning",
|
|
508
|
+
cypherPrefix,
|
|
509
|
+
orphanIds: w.orphanIds,
|
|
510
|
+
}));
|
|
511
|
+
break;
|
|
512
|
+
}
|
|
513
|
+
}
|
|
514
|
+
}
|
|
372
515
|
if (p.readWarnings.length > 0) {
|
|
373
516
|
try {
|
|
374
517
|
return wrapReadWarnings(msg, p.readWarnings);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|