@rubytech/create-maxy-code 0.1.144 → 0.1.147
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/neo4j/schema.cypher +154 -4
- package/payload/platform/plugins/admin/PLUGIN.md +1 -1
- package/payload/platform/plugins/admin/hooks/post-turn-graph-pass.sh +251 -0
- package/payload/platform/plugins/admin/skills/datetime/SKILL.md +63 -5
- package/payload/platform/plugins/docs/references/internals.md +16 -0
- package/payload/platform/plugins/docs/references/memory-guide.md +10 -0
- package/payload/platform/plugins/docs/references/platform.md +1 -1
- package/payload/platform/plugins/memory/.claude-plugin/plugin.json +1 -1
- package/payload/platform/plugins/memory/PLUGIN.md +25 -3
- package/payload/platform/plugins/memory/mcp/dist/index.js +309 -11
- package/payload/platform/plugins/memory/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js +33 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/compiled-truth-revision.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-label.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-label.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-label.test.js +30 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/graph-write-gate-label.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-prune-revisions.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-prune-revisions.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-prune-revisions.test.js +51 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/phase-prune-revisions.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relative-date.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relative-date.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relative-date.test.js +68 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/relative-date.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.js +41 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/__tests__/timeline-extractor.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts +43 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.js +33 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-revision.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts +18 -5
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js +64 -17
- package/payload/platform/plugins/memory/mcp/dist/lib/compiled-truth-rewriter.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts +44 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.js +14 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/index.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-citation-audit.d.ts +26 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-citation-audit.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-citation-audit.js +219 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-citation-audit.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-dead-edges.d.ts +19 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-dead-edges.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-dead-edges.js +39 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-dead-edges.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-orphans.d.ts +19 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-orphans.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-orphans.js +42 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-orphans.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-prune-revisions.d.ts +21 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-prune-revisions.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-prune-revisions.js +27 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-prune-revisions.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-stale-truth.d.ts +18 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-stale-truth.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-stale-truth.js +60 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/dream-cycle/phase-stale-truth.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts +20 -3
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js +47 -12
- package/payload/platform/plugins/memory/mcp/dist/lib/graph-write-gate.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/relative-date.d.ts +13 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/relative-date.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/relative-date.js +191 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/relative-date.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.d.ts +7 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.js +37 -9
- package/payload/platform/plugins/memory/mcp/dist/lib/timeline-extractor.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js +81 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-compiled-truth-history.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.d.ts +2 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.js +115 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-report-tools.test.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-update-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/__tests__/memory-write-emit.test.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts +19 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js +50 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-compiled-truth-history.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts +45 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js +170 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-dream-run.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-list.d.ts +28 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-list.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-list.js +64 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-list.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-read-latest.d.ts +24 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-read-latest.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-read-latest.js +49 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-read-latest.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.d.ts +34 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.js +99 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-report-write.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.d.ts +29 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.d.ts.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.js +66 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-review-queue.js.map +1 -0
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js +122 -2
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-search.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts +49 -13
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js +184 -16
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-update.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.d.ts.map +1 -1
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js +53 -10
- package/payload/platform/plugins/memory/mcp/dist/tools/memory-write.js.map +1 -1
- package/payload/platform/plugins/memory/mcp/vitest.config.ts +6 -0
- package/payload/platform/plugins/memory/references/schema-base.md +4 -0
- package/payload/platform/plugins/memory/skills/conversation-archive/SKILL.md +3 -4
- package/payload/platform/plugins/scheduling/skills/briefing/SKILL.md +13 -2
- package/payload/platform/scripts/seed-neo4j.sh +1 -1
- package/payload/platform/templates/agents/admin/IDENTITY.md +9 -1
- package/payload/platform/templates/specialists/agents/database-operator.md +30 -2
- package/payload/server/server.js +195 -91
- package/payload/platform/plugins/admin/hooks/signal-detector-stop.sh +0 -309
- package/payload/platform/templates/specialists/agents/signal-detector.md +0 -129
|
@@ -1,38 +1,78 @@
|
|
|
1
1
|
import { getSession } from "../lib/neo4j.js";
|
|
2
2
|
import { embed } from "../lib/embeddings.js";
|
|
3
3
|
import { buildTextRepresentation } from "./memory-write.js";
|
|
4
|
-
import { checkGraphWriteGate, checkPropertyWriteGate, COMPILED_TRUTH_MAX_CHARS, } from "../lib/graph-write-gate.js";
|
|
4
|
+
import { checkGraphWriteGate, checkLabelWriteGate, checkPropertyWriteGate, COMPILED_TRUTH_MAX_CHARS, } from "../lib/graph-write-gate.js";
|
|
5
5
|
import { checkLabelOriginGate } from "../lib/label-origin-gate.js";
|
|
6
6
|
import { withWriteEvent, pickName } from "../lib/log-ingest.js";
|
|
7
7
|
import { rewriteCompiledTruth, } from "../lib/compiled-truth-rewriter.js";
|
|
8
|
+
import { REVISION_CYPHER_FRAGMENT } from "../lib/compiled-truth-revision.js";
|
|
8
9
|
/** Stripped silently — operator can't update these via the agent. */
|
|
9
10
|
const RESTRICTED_KEYS = new Set(["embedding", "accountId", "createdAt", "createdOn"]);
|
|
10
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Loud-fail keys — write attempts throw rather than silently strip (Task 306,
|
|
13
|
+
* extended Task 392). The public-twin timestamp + source are system-managed:
|
|
14
|
+
* they are stamped by the rewriter or by the operator-override path. Note
|
|
15
|
+
* that `compiledTruthPublic` itself is NOT in this set because the operator
|
|
16
|
+
* override path accepts it as a top-level `compiledTruthPublic` argument
|
|
17
|
+
* (not via the property bag). Property-bag writes to `compiledTruthPublic`
|
|
18
|
+
* are still blocked by being in this set — operators must use the top-level
|
|
19
|
+
* argument so the override semantics are explicit.
|
|
20
|
+
*/
|
|
11
21
|
const SYSTEM_MANAGED_KEYS = new Set([
|
|
12
22
|
"compiledTruth",
|
|
13
23
|
"compiledTruthUpdatedAt",
|
|
14
24
|
"compiledTruthSource",
|
|
25
|
+
"compiledTruthPublic",
|
|
26
|
+
"compiledTruthPublicUpdatedAt",
|
|
27
|
+
"compiledTruthPublicSource",
|
|
15
28
|
]);
|
|
16
29
|
const OPERATOR_COOLDOWN_MS = 7 * 24 * 60 * 60 * 1000;
|
|
17
30
|
const REWRITER_EVENT_LIMIT = 10;
|
|
18
|
-
|
|
31
|
+
/** Five labels that carry `compiledTruth` (Task 306 + 392 extension). */
|
|
32
|
+
const TIMELINE_SUBJECT_LABELS = new Set([
|
|
33
|
+
"Person",
|
|
34
|
+
"Organization",
|
|
35
|
+
"Concept",
|
|
36
|
+
"Project",
|
|
37
|
+
"LocalBusiness",
|
|
38
|
+
]);
|
|
39
|
+
/** Four labels that carry `compiledTruthPublic` (Task 392). :Person excluded by design. */
|
|
40
|
+
const PUBLIC_TWIN_LABELS = new Set([
|
|
41
|
+
"Organization",
|
|
42
|
+
"Concept",
|
|
43
|
+
"Project",
|
|
44
|
+
"LocalBusiness",
|
|
45
|
+
]);
|
|
46
|
+
function pickPublicTwinLabel(labels) {
|
|
47
|
+
for (const l of labels) {
|
|
48
|
+
if (PUBLIC_TWIN_LABELS.has(l))
|
|
49
|
+
return l;
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
19
53
|
export async function memoryUpdate(params) {
|
|
20
54
|
const nameHint = pickName(params.properties);
|
|
21
55
|
return withWriteEvent({ tool: "memory-update", accountId: params.accountId, name: nameHint }, () => memoryUpdateImpl(params), (r) => ({ elementId: r.nodeId, labels: r.labels, name: nameHint }));
|
|
22
56
|
}
|
|
23
57
|
async function memoryUpdateImpl(params) {
|
|
24
|
-
const { nodeId, properties, accountId, createdBy, rewriteCompiledTruth: doRewrite, forceRewrite } = params;
|
|
25
|
-
// Loud-fail on system-managed keys (Task 306). Silent
|
|
26
|
-
// failure class — the caller thinks the update landed,
|
|
27
|
-
// of writer identity,
|
|
58
|
+
const { nodeId, properties, accountId, createdBy, rewriteCompiledTruth: doRewrite, forceRewrite, compiledTruthPublic: operatorPublicOverride, } = params;
|
|
59
|
+
// Loud-fail on system-managed keys (Task 306, extended Task 392). Silent
|
|
60
|
+
// strip is a known failure class — the caller thinks the update landed,
|
|
61
|
+
// agents lose track of writer identity, compiled-truth integrity breaks.
|
|
62
|
+
// The public-twin fields are included so a property-bag write to
|
|
63
|
+
// `compiledTruthPublic` is rejected; the explicit `compiledTruthPublic`
|
|
64
|
+
// top-level argument is the only operator-override path.
|
|
28
65
|
for (const key of Object.keys(properties)) {
|
|
29
66
|
if (SYSTEM_MANAGED_KEYS.has(key)) {
|
|
30
|
-
throw new Error(`Update blocked (system-managed-key): '${key}' cannot be set
|
|
31
|
-
`Use
|
|
67
|
+
throw new Error(`Update blocked (system-managed-key): '${key}' cannot be set via the properties bag. ` +
|
|
68
|
+
`Use rewriteCompiledTruth:true to recompute, or the top-level compiledTruthPublic argument for an operator override.`);
|
|
32
69
|
}
|
|
33
70
|
}
|
|
34
|
-
|
|
35
|
-
|
|
71
|
+
const wantsAnyWrite = Object.keys(properties).length > 0 ||
|
|
72
|
+
doRewrite ||
|
|
73
|
+
typeof operatorPublicOverride === "string";
|
|
74
|
+
if (!wantsAnyWrite) {
|
|
75
|
+
throw new Error("No properties to update — provide at least one property, rewriteCompiledTruth:true, or compiledTruthPublic.");
|
|
36
76
|
}
|
|
37
77
|
// Property-level cap. compiledTruth direct-write is blocked above; this
|
|
38
78
|
// covers the case where a future property carries the same cap doctrine.
|
|
@@ -46,19 +86,26 @@ async function memoryUpdateImpl(params) {
|
|
|
46
86
|
if (!RESTRICTED_KEYS.has(key))
|
|
47
87
|
safeProps[key] = value;
|
|
48
88
|
}
|
|
49
|
-
if (Object.keys(safeProps).length === 0 &&
|
|
89
|
+
if (Object.keys(safeProps).length === 0 &&
|
|
90
|
+
!doRewrite &&
|
|
91
|
+
typeof operatorPublicOverride !== "string") {
|
|
50
92
|
throw new Error("All provided properties are restricted and cannot be updated.");
|
|
51
93
|
}
|
|
52
94
|
const session = getSession();
|
|
53
95
|
try {
|
|
54
96
|
// fetch the target node's labels + compiled-truth state up front. Labels
|
|
55
97
|
// don't mutate on existing nodes; the compiled-truth state is read so the
|
|
56
|
-
// rewriter (if invoked) can enforce the operator cooldown.
|
|
98
|
+
// rewriter (if invoked) can enforce the operator cooldown. Public-twin
|
|
99
|
+
// fields are read so the public-pass cooldown and operator-override
|
|
100
|
+
// refusal paths can check the right state without a second round trip.
|
|
57
101
|
const labelResult = await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId
|
|
58
102
|
RETURN labels(n) AS nodeLabels,
|
|
59
103
|
n.compiledTruth AS compiledTruth,
|
|
60
104
|
n.compiledTruthSource AS compiledTruthSource,
|
|
61
105
|
n.compiledTruthUpdatedAt AS compiledTruthUpdatedAt,
|
|
106
|
+
n.compiledTruthPublic AS compiledTruthPublic,
|
|
107
|
+
n.compiledTruthPublicSource AS compiledTruthPublicSource,
|
|
108
|
+
n.compiledTruthPublicUpdatedAt AS compiledTruthPublicUpdatedAt,
|
|
62
109
|
n.name AS name`, { nodeId, accountId });
|
|
63
110
|
if (labelResult.records.length === 0) {
|
|
64
111
|
throw new Error(`Node not found or not owned by this account (ID: ${nodeId}).`);
|
|
@@ -71,11 +118,20 @@ async function memoryUpdateImpl(params) {
|
|
|
71
118
|
if (!origin.ok) {
|
|
72
119
|
throw new Error(`Update blocked (${origin.reason}): ${origin.message}`);
|
|
73
120
|
}
|
|
121
|
+
// Task 391: refuse updates against read-only audit labels
|
|
122
|
+
// (e.g. :CompiledTruthRevision). The rewriter + dream-cycle are the
|
|
123
|
+
// only sanctioned mutators.
|
|
124
|
+
const labelGate = checkLabelWriteGate({ labels: targetLabels });
|
|
125
|
+
if (!labelGate.ok) {
|
|
126
|
+
throw new Error(`Update blocked (${labelGate.reason}): ${labelGate.message}`);
|
|
127
|
+
}
|
|
74
128
|
const gate = await checkGraphWriteGate({ session, accountId, labels: targetLabels });
|
|
75
129
|
if (!gate.ok) {
|
|
76
130
|
throw new Error(`Update blocked (${gate.reason}): ${gate.message}`);
|
|
77
131
|
}
|
|
78
132
|
let rewriterOutcome;
|
|
133
|
+
let publicRewriterOutcome;
|
|
134
|
+
let publicOverrideOutcome;
|
|
79
135
|
// ----- Property update branch -----
|
|
80
136
|
let updatedNodeId = nodeId;
|
|
81
137
|
let nodeLabels = targetLabels;
|
|
@@ -119,11 +175,11 @@ async function memoryUpdateImpl(params) {
|
|
|
119
175
|
const probe = await session.run(`MATCH (n) WHERE elementId(n) = $nodeId RETURN properties(n) AS allProps`, { nodeId });
|
|
120
176
|
allProps = probe.records[0].get("allProps");
|
|
121
177
|
}
|
|
122
|
-
// ----- Rewriter branch (Task 306) -----
|
|
178
|
+
// ----- Rewriter branch (Task 306, twin-pass extended Task 392) -----
|
|
123
179
|
if (doRewrite) {
|
|
124
180
|
const isSubject = targetLabels.some((l) => TIMELINE_SUBJECT_LABELS.has(l));
|
|
125
181
|
if (!isSubject) {
|
|
126
|
-
throw new Error(`rewriteCompiledTruth is only valid on :Person / :Organization / :Concept. ` +
|
|
182
|
+
throw new Error(`rewriteCompiledTruth is only valid on :Person / :Organization / :Concept / :Project / :LocalBusiness. ` +
|
|
127
183
|
`Got labels: [${targetLabels.join(", ")}]`);
|
|
128
184
|
}
|
|
129
185
|
// Operator cooldown: if compiledTruthSource = 'operator' and the last
|
|
@@ -187,15 +243,92 @@ async function memoryUpdateImpl(params) {
|
|
|
187
243
|
// defend the gate anyway.
|
|
188
244
|
throw new Error(`Rewriter output failed graph-write-gate: ${writeCheck.message}`);
|
|
189
245
|
}
|
|
246
|
+
// Task 391: write the live `compiledTruth` SET and the audit
|
|
247
|
+
// `:CompiledTruthRevision` row in one statement so revision
|
|
248
|
+
// history can never desync from the live property. If either
|
|
249
|
+
// fails, neither lands.
|
|
190
250
|
await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId
|
|
191
251
|
SET n.compiledTruth = $truth,
|
|
192
252
|
n.compiledTruthUpdatedAt = datetime(),
|
|
193
|
-
n.compiledTruthSource = 'rewriter'
|
|
253
|
+
n.compiledTruthSource = 'rewriter'
|
|
254
|
+
${REVISION_CYPHER_FRAGMENT}`, {
|
|
255
|
+
nodeId,
|
|
256
|
+
accountId,
|
|
257
|
+
truth: rewrite.compiledTruth,
|
|
258
|
+
source: "rewriter",
|
|
259
|
+
});
|
|
194
260
|
rewriterOutcome = {
|
|
195
261
|
kind: "ok",
|
|
196
262
|
charsBefore: currentTruth.length,
|
|
197
263
|
charsAfter: rewrite.compiledTruth.length,
|
|
198
264
|
};
|
|
265
|
+
// ----- Public-twin pass (Task 392) -----
|
|
266
|
+
// Auto-fire when (a) the label is in the public-twin set,
|
|
267
|
+
// (b) the admin rewrite actually changed the truth string (string-
|
|
268
|
+
// identical no-op skips the public pass to avoid spending an LLM
|
|
269
|
+
// call producing the same public summary), (c) the public-cooldown
|
|
270
|
+
// for an operator-authored override has not been violated.
|
|
271
|
+
const publicLabel = pickPublicTwinLabel(targetLabels);
|
|
272
|
+
const adminChanged = rewrite.compiledTruth !== currentTruth;
|
|
273
|
+
if (publicLabel && adminChanged) {
|
|
274
|
+
const publicSource = labelRecord.get("compiledTruthPublicSource");
|
|
275
|
+
const publicUpdated = labelRecord.get("compiledTruthPublicUpdatedAt");
|
|
276
|
+
let inCooldown = false;
|
|
277
|
+
let publicCooldownDaysRemaining = 0;
|
|
278
|
+
if (publicSource === "operator" && publicUpdated && !forceRewrite) {
|
|
279
|
+
const ms = new Date(String(publicUpdated)).getTime();
|
|
280
|
+
const elapsed = Date.now() - ms;
|
|
281
|
+
if (!Number.isNaN(ms) && elapsed < OPERATOR_COOLDOWN_MS) {
|
|
282
|
+
inCooldown = true;
|
|
283
|
+
publicCooldownDaysRemaining = Math.ceil((OPERATOR_COOLDOWN_MS - elapsed) / (24 * 60 * 60 * 1000));
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
if (inCooldown) {
|
|
287
|
+
console.log(`[compiled-truth-rewriter] public-pass refused nodeId=${nodeId.slice(0, 12)} ` +
|
|
288
|
+
`reason=operator-edit-cooldown daysRemaining=${publicCooldownDaysRemaining}`);
|
|
289
|
+
publicRewriterOutcome = {
|
|
290
|
+
kind: "refused",
|
|
291
|
+
reason: "operator-edit-cooldown",
|
|
292
|
+
daysRemaining: publicCooldownDaysRemaining,
|
|
293
|
+
};
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
const currentPublic = labelRecord.get("compiledTruthPublic") ?? "";
|
|
297
|
+
const publicRewrite = await rewriteCompiledTruth({
|
|
298
|
+
mode: "public",
|
|
299
|
+
subjectLabel: publicLabel,
|
|
300
|
+
subjectName,
|
|
301
|
+
currentTruth: currentPublic,
|
|
302
|
+
events,
|
|
303
|
+
});
|
|
304
|
+
if (publicRewrite.kind === "ok") {
|
|
305
|
+
const publicWriteCheck = checkPropertyWriteGate({
|
|
306
|
+
properties: { compiledTruthPublic: publicRewrite.compiledTruth },
|
|
307
|
+
});
|
|
308
|
+
if (!publicWriteCheck.ok) {
|
|
309
|
+
throw new Error(`Public rewriter output failed graph-write-gate: ${publicWriteCheck.message}`);
|
|
310
|
+
}
|
|
311
|
+
await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId
|
|
312
|
+
SET n.compiledTruthPublic = $truth,
|
|
313
|
+
n.compiledTruthPublicUpdatedAt = datetime(),
|
|
314
|
+
n.compiledTruthPublicSource = 'rewriter'`, { nodeId, accountId, truth: publicRewrite.compiledTruth });
|
|
315
|
+
publicRewriterOutcome = {
|
|
316
|
+
kind: "ok",
|
|
317
|
+
charsBefore: currentPublic.length,
|
|
318
|
+
charsAfter: publicRewrite.compiledTruth.length,
|
|
319
|
+
};
|
|
320
|
+
}
|
|
321
|
+
else if (publicRewrite.kind === "refused") {
|
|
322
|
+
publicRewriterOutcome = { kind: "refused", reason: "no-events" };
|
|
323
|
+
}
|
|
324
|
+
else if (publicRewrite.kind === "too-long") {
|
|
325
|
+
publicRewriterOutcome = { kind: "too-long", attemptedLen: publicRewrite.attemptedLen };
|
|
326
|
+
}
|
|
327
|
+
else {
|
|
328
|
+
publicRewriterOutcome = { kind: "llm-failure", cause: publicRewrite.fallback.cause };
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
}
|
|
199
332
|
}
|
|
200
333
|
else if (rewrite.kind === "refused") {
|
|
201
334
|
rewriterOutcome = { kind: "refused", reason: "no-events" };
|
|
@@ -207,11 +340,46 @@ async function memoryUpdateImpl(params) {
|
|
|
207
340
|
rewriterOutcome = { kind: "llm-failure", cause: rewrite.fallback.cause };
|
|
208
341
|
}
|
|
209
342
|
}
|
|
343
|
+
// ----- Operator direct-write of compiledTruthPublic (Task 392) -----
|
|
344
|
+
// Independent of the rewriter branch. Validates the label is in the
|
|
345
|
+
// public-twin set, runs the length cap, stamps source='operator' and
|
|
346
|
+
// resets the public-cooldown timer. Always writes (no cooldown on the
|
|
347
|
+
// operator-edit side itself; cooldown only blocks the auto-rewriter
|
|
348
|
+
// from overwriting operator edits later).
|
|
349
|
+
if (typeof operatorPublicOverride === "string") {
|
|
350
|
+
const publicLabel = pickPublicTwinLabel(targetLabels);
|
|
351
|
+
if (!publicLabel) {
|
|
352
|
+
publicOverrideOutcome = { kind: "refused", reason: "wrong-label" };
|
|
353
|
+
console.log(`[memory-update] public-override refused nodeId=${nodeId.slice(0, 12)} ` +
|
|
354
|
+
`reason=wrong-label labels=[${targetLabels.join(",")}]`);
|
|
355
|
+
}
|
|
356
|
+
else {
|
|
357
|
+
const overrideCheck = checkPropertyWriteGate({
|
|
358
|
+
properties: { compiledTruthPublic: operatorPublicOverride },
|
|
359
|
+
});
|
|
360
|
+
if (!overrideCheck.ok) {
|
|
361
|
+
publicOverrideOutcome = { kind: "refused", reason: "too-long" };
|
|
362
|
+
console.log(`[memory-update] public-override refused nodeId=${nodeId.slice(0, 12)} ` +
|
|
363
|
+
`reason=too-long len=${operatorPublicOverride.length}`);
|
|
364
|
+
}
|
|
365
|
+
else {
|
|
366
|
+
await session.run(`MATCH (n) WHERE elementId(n) = $nodeId AND n.accountId = $accountId
|
|
367
|
+
SET n.compiledTruthPublic = $truth,
|
|
368
|
+
n.compiledTruthPublicUpdatedAt = datetime(),
|
|
369
|
+
n.compiledTruthPublicSource = 'operator'`, { nodeId, accountId, truth: operatorPublicOverride });
|
|
370
|
+
publicOverrideOutcome = { kind: "applied", chars: operatorPublicOverride.length };
|
|
371
|
+
console.log(`[memory-update] public-override applied nodeId=${nodeId.slice(0, 12)} ` +
|
|
372
|
+
`label=${publicLabel} chars=${operatorPublicOverride.length}`);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
}
|
|
210
376
|
return {
|
|
211
377
|
nodeId: updatedNodeId,
|
|
212
378
|
labels: nodeLabels,
|
|
213
379
|
updated: Object.keys(safeProps).length > 0,
|
|
214
380
|
rewriter: rewriterOutcome,
|
|
381
|
+
publicRewriter: publicRewriterOutcome,
|
|
382
|
+
publicOverride: publicOverrideOutcome,
|
|
215
383
|
};
|
|
216
384
|
}
|
|
217
385
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"memory-update.js","sourceRoot":"","sources":["../../src/tools/memory-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-write.d.ts","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAEA,OAAO,EAAiB,KAAK,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAW9E,OAAO,EAGL,KAAK,iBAAiB,EACtB,KAAK,SAAS,EACf,MAAM,8CAA8C,CAAC;AAEtD,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6HAA6H;IAC7H,KAAK,EAAE,MAAM,CAAC;IACd;;;;OAIG;IACH,aAAa,EAAE,iBAAiB,EAAE,CAAC;IACnC,+EAA+E;IAC/E,SAAS,EAAE,SAAS,CAAC;IACrB;;;;;;OAMG;IACH,SAAS,EAAE,YAAY,CAAC;IACxB;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,UAAU,WAAW;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAoBD,wBAAsB,WAAW,CAAC,MAAM,EAAE,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC,CAS3E;AAwTD,wFAAwF;AACxF,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,MAAM,GACd;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAKhD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,MAAM,EAAE,EAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAClC,MAAM,CAUR"}
|
|
@@ -2,14 +2,27 @@ import { getSession } from "../lib/neo4j.js";
|
|
|
2
2
|
import { embed } from "../lib/embeddings.js";
|
|
3
3
|
import { validateWrite } from "../lib/schema-validator.js";
|
|
4
4
|
import { resolveActiveVertical } from "../lib/resolve-active-vertical.js";
|
|
5
|
-
import { checkGraphWriteGate, checkPropertyWriteGate } from "../lib/graph-write-gate.js";
|
|
5
|
+
import { checkGraphWriteGate, checkLabelWriteGate, checkPropertyWriteGate, } from "../lib/graph-write-gate.js";
|
|
6
6
|
import { extractDatedStatements } from "../lib/timeline-extractor.js";
|
|
7
7
|
import { randomUUID } from "node:crypto";
|
|
8
8
|
import { checkLabelOriginGate } from "../lib/label-origin-gate.js";
|
|
9
9
|
import { withWriteEvent, pickName } from "../lib/log-ingest.js";
|
|
10
10
|
import { writeNodeWithEdges, injectConversationProvenance, } from "../../../../../lib/graph-write/dist/index.js";
|
|
11
|
-
/**
|
|
12
|
-
const TIMELINE_SUBJECT_LABELS = [
|
|
11
|
+
/** Admin-twin labels carrying `compiledTruth` (Task 306 + 392 extension to :Project, :LocalBusiness). */
|
|
12
|
+
const TIMELINE_SUBJECT_LABELS = [
|
|
13
|
+
"Person",
|
|
14
|
+
"Organization",
|
|
15
|
+
"Concept",
|
|
16
|
+
"Project",
|
|
17
|
+
"LocalBusiness",
|
|
18
|
+
];
|
|
19
|
+
/** Public-twin labels carrying `compiledTruthPublic` (Task 392). :Person excluded by design. */
|
|
20
|
+
const PUBLIC_TWIN_LABELS = [
|
|
21
|
+
"Organization",
|
|
22
|
+
"Concept",
|
|
23
|
+
"Project",
|
|
24
|
+
"LocalBusiness",
|
|
25
|
+
];
|
|
13
26
|
/** Default `compiledTruthUpdatedAt` on first write — epoch makes stale-detection trivial. */
|
|
14
27
|
const COMPILED_TRUTH_EPOCH = "1970-01-01T00:00:00Z";
|
|
15
28
|
export async function memoryWrite(params) {
|
|
@@ -70,6 +83,13 @@ async function memoryWriteImpl(params) {
|
|
|
70
83
|
if (!propGate.ok) {
|
|
71
84
|
throw new Error(`Write blocked (${propGate.reason}): ${propGate.message}`);
|
|
72
85
|
}
|
|
86
|
+
// Label-level gate (Task 391). Refuse direct writes to read-only
|
|
87
|
+
// audit labels (e.g. :CompiledTruthRevision) — these are owned by
|
|
88
|
+
// the rewriter + dream-cycle, never the agent.
|
|
89
|
+
const labelGate = checkLabelWriteGate({ labels });
|
|
90
|
+
if (!labelGate.ok) {
|
|
91
|
+
throw new Error(`Write blocked (${labelGate.reason}): ${labelGate.message}`);
|
|
92
|
+
}
|
|
73
93
|
const textForEmbedding = buildTextRepresentation(labels, properties);
|
|
74
94
|
const embedding = await embed(textForEmbedding);
|
|
75
95
|
const nodeProps = {
|
|
@@ -82,12 +102,17 @@ async function memoryWriteImpl(params) {
|
|
|
82
102
|
if (!properties.createdOn && !properties.createdAt) {
|
|
83
103
|
nodeProps.createdAt = new Date().toISOString();
|
|
84
104
|
}
|
|
85
|
-
// Task 306: stamp compiled-truth defaults on the
|
|
86
|
-
// that carry the compiled-truth + timeline doctrine. New nodes
|
|
87
|
-
// an empty compiledTruth and an epoch updatedAt so
|
|
88
|
-
// queries treat them as eligible for the next rewriter
|
|
89
|
-
// `compiledTruthSource = "rewriter"` is the default writer; the
|
|
90
|
-
// override
|
|
105
|
+
// Task 306 + 392: stamp compiled-truth defaults on the five admin-twin
|
|
106
|
+
// labels that carry the compiled-truth + timeline doctrine. New nodes
|
|
107
|
+
// start with an empty compiledTruth and an epoch updatedAt so
|
|
108
|
+
// stale-detection queries treat them as eligible for the next rewriter
|
|
109
|
+
// pass. `compiledTruthSource = "rewriter"` is the default writer; the
|
|
110
|
+
// operator override flips it to "operator".
|
|
111
|
+
//
|
|
112
|
+
// Task 392: also stamp public-twin defaults on the four public-twin
|
|
113
|
+
// labels. :Person is in the admin set but NOT the public set — the
|
|
114
|
+
// public twin remains undefined on Person nodes so the graph projection
|
|
115
|
+
// can detect "this label never carries a public summary" structurally.
|
|
91
116
|
const isCompiledTruthSubject = TIMELINE_SUBJECT_LABELS.some((l) => labels.includes(l));
|
|
92
117
|
if (isCompiledTruthSubject) {
|
|
93
118
|
if (nodeProps.compiledTruth === undefined)
|
|
@@ -97,6 +122,15 @@ async function memoryWriteImpl(params) {
|
|
|
97
122
|
if (nodeProps.compiledTruthSource === undefined)
|
|
98
123
|
nodeProps.compiledTruthSource = "rewriter";
|
|
99
124
|
}
|
|
125
|
+
const isPublicTwinSubject = PUBLIC_TWIN_LABELS.some((l) => labels.includes(l));
|
|
126
|
+
if (isPublicTwinSubject) {
|
|
127
|
+
if (nodeProps.compiledTruthPublic === undefined)
|
|
128
|
+
nodeProps.compiledTruthPublic = "";
|
|
129
|
+
if (nodeProps.compiledTruthPublicUpdatedAt === undefined)
|
|
130
|
+
nodeProps.compiledTruthPublicUpdatedAt = COMPILED_TRUTH_EPOCH;
|
|
131
|
+
if (nodeProps.compiledTruthPublicSource === undefined)
|
|
132
|
+
nodeProps.compiledTruthPublicSource = "rewriter";
|
|
133
|
+
}
|
|
100
134
|
// compose the inbound `:PRODUCED` edge from the active
|
|
101
135
|
// Task before delegating to the gate. We resolve the Task here (not
|
|
102
136
|
// in the gate) so we can verify accountId parity and emit a clear
|
|
@@ -153,7 +187,16 @@ async function memoryWriteImpl(params) {
|
|
|
153
187
|
// right degradation mode; a rewriter call on demand still works.
|
|
154
188
|
if (isCompiledTruthSubject && typeof properties.body === "string" && accountId) {
|
|
155
189
|
try {
|
|
156
|
-
|
|
190
|
+
// Task 390: reference timestamp anchors relative date forms
|
|
191
|
+
// ("yesterday", "two weeks ago", "Q3 last year"). Use the
|
|
192
|
+
// operator-supplied createdAt when present; otherwise the
|
|
193
|
+
// createdAt we just stamped on nodeProps; otherwise now.
|
|
194
|
+
const refRaw = (typeof properties.createdAt === "string" && properties.createdAt) ||
|
|
195
|
+
(typeof properties.createdOn === "string" && properties.createdOn) ||
|
|
196
|
+
(typeof nodeProps.createdAt === "string" && nodeProps.createdAt) ||
|
|
197
|
+
undefined;
|
|
198
|
+
const reference = refRaw ? new Date(refRaw) : new Date();
|
|
199
|
+
const statements = extractDatedStatements(properties.body, Number.isNaN(reference.getTime()) ? new Date() : reference);
|
|
157
200
|
if (statements.length > 0) {
|
|
158
201
|
for (const s of statements) {
|
|
159
202
|
await session.run(`MATCH (e) WHERE elementId(e) = $entityId AND e.accountId = $accountId
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,qBAAqB,EAAE,MAAM,mCAAmC,CAAC;AAC1E,OAAO,
|
|
1
|
+
{"version":3,"file":"memory-write.js","sourceRoot":"","sources":["../../src/tools/memory-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -27,6 +27,12 @@ export default defineConfig({
|
|
|
27
27
|
// Task 306 — compiled-truth + timeline.
|
|
28
28
|
"src/lib/__tests__/timeline-extractor.test.ts",
|
|
29
29
|
"src/lib/__tests__/graph-write-gate-property.test.ts",
|
|
30
|
+
// Task 391 — compiled-truth revision history.
|
|
31
|
+
"src/lib/__tests__/graph-write-gate-label.test.ts",
|
|
32
|
+
"src/lib/__tests__/compiled-truth-revision.test.ts",
|
|
33
|
+
"src/lib/__tests__/phase-prune-revisions.test.ts",
|
|
34
|
+
// Task 390 — relative-date parser shared by extractor + datetime skill.
|
|
35
|
+
"src/lib/__tests__/relative-date.test.ts",
|
|
30
36
|
],
|
|
31
37
|
testTimeout: 10_000,
|
|
32
38
|
},
|
|
@@ -87,6 +87,10 @@ The compiled truth is system-managed: direct writes to any of the three properti
|
|
|
87
87
|
- `memory-update(nodeId, {}, rewriteCompiledTruth: true, forceRewrite: true)` — same, but bypasses the 7-day operator cooldown.
|
|
88
88
|
- The graph UI's per-property edit surface — stamps `compiledTruthSource: 'operator'` so the rewriter honours the cooldown.
|
|
89
89
|
|
|
90
|
+
### Revision history (Task 391)
|
|
91
|
+
|
|
92
|
+
Every rewriter write captures a `:CompiledTruthRevision` row in the same transaction as the `compiledTruth` SET, linked by `(:Person|:Organization|:Concept)-[:HAS_REVISION]->(:CompiledTruthRevision)`. Revisions are read-only after write — the dream-cycle phase 5 prune (keep newest 20 per entity) is the only mutation path. Read the chain via `memory-compiled-truth-history(nodeId)`. The `source` enum on each revision is `'rewriter' | 'operator'`, mirroring `compiledTruthSource`.
|
|
93
|
+
|
|
90
94
|
### Timeline events
|
|
91
95
|
|
|
92
96
|
`:TimelineEvent` is distinct from the scheduling plugin's `:Event` (which holds `eventId`-unique calendar/reminder rows). Naming chosen to avoid collision.
|
|
@@ -7,7 +7,7 @@ description: Source-agnostic ingest for conversation transcripts. One skill for
|
|
|
7
7
|
|
|
8
8
|
**Invoked from `specialists:librarian`** — the admin agent dispatches the librarian when the operator drops a conversation transcript; the librarian loads this skill.
|
|
9
9
|
|
|
10
|
-
**Default parent.** Every `:KnowledgeDocument` is anchored to the operator-confirmed owner (`:AdminUser` for the account owner, `:Person` for a third-party archive). The owner's elementId is
|
|
10
|
+
**Default parent.** Every `:KnowledgeDocument` is anchored to the operator-confirmed owner (`:AdminUser` for the account owner, `:Person` for a third-party archive). The owner's elementId is derived inside the bash entry from `(ACCOUNT_ID, USER_ID)` env (see Identity below) and becomes the containment parent for the archive node. Per-session `:Section` chunks attach to the archive via `:PART_OF`. Participant cross-edges from the archive to each distinct sender (`:Person` / `:AdminUser`) are added alongside the containment edge — they describe the conversation, they do not substitute for the parent.
|
|
11
11
|
|
|
12
12
|
One skill, one bash entry, one writer. The pipeline is identical for every conversation source. The only source-specific code is the per-source normaliser (a pluggable function under [`platform/plugins/memory/mcp/src/lib/conversation-normalisers/`](../../mcp/src/lib/conversation-normalisers/)). New sources = a new normaliser file + an enum entry, never a new skill.
|
|
13
13
|
|
|
@@ -41,7 +41,7 @@ The flow:
|
|
|
41
41
|
|
|
42
42
|
5. **Identify the owner** from the resolved set — the operator who exported the chat. Echo back: `"Owner = :AdminUser <name> (<elementId>); other participants = <list>. Confirm yes/no."`
|
|
43
43
|
|
|
44
|
-
6. **Persist the resolved IDs** as `--
|
|
44
|
+
6. **Persist the resolved IDs** as `--participant-person-ids <csv>` for the script call. The owner's elementId is not passed as a flag — the script derives it from `(ACCOUNT_ID, USER_ID)` env.
|
|
45
45
|
|
|
46
46
|
DM and group follow the identical flow. A 1:1 chat resolves 2 senders; a group resolves N senders. Identity (`conversationIdentity = sha256(accountId + ":" + sortedParticipantElementIds.join(","))`) is identical regardless of group size — DM and group use the same MERGE key. Source format (whatsapp / telegram / slack) does not affect identity.
|
|
47
47
|
|
|
@@ -125,7 +125,7 @@ Forbidden: blind-reissue without reading the progress file first.
|
|
|
125
125
|
|
|
126
126
|
### What the script does
|
|
127
127
|
- Picks the normaliser for `--source`. WhatsApp: locates `_chat.txt` (zip / dir / direct file), parses deterministically, computes `archiveSha256`. Other sources interpret the path according to their own format.
|
|
128
|
-
-
|
|
128
|
+
- Verifies the operator-supplied participant elementIds exist in the graph under this `accountId` with the right label (`:AdminUser` / `:Person`). The script does NOT bind parsed senderNames back to those elementIds — any line authored by a sender outside the confirmed set lands under the archive's `:Section` chunks unchecked, and `:PARTICIPANT_IN` reflects only the confirmed owner + participants. Closing that gap is its own task ([Task 396](../../../../../.tasks/396-conversation-archive-sendername-binding.md)).
|
|
129
129
|
- Computes `conversationIdentity` from accountId + sorted participant elementIds.
|
|
130
130
|
- **Without `--rebuild`** (default): looks up any prior `:KnowledgeDocument` carrying that identity → reads `lastIngestedMessageHash`. If found, slices parsed lines after the cursor (delta-append). Cursor not found → `FAIL delta-cursor-missing`. Cursor at last line → empty-delta noop (exit 0, no writes; existing chunk count surfaced in JSON summary). **With `--rebuild`**: skips the prior-cursor lookup entirely; every line is treated as first-ingest delta; the first session's `memory-ingest` deletes prior chunks for THIS `archiveSha256` and the new cursor overwrites the stale one in the same MERGE.
|
|
131
131
|
- Sessionizes the delta lines at the fixed 8h gap (code constant, no flag).
|
|
@@ -173,7 +173,6 @@ For an empty-delta re-import (`delta.kind === "empty-delta"`): emit only message
|
|
|
173
173
|
## Failure path — single FAIL line
|
|
174
174
|
|
|
175
175
|
- **Exit non-zero** + one stderr line: `[conversation-archive] FAIL phase=<argv|parse|classify|delta-cursor-missing|memory-ingest|uncaught> reason="..."`. Surface this verbatim to the operator and yield. **Do not retry.**
|
|
176
|
-
- `parser-miss` LOUD-FAIL: an unconfirmed senderName slipped through. Either re-run with the missing :Person elementId added to `--participant-person-ids`, or report a parser bug.
|
|
177
176
|
- `delta-cursor-missing` LOUD-FAIL: the prior `lastIngestedMessageHash` is not present in the re-export. Either the operator deleted prior messages from the archive, or this is a different chat. Investigation required — never re-run blindly.
|
|
178
177
|
|
|
179
178
|
## Idempotency
|
|
@@ -5,7 +5,7 @@ description: "Composes a one-screen daily briefing covering outstanding commitme
|
|
|
5
5
|
|
|
6
6
|
# Briefing
|
|
7
7
|
|
|
8
|
-
This skill produces the owner's daily reading pack. It pulls four signals from the graph
|
|
8
|
+
This skill produces the owner's daily reading pack. It pulls four signals from the graph, composes them into a single screen of output, and persists the composed briefing as a `:Report` node so the owner can later ask "what was this morning's briefing" and get the exact text back. It does not draft replies, schedule events, or mark tasks complete; the only write is the report-persistence step.
|
|
9
9
|
|
|
10
10
|
## When to run
|
|
11
11
|
|
|
@@ -57,6 +57,17 @@ Two sub-pieces:
|
|
|
57
57
|
**Overnight.** 4 inbound messages awaiting reply (top: Cohen: viewing follow-up; Singh: pricing question; Park: booking confirmation; Webber: referral thanks). 2 fresh items in the inbox since last session: Cohen, Webber.
|
|
58
58
|
```
|
|
59
59
|
|
|
60
|
+
## 5. Persist as a :Report
|
|
61
|
+
|
|
62
|
+
After composing the four sections, call `memory-report-write` once with the rendered briefing as the body:
|
|
63
|
+
|
|
64
|
+
- `title: "Daily briefing <YYYY-MM-DD>"` (use the owner's local date).
|
|
65
|
+
- `keywords: ["daily-briefing", "<YYYY-MM-DD>"]`.
|
|
66
|
+
- `sourceWorkflow: "daily-briefing"`.
|
|
67
|
+
- `body`: the full rendered briefing exactly as shown to the owner.
|
|
68
|
+
|
|
69
|
+
The tool is idempotent on `(title, occurredAt-within-same-minute)`, so two back-to-back invocations on the same date do not create duplicates. Do not summarise or trim the body before persisting — the owner asking for "today's briefing" later expects the same text they saw at delivery.
|
|
70
|
+
|
|
60
71
|
## One-screen cap
|
|
61
72
|
|
|
62
73
|
The whole briefing must fit in one screen. If any section would overflow, collapse it (event titles only, top-three not top-five, count plus example). Never spread the briefing across two screens; the operator's intent is a scannable pack, not a report.
|
|
@@ -71,5 +82,5 @@ The whole briefing must fit in one screen. If any section would overflow, collap
|
|
|
71
82
|
## What this skill does not do
|
|
72
83
|
|
|
73
84
|
- Draft replies to the inbound messages. The owner sees the count and the senders; if they want a draft, they ask and the right skill is loaded.
|
|
74
|
-
- Mark tasks complete or update priorities.
|
|
85
|
+
- Mark tasks complete or update priorities. The briefing only writes one node — the :Report that captures its own output (section 5).
|
|
75
86
|
- Speak in marketing voice or add encouragement. The owner reads the briefing for facts, not for cheerleading.
|
|
@@ -237,7 +237,7 @@ cat > "$ACCOUNT_SETTINGS" << SETTINGS_EOF
|
|
|
237
237
|
{
|
|
238
238
|
"hooks": [
|
|
239
239
|
{ "type": "command", "command": "bash $HOOKS_PATH/session-end-retrospective.sh" },
|
|
240
|
-
{ "type": "command", "command": "bash $HOOKS_PATH/
|
|
240
|
+
{ "type": "command", "command": "bash $HOOKS_PATH/post-turn-graph-pass.sh" }
|
|
241
241
|
]
|
|
242
242
|
}
|
|
243
243
|
]
|