@rubytech/create-realagent 1.0.638 → 1.0.642
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.js +7 -3
- package/package.json +2 -2
- package/payload/platform/plugins/memory/PLUGIN.md +8 -12
- package/payload/platform/plugins/memory/mcp/dist/index.js +19 -47
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts +20 -44
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js +21 -318
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-prune.js.map +1 -1
- package/payload/platform/plugins/memory/references/graph-primitives.md +25 -15
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js +40 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/check-due-events.js.map +1 -1
- package/payload/server/{chunk-LM5BMENF.js → chunk-B54KBAK4.js} +0 -5
- package/payload/server/package.json +2 -1
- package/payload/server/public/assets/{admin-tPrH6zWV.js → admin-jpGCzN83.js} +33 -33
- package/payload/server/public/index.html +1 -1
- package/payload/server/server.js +2146 -15063
- package/payload/server/upgrade-progress-server.js +1 -1
- package/payload/server/index.js +0 -7225
|
@@ -1,67 +1,33 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* Deny-list storage + agent-directed expunge helper.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
*
|
|
4
|
+
* Historical note: this file once hosted `runPrune`, a four-rule autonomous
|
|
5
|
+
* engine (orphan-delete, deny-list null, candidate-merge flag, contradiction
|
|
6
|
+
* flag) invoked by a 03:00 cron and the `graph-prune-run` MCP tool. The
|
|
7
|
+
* 2026-04-20 incident — one `graph-prune-run` call wiped nodeId=1
|
|
8
|
+
* `OnboardingState` plus 18 unrelated nodes via the orphan-delete rule — ended
|
|
9
|
+
* the autonomous-rule doctrine for graph hygiene. The LLM agent now applies
|
|
10
|
+
* discretion on what to null / delete / flag, using `memory-update`,
|
|
11
|
+
* `memory-delete` (soft-delete per Task 576), and `conversation-memory-expunge`
|
|
12
|
+
* on a per-case basis. The operator-curated deny-list remains as a stored
|
|
13
|
+
* signal the agent reads and reasons about; nothing auto-applies it.
|
|
8
14
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
*
|
|
12
|
-
*
|
|
13
|
-
*
|
|
14
|
-
*
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
18
|
-
*
|
|
19
|
-
* Safety ceiling: any single rule that would touch more than 5 % of total
|
|
20
|
-
* account nodes aborts that rule and emits [graph:prune:ceiling-tripped].
|
|
21
|
-
* Other rules in the same run continue; the ceiling protects against a
|
|
22
|
-
* deny-list typo or schema drift nuking legitimate data.
|
|
15
|
+
* What this file still exports:
|
|
16
|
+
* - `DenyList`, `loadDenylist`, `saveDenylist`, `denylistPath` — operator
|
|
17
|
+
* curation storage for the `graph-prune-denylist-{add,list,remove}` tools.
|
|
18
|
+
* Reads are advisory context for the agent, not automatic hits.
|
|
19
|
+
* - `resolveConfigDir` — brand config-dir resolver, shared with other plugins.
|
|
20
|
+
* - `expungeConversationMemory` — the helper behind the manual
|
|
21
|
+
* `conversation-memory-expunge` tool. Agent-directed: caller passes a
|
|
22
|
+
* conversationId + pattern, the helper nulls matching string properties on
|
|
23
|
+
* `:Memory` nodes linked to that conversation. No bulk logic.
|
|
23
24
|
*/
|
|
24
25
|
import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
25
26
|
import { resolve } from "node:path";
|
|
26
27
|
import { homedir } from "node:os";
|
|
27
|
-
const DEFAULT_CONFIG = {
|
|
28
|
-
enabled: true,
|
|
29
|
-
runHour: 3,
|
|
30
|
-
orphanAgeDays: 7,
|
|
31
|
-
safetyCeilingPercent: 5,
|
|
32
|
-
};
|
|
33
|
-
// ---------------------------------------------------------------------------
|
|
34
|
-
// Config + deny-list paths
|
|
35
|
-
//
|
|
36
|
-
// Both files live under ${configDir} (e.g. ~/.maxy/) so they are stable across
|
|
37
|
-
// upgrades and shared across accounts on the device. Per-account override via
|
|
38
|
-
// account-scoped subdirs is left for a future task — Phase 0 is single-account
|
|
39
|
-
// in practice and the deny-list is a coarse "this string is poison" instrument.
|
|
40
|
-
// ---------------------------------------------------------------------------
|
|
41
|
-
export function configPath(configDir) {
|
|
42
|
-
return resolve(configDir, "graph-prune.config.json");
|
|
43
|
-
}
|
|
44
28
|
export function denylistPath(configDir) {
|
|
45
29
|
return resolve(configDir, "graph-prune-denylist.json");
|
|
46
30
|
}
|
|
47
|
-
export function loadConfig(configDir) {
|
|
48
|
-
const path = configPath(configDir);
|
|
49
|
-
if (!existsSync(path))
|
|
50
|
-
return { ...DEFAULT_CONFIG };
|
|
51
|
-
try {
|
|
52
|
-
const raw = JSON.parse(readFileSync(path, "utf-8"));
|
|
53
|
-
return { ...DEFAULT_CONFIG, ...raw };
|
|
54
|
-
}
|
|
55
|
-
catch (err) {
|
|
56
|
-
// Malformed config falls back to defaults but the failure is loud.
|
|
57
|
-
process.stderr.write(`[graph-prune:config] failed to parse ${path}: ${err instanceof Error ? err.message : String(err)} — using defaults\n`);
|
|
58
|
-
return { ...DEFAULT_CONFIG };
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
export function saveConfig(configDir, config) {
|
|
62
|
-
mkdirSync(configDir, { recursive: true });
|
|
63
|
-
writeFileSync(configPath(configDir), JSON.stringify(config, null, 2) + "\n", "utf-8");
|
|
64
|
-
}
|
|
65
31
|
export function loadDenylist(configDir) {
|
|
66
32
|
const path = denylistPath(configDir);
|
|
67
33
|
if (!existsSync(path)) {
|
|
@@ -75,7 +41,7 @@ export function loadDenylist(configDir) {
|
|
|
75
41
|
};
|
|
76
42
|
}
|
|
77
43
|
catch (err) {
|
|
78
|
-
process.stderr.write(`[
|
|
44
|
+
process.stderr.write(`[denylist] failed to parse ${path}: ${err instanceof Error ? err.message : String(err)} — treating as empty\n`);
|
|
79
45
|
return { values: [], updatedAt: new Date(0).toISOString() };
|
|
80
46
|
}
|
|
81
47
|
}
|
|
@@ -98,269 +64,6 @@ export function resolveConfigDir() {
|
|
|
98
64
|
}
|
|
99
65
|
return resolve(homedir(), brand.configDir);
|
|
100
66
|
}
|
|
101
|
-
const CANONICAL_KEYS = [
|
|
102
|
-
{ label: "Person", keyTuples: [["email"], ["phone"]] },
|
|
103
|
-
{ label: "LocalBusiness", keyTuples: [["name"]] },
|
|
104
|
-
{ label: "Tunnel", keyTuples: [["tunnelId"]] },
|
|
105
|
-
{ label: "Account", keyTuples: [["accountId"]] },
|
|
106
|
-
{ label: "Conversation", keyTuples: [["conversationId"]] },
|
|
107
|
-
];
|
|
108
|
-
// ---------------------------------------------------------------------------
|
|
109
|
-
// Helpers
|
|
110
|
-
// ---------------------------------------------------------------------------
|
|
111
|
-
function logLine(line) {
|
|
112
|
-
process.stderr.write(line.endsWith("\n") ? line : line + "\n");
|
|
113
|
-
}
|
|
114
|
-
function tripsCeiling(wouldAffect, totalNodes, ceilingPercent) {
|
|
115
|
-
if (totalNodes === 0)
|
|
116
|
-
return false;
|
|
117
|
-
return (wouldAffect / totalNodes) * 100 > ceilingPercent;
|
|
118
|
-
}
|
|
119
|
-
export async function runPrune(driver, accountId, config, denylist, opts = {}) {
|
|
120
|
-
const dryRun = opts.dryRun ?? false;
|
|
121
|
-
const t0 = Date.now();
|
|
122
|
-
const summary = {
|
|
123
|
-
accountId,
|
|
124
|
-
totalNodes: 0,
|
|
125
|
-
orphansDeleted: 0,
|
|
126
|
-
denylistNulled: 0,
|
|
127
|
-
conversationMemoryNulled: 0,
|
|
128
|
-
candidateMergesFlagged: 0,
|
|
129
|
-
contradictionsFlagged: 0,
|
|
130
|
-
ceilingTripped: [],
|
|
131
|
-
elapsedMs: 0,
|
|
132
|
-
dryRun,
|
|
133
|
-
};
|
|
134
|
-
const session = driver.session();
|
|
135
|
-
try {
|
|
136
|
-
// Total node count for safety ceiling.
|
|
137
|
-
const totalRes = await session.run("MATCH (n) WHERE n.accountId = $accountId RETURN count(n) AS c", { accountId });
|
|
138
|
-
summary.totalNodes = Number(totalRes.records[0]?.get("c") ?? 0);
|
|
139
|
-
logLine(`[graph:prune:start] account=${accountId} totalNodes=${summary.totalNodes} dryRun=${dryRun} denylistSize=${denylist.values.length}`);
|
|
140
|
-
if (summary.totalNodes === 0) {
|
|
141
|
-
logLine(`[graph:prune:summary] account=${accountId} deleted=0 nulled=0 convNulled=0 flagged=0 contradictions=0 elapsed=${Date.now() - t0}ms (empty graph)`);
|
|
142
|
-
summary.elapsedMs = Date.now() - t0;
|
|
143
|
-
return summary;
|
|
144
|
-
}
|
|
145
|
-
// -----------------------------------------------------------------------
|
|
146
|
-
// Rule 1: orphan delete (no relations, age > config.orphanAgeDays)
|
|
147
|
-
// Excludes UserProfile, Account, LocalBusiness — those legitimately exist
|
|
148
|
-
// without relations on a fresh install.
|
|
149
|
-
// -----------------------------------------------------------------------
|
|
150
|
-
const orphanCutoff = new Date(Date.now() - config.orphanAgeDays * 86_400_000).toISOString();
|
|
151
|
-
const orphanCountRes = await session.run(`MATCH (n)
|
|
152
|
-
WHERE n.accountId = $accountId
|
|
153
|
-
AND NOT (n)--()
|
|
154
|
-
AND coalesce(n.createdAt, n.updatedAt) < $cutoff
|
|
155
|
-
AND NOT (n:UserProfile OR n:Account OR n:LocalBusiness)
|
|
156
|
-
RETURN count(n) AS c`, { accountId, cutoff: orphanCutoff });
|
|
157
|
-
const orphanCount = Number(orphanCountRes.records[0]?.get("c") ?? 0);
|
|
158
|
-
if (orphanCount > 0) {
|
|
159
|
-
if (tripsCeiling(orphanCount, summary.totalNodes, config.safetyCeilingPercent)) {
|
|
160
|
-
logLine(`[graph:prune:ceiling-tripped] rule=orphan-delete wouldAffect=${orphanCount} totalNodes=${summary.totalNodes} ceiling=${config.safetyCeilingPercent}%`);
|
|
161
|
-
summary.ceilingTripped.push("orphan-delete");
|
|
162
|
-
}
|
|
163
|
-
else {
|
|
164
|
-
logLine(`[graph:prune:rule-start] rule=orphan-delete count=${orphanCount}`);
|
|
165
|
-
if (!dryRun) {
|
|
166
|
-
// Audit each delete before the bulk DETACH DELETE — without per-node
|
|
167
|
-
// ids in the log, recovery from a misconfiguration is impossible.
|
|
168
|
-
const idsRes = await session.run(`MATCH (n)
|
|
169
|
-
WHERE n.accountId = $accountId
|
|
170
|
-
AND NOT (n)--()
|
|
171
|
-
AND coalesce(n.createdAt, n.updatedAt) < $cutoff
|
|
172
|
-
AND NOT (n:UserProfile OR n:Account OR n:LocalBusiness)
|
|
173
|
-
RETURN id(n) AS nid, labels(n) AS labels LIMIT 1000`, { accountId, cutoff: orphanCutoff });
|
|
174
|
-
for (const r of idsRes.records) {
|
|
175
|
-
logLine(`[graph:prune:action] rule=orphan-delete op=delete nodeId=${r.get("nid")} labels=${r.get("labels").join(",")}`);
|
|
176
|
-
}
|
|
177
|
-
await session.run(`MATCH (n)
|
|
178
|
-
WHERE n.accountId = $accountId
|
|
179
|
-
AND NOT (n)--()
|
|
180
|
-
AND coalesce(n.createdAt, n.updatedAt) < $cutoff
|
|
181
|
-
AND NOT (n:UserProfile OR n:Account OR n:LocalBusiness)
|
|
182
|
-
DELETE n`, { accountId, cutoff: orphanCutoff });
|
|
183
|
-
}
|
|
184
|
-
summary.orphansDeleted = orphanCount;
|
|
185
|
-
}
|
|
186
|
-
}
|
|
187
|
-
// -----------------------------------------------------------------------
|
|
188
|
-
// Rule 2: deny-list null
|
|
189
|
-
//
|
|
190
|
-
// Scan every node for string properties whose value contains any deny-list
|
|
191
|
-
// entry (substring match). Null those properties, append an audit entry to
|
|
192
|
-
// a per-node `_denylistAudit` JSON-encoded property. Excludes the audit
|
|
193
|
-
// property itself from the scan to avoid runaway re-matching on stored
|
|
194
|
-
// history.
|
|
195
|
-
// -----------------------------------------------------------------------
|
|
196
|
-
if (denylist.values.length > 0) {
|
|
197
|
-
const matchingRes = await session.run(`MATCH (n)
|
|
198
|
-
WHERE n.accountId = $accountId
|
|
199
|
-
WITH n, [k IN keys(n) WHERE k <> '_denylistAudit'
|
|
200
|
-
AND k <> 'embedding'
|
|
201
|
-
AND apoc.meta.cypher.isType(n[k], 'STRING')
|
|
202
|
-
AND any(deny IN $denylist WHERE n[k] CONTAINS deny)] AS hits
|
|
203
|
-
WHERE size(hits) > 0
|
|
204
|
-
RETURN id(n) AS nid, labels(n) AS labels, hits LIMIT 5000`, { accountId, denylist: denylist.values }).catch(async (apocErr) => {
|
|
205
|
-
// APOC may be unavailable on minimal Neo4j installs; fall back to a
|
|
206
|
-
// pure-Cypher type check that is slower but functional.
|
|
207
|
-
process.stderr.write(`[graph:prune:denylist] APOC unavailable (${apocErr instanceof Error ? apocErr.message : String(apocErr)}); using pure-Cypher fallback\n`);
|
|
208
|
-
return session.run(`MATCH (n)
|
|
209
|
-
WHERE n.accountId = $accountId
|
|
210
|
-
WITH n, [k IN keys(n) WHERE k <> '_denylistAudit'
|
|
211
|
-
AND k <> 'embedding'
|
|
212
|
-
AND any(deny IN $denylist WHERE
|
|
213
|
-
CASE
|
|
214
|
-
WHEN n[k] IS NULL THEN false
|
|
215
|
-
WHEN toString(n[k]) = n[k] THEN n[k] CONTAINS deny
|
|
216
|
-
ELSE false
|
|
217
|
-
END)] AS hits
|
|
218
|
-
WHERE size(hits) > 0
|
|
219
|
-
RETURN id(n) AS nid, labels(n) AS labels, hits LIMIT 5000`, { accountId, denylist: denylist.values });
|
|
220
|
-
});
|
|
221
|
-
const matchCount = matchingRes.records.length;
|
|
222
|
-
if (matchCount > 0) {
|
|
223
|
-
if (tripsCeiling(matchCount, summary.totalNodes, config.safetyCeilingPercent)) {
|
|
224
|
-
logLine(`[graph:prune:ceiling-tripped] rule=denylist-null wouldAffect=${matchCount} totalNodes=${summary.totalNodes} ceiling=${config.safetyCeilingPercent}%`);
|
|
225
|
-
summary.ceilingTripped.push("denylist-null");
|
|
226
|
-
}
|
|
227
|
-
else {
|
|
228
|
-
logLine(`[graph:prune:rule-start] rule=denylist-null nodes=${matchCount}`);
|
|
229
|
-
for (const r of matchingRes.records) {
|
|
230
|
-
const nid = Number(r.get("nid"));
|
|
231
|
-
const labels = r.get("labels").join(",");
|
|
232
|
-
const hits = r.get("hits");
|
|
233
|
-
for (const propKey of hits) {
|
|
234
|
-
logLine(`[graph:prune:action] rule=denylist-null op=null nodeId=${nid} labels=${labels} property=${propKey}`);
|
|
235
|
-
}
|
|
236
|
-
if (!dryRun) {
|
|
237
|
-
const auditEntry = JSON.stringify({
|
|
238
|
-
ts: new Date().toISOString(),
|
|
239
|
-
properties: hits,
|
|
240
|
-
denylistMatches: denylist.values,
|
|
241
|
-
});
|
|
242
|
-
const setClauses = hits.map((k) => `n.\`${k.replace(/`/g, "")}\` = null`).join(", ");
|
|
243
|
-
await session.run(`MATCH (n) WHERE id(n) = $nid
|
|
244
|
-
SET ${setClauses},
|
|
245
|
-
n._denylistAudit = coalesce(n._denylistAudit, '') + $entry + '\n'`, { nid, entry: auditEntry });
|
|
246
|
-
summary.denylistNulled += hits.length;
|
|
247
|
-
}
|
|
248
|
-
else {
|
|
249
|
-
summary.denylistNulled += hits.length;
|
|
250
|
-
}
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
}
|
|
255
|
-
// -----------------------------------------------------------------------
|
|
256
|
-
// Rule 3: conversation-memory deny-list null
|
|
257
|
-
//
|
|
258
|
-
// Pollution surface: :Memory nodes tied to :Conversation. Same scan as
|
|
259
|
-
// rule 2 but scoped to that label so the cost stays bounded even when
|
|
260
|
-
// the deny-list grows.
|
|
261
|
-
// -----------------------------------------------------------------------
|
|
262
|
-
if (denylist.values.length > 0) {
|
|
263
|
-
const memRes = await session.run(`MATCH (m:Memory)-[:PART_OF|:ABOUT]->(c:Conversation)
|
|
264
|
-
WHERE m.accountId = $accountId
|
|
265
|
-
WITH m, [k IN keys(m) WHERE k <> '_denylistAudit'
|
|
266
|
-
AND k <> 'embedding'
|
|
267
|
-
AND any(deny IN $denylist WHERE
|
|
268
|
-
CASE
|
|
269
|
-
WHEN m[k] IS NULL THEN false
|
|
270
|
-
WHEN toString(m[k]) = m[k] THEN m[k] CONTAINS deny
|
|
271
|
-
ELSE false
|
|
272
|
-
END)] AS hits
|
|
273
|
-
WHERE size(hits) > 0
|
|
274
|
-
RETURN id(m) AS nid, hits LIMIT 5000`, { accountId, denylist: denylist.values });
|
|
275
|
-
const memCount = memRes.records.length;
|
|
276
|
-
if (memCount > 0) {
|
|
277
|
-
if (tripsCeiling(memCount, summary.totalNodes, config.safetyCeilingPercent)) {
|
|
278
|
-
logLine(`[graph:prune:ceiling-tripped] rule=conversation-memory-null wouldAffect=${memCount} totalNodes=${summary.totalNodes} ceiling=${config.safetyCeilingPercent}%`);
|
|
279
|
-
summary.ceilingTripped.push("conversation-memory-null");
|
|
280
|
-
}
|
|
281
|
-
else {
|
|
282
|
-
logLine(`[graph:prune:rule-start] rule=conversation-memory-null nodes=${memCount}`);
|
|
283
|
-
for (const r of memRes.records) {
|
|
284
|
-
const nid = Number(r.get("nid"));
|
|
285
|
-
const hits = r.get("hits");
|
|
286
|
-
for (const k of hits) {
|
|
287
|
-
logLine(`[graph:prune:action] rule=conversation-memory-null op=null nodeId=${nid} property=${k}`);
|
|
288
|
-
}
|
|
289
|
-
if (!dryRun) {
|
|
290
|
-
const setClauses = hits.map((k) => `m.\`${k.replace(/`/g, "")}\` = null`).join(", ");
|
|
291
|
-
const auditEntry = JSON.stringify({
|
|
292
|
-
ts: new Date().toISOString(),
|
|
293
|
-
properties: hits,
|
|
294
|
-
denylistMatches: denylist.values,
|
|
295
|
-
});
|
|
296
|
-
await session.run(`MATCH (m) WHERE id(m) = $nid
|
|
297
|
-
SET ${setClauses},
|
|
298
|
-
m._denylistAudit = coalesce(m._denylistAudit, '') + $entry + '\n'`, { nid, entry: auditEntry });
|
|
299
|
-
}
|
|
300
|
-
summary.conversationMemoryNulled += hits.length;
|
|
301
|
-
}
|
|
302
|
-
}
|
|
303
|
-
}
|
|
304
|
-
}
|
|
305
|
-
// -----------------------------------------------------------------------
|
|
306
|
-
// Rule 4: candidate-merge flagging (per the 2026-04-19 user decision —
|
|
307
|
-
// never auto-merge; admin agent reviews next turn).
|
|
308
|
-
//
|
|
309
|
-
// For each canonical-key spec, find pairs of nodes sharing the key value.
|
|
310
|
-
// Emit a flag line per pair; stored as :PruneFlag nodes so the
|
|
311
|
-
// review-detector pattern (graph:prune:candidate-merge) can surface them.
|
|
312
|
-
// -----------------------------------------------------------------------
|
|
313
|
-
for (const spec of CANONICAL_KEYS) {
|
|
314
|
-
for (const tuple of spec.keyTuples) {
|
|
315
|
-
const matchProps = tuple.map((k) => `a.\`${k}\` IS NOT NULL AND a.\`${k}\` = b.\`${k}\``).join(" AND ");
|
|
316
|
-
const returnProps = tuple.map((k) => `a.\`${k}\` AS \`${k}\``).join(", ");
|
|
317
|
-
const dupRes = await session.run(`MATCH (a:${spec.label}), (b:${spec.label})
|
|
318
|
-
WHERE a.accountId = $accountId AND b.accountId = $accountId
|
|
319
|
-
AND id(a) < id(b)
|
|
320
|
-
AND ${matchProps}
|
|
321
|
-
RETURN id(a) AS aid, id(b) AS bid, ${returnProps} LIMIT 500`, { accountId });
|
|
322
|
-
for (const r of dupRes.records) {
|
|
323
|
-
const aid = Number(r.get("aid"));
|
|
324
|
-
const bid = Number(r.get("bid"));
|
|
325
|
-
const keyValues = tuple.map((k) => `${k}=${r.get(k)}`).join(",");
|
|
326
|
-
logLine(`[graph:prune:candidate-merge] label=${spec.label} keys=${keyValues} sourceId=${aid} targetId=${bid}`);
|
|
327
|
-
summary.candidateMergesFlagged += 1;
|
|
328
|
-
if (!dryRun) {
|
|
329
|
-
await session.run(`MERGE (f:PruneFlag {accountId: $accountId, kind: 'candidate-merge', sourceId: $aid, targetId: $bid})
|
|
330
|
-
ON CREATE SET f.label = $label, f.keys = $keys, f.createdAt = datetime()`, { accountId, aid, bid, label: spec.label, keys: keyValues });
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
}
|
|
334
|
-
}
|
|
335
|
-
// -----------------------------------------------------------------------
|
|
336
|
-
// Rule 5: contradiction detection
|
|
337
|
-
//
|
|
338
|
-
// Same node, same atomic property, multiple recent writes with diverging
|
|
339
|
-
// values. Detected via the audit trail Task 343 lays down on ToolCall
|
|
340
|
-
// records — but those are append-only, so the simpler signal here is
|
|
341
|
-
// Preference nodes whose status indicates contradiction (set by
|
|
342
|
-
// profile-update mode=contradict).
|
|
343
|
-
// -----------------------------------------------------------------------
|
|
344
|
-
const contraRes = await session.run(`MATCH (p:Preference)
|
|
345
|
-
WHERE p.accountId = $accountId AND p.status = 'contradicted'
|
|
346
|
-
AND p.flaggedByPrune IS NULL
|
|
347
|
-
RETURN id(p) AS pid, p.category AS category, p.key AS key LIMIT 200`, { accountId });
|
|
348
|
-
for (const r of contraRes.records) {
|
|
349
|
-
const pid = Number(r.get("pid"));
|
|
350
|
-
logLine(`[graph:prune:contradiction] nodeId=${pid} category=${r.get("category")} key=${r.get("key")}`);
|
|
351
|
-
summary.contradictionsFlagged += 1;
|
|
352
|
-
if (!dryRun) {
|
|
353
|
-
await session.run(`MATCH (p) WHERE id(p) = $pid SET p.flaggedByPrune = datetime()`, { pid });
|
|
354
|
-
}
|
|
355
|
-
}
|
|
356
|
-
summary.elapsedMs = Date.now() - t0;
|
|
357
|
-
logLine(`[graph:prune:summary] account=${accountId} deleted=${summary.orphansDeleted} nulled=${summary.denylistNulled} convNulled=${summary.conversationMemoryNulled} flagged=${summary.candidateMergesFlagged} contradictions=${summary.contradictionsFlagged} ceilingTripped=${summary.ceilingTripped.join(",") || "none"} elapsed=${summary.elapsedMs}ms dryRun=${dryRun}`);
|
|
358
|
-
return summary;
|
|
359
|
-
}
|
|
360
|
-
finally {
|
|
361
|
-
await session.close();
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
67
|
export async function expungeConversationMemory(driver, accountId, conversationId, pattern) {
|
|
365
68
|
const session = driver.session();
|
|
366
69
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-prune.js","sourceRoot":"","sources":["../../src/lib/graph-prune.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"graph-prune.js","sourceRoot":"","sources":["../../src/lib/graph-prune.ts"],"names":[],"mappings":"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"}
|
|
@@ -43,19 +43,24 @@ token-limit discipline the upstream server enforces.
|
|
|
43
43
|
The graph tools above are read-only. Every write intent has a schema-aware
|
|
44
44
|
tool that already exists — match the user's prose to a tool in this table
|
|
45
45
|
rather than improvising. `mcp__admin__admin-remove` is in your initial
|
|
46
|
-
tool list; the other
|
|
47
|
-
|
|
46
|
+
tool list; the other tools below are deferred (they do not appear until
|
|
47
|
+
you invoke `ToolSearch` by the exact name you pick from the table).
|
|
48
48
|
Do not use `ToolSearch` to *discover* the tool by keyword — identify it
|
|
49
49
|
from the table first, then fetch its schema by exact name.
|
|
50
50
|
|
|
51
|
+
There is **no autonomous rule engine and no cron** for graph hygiene.
|
|
52
|
+
Cleanup is agent-directed, case by case, using your judgment on the
|
|
53
|
+
evidence in front of you (memory-search results, cypher reads, the
|
|
54
|
+
operator-curated deny-list). Never apply a bulk transformation to the
|
|
55
|
+
graph as a single action.
|
|
56
|
+
|
|
51
57
|
| User intent | Tool | When to pick this, not the next row |
|
|
52
58
|
|---|---|---|
|
|
53
|
-
| "prune", "clean up", "remove orphans", "graph hygiene" | `mcp__memory__graph-prune-run` | On-demand run of the nightly 03:00 cron: orphan-delete, deny-list null, candidate-merge flag, contradiction flag. Targets nodes by *structural pattern* (e.g. "no inbound or outbound edges"), not by identity — no `elementId` needed. Run with `dryRun: true` first when the blast radius is unknown. Not for removing one specific node by id — use `memory-delete` for that. |
|
|
54
59
|
| "remove admin X", "take away their admin access", "revoke admin" | `mcp__admin__admin-remove` | Device-level admin offboarding — detaches the `(AdminUser)-[:ADMIN_OF]->(LocalBusiness)` edge and updates `platform/config/users.json`. Not for scrubbing personal data — use the GDPR contact-erase tools for that. |
|
|
55
|
-
| "delete this specific node", "remove this entry by its id", "get rid of node X" | `mcp__memory__memory-delete` |
|
|
56
|
-
| "scrub this conversation's memory", "remove this claim the bot picked up", "forget what we said in that thread" | `mcp__memory__conversation-memory-expunge` | Removes
|
|
57
|
-
| "update a property", "fix a typo in a node", "change the role field on X" | `mcp__memory__memory-update` | Targeted property edit on an existing node, schema-validated. Not for creating new nodes — use `memory-write`. |
|
|
58
|
-
| "don't surface these substrings in future memory results", "
|
|
60
|
+
| "delete this specific node", "remove this entry by its id", "get rid of node X", "remove orphans", "prune", "clean up" | `mcp__memory__memory-delete` | Single-node deletion by `elementId`. For KnowledgeDocument, cascades to Sections and Chunks. Enumerate candidates first with a Cypher read, confirm with the user, then delete each by `elementId`. There is no bulk "delete everything without relationships" tool — standalone nodes are legitimate for many labels (OnboardingState, configuration nodes, freshly-discovered Persons before edges land). |
|
|
61
|
+
| "scrub this conversation's memory", "remove this claim the bot picked up", "forget what we said in that thread" | `mcp__memory__conversation-memory-expunge` | Removes deny-listable content from `:Memory` nodes scoped to one conversation. Requires an explicit pattern and conversationId. Not for deleting individual nodes — use `memory-delete`. |
|
|
62
|
+
| "update a property", "fix a typo in a node", "change the role field on X", "null this poisonous string" | `mcp__memory__memory-update` | Targeted property edit on an existing node, schema-validated. Use to null individual string properties matching a deny-list entry once you've identified the offender via a Cypher read. Not for creating new nodes — use `memory-write`. |
|
|
63
|
+
| "don't surface these substrings in future memory results", "watch for this string" | `mcp__memory__graph-prune-denylist-add` | Records a substring as operator-curated signal. Nothing auto-applies it — when a subsequent memory-search or cypher read surfaces a match, use `memory-update` or `memory-delete` with discretion to scrub it. |
|
|
59
64
|
|
|
60
65
|
**Never run `cypher-shell` via `Bash` to work around the read-only tool.**
|
|
61
66
|
The admin session's `Bash` surface has no path to the per-brand Neo4j
|
|
@@ -69,14 +74,19 @@ surface. It can be added as a task."* — do not invent a workaround.
|
|
|
69
74
|
|
|
70
75
|
**Worked example — "prune the stale AdminUsers".** When an admin asks to
|
|
71
76
|
prune stale AdminUser entries (e.g., 15 nodes left over from prior
|
|
72
|
-
installs, none linked by `ADMIN_OF` to a `LocalBusiness`),
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
77
|
+
installs, none linked by `ADMIN_OF` to a `LocalBusiness`), enumerate them
|
|
78
|
+
with a Cypher read:
|
|
79
|
+
|
|
80
|
+
```cypher
|
|
81
|
+
MATCH (a:AdminUser) WHERE NOT (a)--() RETURN elementId(a), a.userId, a.createdAt
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Show the list to the user. For each confirmed entry, call
|
|
85
|
+
`mcp__memory__memory-delete` with the `elementId`. Do not batch-delete
|
|
86
|
+
by pattern — on 2026-04-20 an autonomous orphan-delete rule wiped the
|
|
87
|
+
sole `OnboardingState` node plus 18 unrelated nodes in one call, with
|
|
88
|
+
no property recovery possible. Structural mass-deletion by shape is
|
|
89
|
+
banned; discretion per node is the only sanctioned path.
|
|
80
90
|
|
|
81
91
|
## Non-negotiable: never return raw nodes
|
|
82
92
|
|
|
@@ -376,6 +376,35 @@ async function reconcilePluginLifecycles(driver) {
|
|
|
376
376
|
// ---------------------------------------------------------------------------
|
|
377
377
|
// Main
|
|
378
378
|
// ---------------------------------------------------------------------------
|
|
379
|
+
/**
|
|
380
|
+
* Account IDs present on this install's filesystem. Dispatch queries
|
|
381
|
+
* are scoped to this set so a scheduler connected (by env misconfig or
|
|
382
|
+
* intent) to a Neo4j instance shared with another install never
|
|
383
|
+
* dispatches foreign events against the local platformRoot. Without
|
|
384
|
+
* this guard, install A's workflow-execute runs against install B's
|
|
385
|
+
* accountId, finds no matching data/accounts/<id>/ directory under A's
|
|
386
|
+
* platformRoot, and surfaces as silent "No model configured" failures
|
|
387
|
+
* on B's Events — the root cause pattern Task 571 tracked to stale
|
|
388
|
+
* cross-install cron dispatches.
|
|
389
|
+
*/
|
|
390
|
+
function listLocalAccountIds(platformRoot) {
|
|
391
|
+
const accountsDir = resolve(platformRoot, "..", "data/accounts");
|
|
392
|
+
if (!existsSync(accountsDir))
|
|
393
|
+
return [];
|
|
394
|
+
try {
|
|
395
|
+
return readdirSync(accountsDir).filter((d) => {
|
|
396
|
+
try {
|
|
397
|
+
return existsSync(join(accountsDir, d, "account.json"));
|
|
398
|
+
}
|
|
399
|
+
catch {
|
|
400
|
+
return false;
|
|
401
|
+
}
|
|
402
|
+
});
|
|
403
|
+
}
|
|
404
|
+
catch {
|
|
405
|
+
return [];
|
|
406
|
+
}
|
|
407
|
+
}
|
|
379
408
|
async function main() {
|
|
380
409
|
if (!acquireLock()) {
|
|
381
410
|
console.error("[check-due] another instance running, exiting");
|
|
@@ -384,17 +413,24 @@ async function main() {
|
|
|
384
413
|
console.error("[check-due] lock acquired");
|
|
385
414
|
const driver = connectNeo4j();
|
|
386
415
|
const now = new Date().toISOString();
|
|
416
|
+
const localAccountIds = listLocalAccountIds(process.env.PLATFORM_ROOT);
|
|
387
417
|
let processed = 0;
|
|
388
418
|
let dispatched = 0;
|
|
389
419
|
let errors = 0;
|
|
420
|
+
if (localAccountIds.length === 0) {
|
|
421
|
+
console.error("[check-due] no local accounts under platformRoot — skipping dispatch sweep (reconcile still runs)");
|
|
422
|
+
}
|
|
390
423
|
try {
|
|
391
424
|
// --- One-time events: startDate <= now AND status = 'scheduled' AND no recurrence ---
|
|
425
|
+
// Scoped to local accounts so a scheduler sharing a Neo4j instance with
|
|
426
|
+
// another install never dispatches foreign events (Task 571).
|
|
392
427
|
const oneTimeSession = driver.session();
|
|
393
428
|
try {
|
|
394
429
|
const oneTimeResult = await oneTimeSession.run(`MATCH (e:Event)
|
|
395
430
|
WHERE e.eventStatus = 'scheduled'
|
|
396
431
|
AND e.recurrence IS NULL
|
|
397
432
|
AND e.startDate <= $now
|
|
433
|
+
AND e.accountId IN $localAccountIds
|
|
398
434
|
SET e.eventStatus = 'due',
|
|
399
435
|
e.updatedAt = $now,
|
|
400
436
|
e.notes = COALESCE(e.notes, '') + $noteEntry
|
|
@@ -404,6 +440,7 @@ async function main() {
|
|
|
404
440
|
e.actionTool AS actionTool,
|
|
405
441
|
e.actionArgs AS actionArgs`, {
|
|
406
442
|
now,
|
|
443
|
+
localAccountIds,
|
|
407
444
|
noteEntry: `\n[${now}] Marked due by cron`,
|
|
408
445
|
});
|
|
409
446
|
for (const record of oneTimeResult.records) {
|
|
@@ -425,6 +462,7 @@ async function main() {
|
|
|
425
462
|
await oneTimeSession.close();
|
|
426
463
|
}
|
|
427
464
|
// --- Recurring events: nextRun <= now AND status = 'scheduled' ---
|
|
465
|
+
// Scoped to local accounts (see one-time query above).
|
|
428
466
|
const recurringSession = driver.session();
|
|
429
467
|
try {
|
|
430
468
|
const recurringResult = await recurringSession.run(`MATCH (e:Event)
|
|
@@ -432,12 +470,13 @@ async function main() {
|
|
|
432
470
|
AND e.recurrence IS NOT NULL
|
|
433
471
|
AND e.nextRun IS NOT NULL
|
|
434
472
|
AND e.nextRun <= $now
|
|
473
|
+
AND e.accountId IN $localAccountIds
|
|
435
474
|
RETURN e.eventId AS eventId, e.name AS name,
|
|
436
475
|
e.recurrence AS recurrence, e.nextRun AS nextRun,
|
|
437
476
|
e.timezone AS timezone, e.accountId AS accountId,
|
|
438
477
|
e.actionPlugin AS actionPlugin,
|
|
439
478
|
e.actionTool AS actionTool,
|
|
440
|
-
e.actionArgs AS actionArgs`, { now });
|
|
479
|
+
e.actionArgs AS actionArgs`, { now, localAccountIds });
|
|
441
480
|
for (const record of recurringResult.records) {
|
|
442
481
|
const eventId = record.get("eventId");
|
|
443
482
|
const name = record.get("name");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"check-due-events.js","sourceRoot":"","sources":["../../src/scripts/check-due-events.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"check-due-events.js","sourceRoot":"","sources":["../../src/scripts/check-due-events.ts"],"names":[],"mappings":"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"}
|