@batalabs/virlow-mcp-core 3.83.0 → 3.84.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,102 @@
1
+ import { type DescribedEntity, type EntityKind } from './memory-graph.js';
2
+ /**
3
+ * The entity registry: what each entity in the memory graph is, said once.
4
+ *
5
+ * Which entities exist is still derived from the memories (their `about`
6
+ * and `relations`), so the memories stay the single source of truth for
7
+ * what is known. The registry only adds what a memory cannot say about a
8
+ * name: its kind (person, organization, event...), other names it goes by,
9
+ * and a short note. It lives in one encrypted note of type `entities` in
10
+ * the Memories root folder, so it is end-to-end encrypted like everything
11
+ * else and syncs like any note.
12
+ *
13
+ * Its body (the note's decrypted content) is JSON:
14
+ *
15
+ * {
16
+ * "v": 1,
17
+ * "entities": {
18
+ * "<entityKey(name)>": {
19
+ * "name": "Dana Whitfield", // optional display spelling
20
+ * "kind": "person", // optional, one of ENTITY_KINDS
21
+ * "aliases": ["Dana", "DW"], // optional other names
22
+ * "note": "Head of design at Acme", // optional, at most 500 chars
23
+ * "updated": "2026-10-07T12:00:00.000Z" // required, ISO 8601
24
+ * }
25
+ * }
26
+ * }
27
+ *
28
+ * Merge rule, for two copies of the registry (a 409 on save, or two
29
+ * registry notes created at once by two devices): per key, the entry with
30
+ * the later `updated` wins whole; on a tie, the one whose JSON sorts later.
31
+ * Keys present on one side only are kept. Clearing a kind keeps the entry
32
+ * with a newer `updated` and no `kind`, so the clear wins a merge.
33
+ *
34
+ * This module is pure (no network, no crypto) and shared by the connector
35
+ * and the web app; the iOS app follows the same format.
36
+ */
37
+ /** The note type the registry is stored as. */
38
+ export declare const ENTITY_REGISTRY_NOTE_TYPE = "entities";
39
+ /** The note's (encrypted) title. Nothing reads it; it is what a person
40
+ * would see if they ever found the note by other means. */
41
+ export declare const ENTITY_REGISTRY_TITLE = "Entities";
42
+ /** The format version this code writes. */
43
+ export declare const ENTITY_REGISTRY_VERSION = 1;
44
+ export declare const ENTITY_NOTE_MAX = 500;
45
+ export declare const ENTITY_ALIASES_MAX = 20;
46
+ export declare const ENTITY_NAME_MAX = 120;
47
+ export interface EntityEntry {
48
+ name?: string;
49
+ kind?: EntityKind;
50
+ aliases?: string[];
51
+ note?: string;
52
+ /** When this entry last changed, ISO 8601. Decides merges. */
53
+ updated: string;
54
+ }
55
+ export interface EntityRegistry {
56
+ v: number;
57
+ entities: Record<string, EntityEntry>;
58
+ }
59
+ export declare function emptyRegistry(): EntityRegistry;
60
+ /** True when a client of this version may write the registry back. A newer
61
+ * version may carry fields this one would drop, so it is read-only here. */
62
+ export declare function canWriteRegistry(registry: EntityRegistry): boolean;
63
+ /**
64
+ * The registry in a note body. Tolerant: an empty or unreadable body is an
65
+ * empty registry, a bad entry is skipped, keys are re-normalised (so a key
66
+ * written by hand as "Dana" still lands on "dana"). A body from a newer
67
+ * version is read as far as this version understands it, with its `v`
68
+ * kept so canWriteRegistry() refuses to overwrite it.
69
+ */
70
+ export declare function parseRegistry(body: string | null | undefined): EntityRegistry;
71
+ /** The note body: keys sorted, so an unchanged registry serialises to the
72
+ * same bytes and a no-op save can be skipped. */
73
+ export declare function serializeRegistry(registry: EntityRegistry): string;
74
+ /** Two copies of the registry as one, per key by `updated` (see the module
75
+ * comment). Commutative, so every device converges on the same result. */
76
+ export declare function mergeRegistries(a: EntityRegistry, b: EntityRegistry): EntityRegistry;
77
+ /** The key a name is filed under in the registry: an existing entry's own
78
+ * key, or the key of the entry that lists the name as an alias. */
79
+ export declare function registryKeyFor(registry: EntityRegistry, name: string): string;
80
+ export interface EntityPatch {
81
+ /** The entity, by any name it goes by. */
82
+ name: string;
83
+ /** A kind to set; null clears it. Omitted leaves it alone. */
84
+ kind?: EntityKind | null;
85
+ /** Names to add as aliases. */
86
+ aliases?: string[];
87
+ /** Names to stop treating as aliases. */
88
+ removeAliases?: string[];
89
+ /** A note to set; null or "" clears it. */
90
+ note?: string | null;
91
+ /** A display spelling to set. */
92
+ displayName?: string;
93
+ }
94
+ /**
95
+ * The registry with one entity described. Returns the same object when the
96
+ * patch changes nothing, so a caller can skip the save. `now` is the
97
+ * entry's new `updated`.
98
+ */
99
+ export declare function describeInRegistry(registry: EntityRegistry, patch: EntityPatch, now?: string): EntityRegistry;
100
+ /** What the graph reads: kind, aliases, note and display name by key. */
101
+ export declare function describedEntities(registry: EntityRegistry | null | undefined): Map<string, DescribedEntity>;
102
+ //# sourceMappingURL=entity-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-registry.d.ts","sourceRoot":"","sources":["../src/entity-registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,MAAM,mBAAmB,CAAC;AAE3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH,+CAA+C;AAC/C,eAAO,MAAM,yBAAyB,aAAa,CAAC;AAEpD;4DAC4D;AAC5D,eAAO,MAAM,qBAAqB,aAAa,CAAC;AAEhD,2CAA2C;AAC3C,eAAO,MAAM,uBAAuB,IAAI,CAAC;AAEzC,eAAO,MAAM,eAAe,MAAM,CAAC;AACnC,eAAO,MAAM,kBAAkB,KAAK,CAAC;AACrC,eAAO,MAAM,eAAe,MAAM,CAAC;AAEnC,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,UAAU,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,8DAA8D;IAC9D,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,CAAC,EAAE,MAAM,CAAC;IACV,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;CACvC;AAED,wBAAgB,aAAa,IAAI,cAAc,CAE9C;AAED;6EAC6E;AAC7E,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAElE;AAyCD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,cAAc,CAwB7E;AAED;kDACkD;AAClD,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,MAAM,CAclE;AASD;2EAC2E;AAC3E,wBAAgB,eAAe,CAAC,CAAC,EAAE,cAAc,EAAE,CAAC,EAAE,cAAc,GAAG,cAAc,CAOpF;AAED;oEACoE;AACpE,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAO7E;AAED,MAAM,WAAW,WAAW;IAC1B,0CAA0C;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,8DAA8D;IAC9D,IAAI,CAAC,EAAE,UAAU,GAAG,IAAI,CAAC;IACzB,+BAA+B;IAC/B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,yCAAyC;IACzC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,2CAA2C;IAC3C,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,iCAAiC;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,WAAW,EAClB,GAAG,GAAE,MAAiC,GACrC,cAAc,CAwChB;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,GAAG,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CAY3G"}
@@ -0,0 +1,260 @@
1
+ import { entityKey, normalizeKind, } from './memory-graph.js';
2
+ /**
3
+ * The entity registry: what each entity in the memory graph is, said once.
4
+ *
5
+ * Which entities exist is still derived from the memories (their `about`
6
+ * and `relations`), so the memories stay the single source of truth for
7
+ * what is known. The registry only adds what a memory cannot say about a
8
+ * name: its kind (person, organization, event...), other names it goes by,
9
+ * and a short note. It lives in one encrypted note of type `entities` in
10
+ * the Memories root folder, so it is end-to-end encrypted like everything
11
+ * else and syncs like any note.
12
+ *
13
+ * Its body (the note's decrypted content) is JSON:
14
+ *
15
+ * {
16
+ * "v": 1,
17
+ * "entities": {
18
+ * "<entityKey(name)>": {
19
+ * "name": "Dana Whitfield", // optional display spelling
20
+ * "kind": "person", // optional, one of ENTITY_KINDS
21
+ * "aliases": ["Dana", "DW"], // optional other names
22
+ * "note": "Head of design at Acme", // optional, at most 500 chars
23
+ * "updated": "2026-10-07T12:00:00.000Z" // required, ISO 8601
24
+ * }
25
+ * }
26
+ * }
27
+ *
28
+ * Merge rule, for two copies of the registry (a 409 on save, or two
29
+ * registry notes created at once by two devices): per key, the entry with
30
+ * the later `updated` wins whole; on a tie, the one whose JSON sorts later.
31
+ * Keys present on one side only are kept. Clearing a kind keeps the entry
32
+ * with a newer `updated` and no `kind`, so the clear wins a merge.
33
+ *
34
+ * This module is pure (no network, no crypto) and shared by the connector
35
+ * and the web app; the iOS app follows the same format.
36
+ */
37
+ /** The note type the registry is stored as. */
38
+ export const ENTITY_REGISTRY_NOTE_TYPE = 'entities';
39
+ /** The note's (encrypted) title. Nothing reads it; it is what a person
40
+ * would see if they ever found the note by other means. */
41
+ export const ENTITY_REGISTRY_TITLE = 'Entities';
42
+ /** The format version this code writes. */
43
+ export const ENTITY_REGISTRY_VERSION = 1;
44
+ export const ENTITY_NOTE_MAX = 500;
45
+ export const ENTITY_ALIASES_MAX = 20;
46
+ export const ENTITY_NAME_MAX = 120;
47
+ export function emptyRegistry() {
48
+ return { v: ENTITY_REGISTRY_VERSION, entities: {} };
49
+ }
50
+ /** True when a client of this version may write the registry back. A newer
51
+ * version may carry fields this one would drop, so it is read-only here. */
52
+ export function canWriteRegistry(registry) {
53
+ return registry.v <= ENTITY_REGISTRY_VERSION;
54
+ }
55
+ function text(value, max) {
56
+ if (typeof value !== 'string')
57
+ return undefined;
58
+ const t = value.trim();
59
+ return t ? t.slice(0, max) : undefined;
60
+ }
61
+ function cleanAliases(raw, ownKey) {
62
+ if (!Array.isArray(raw))
63
+ return undefined;
64
+ const byKey = new Map();
65
+ for (const a of raw) {
66
+ const name = text(a, ENTITY_NAME_MAX);
67
+ if (!name)
68
+ continue;
69
+ const k = entityKey(name);
70
+ if (!k || k === ownKey || byKey.has(k))
71
+ continue;
72
+ byKey.set(k, name);
73
+ }
74
+ const list = [...byKey.values()].slice(0, ENTITY_ALIASES_MAX);
75
+ return list.length ? list : undefined;
76
+ }
77
+ /** One entry, cleaned: unknown kinds dropped, `organisation` read as
78
+ * `organization`, aliases deduplicated. Null without a usable `updated`. */
79
+ function cleanEntry(key, raw) {
80
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
81
+ return null;
82
+ const r = raw;
83
+ const updated = typeof r.updated === 'string' && !Number.isNaN(Date.parse(r.updated)) ? r.updated : null;
84
+ if (!updated)
85
+ return null;
86
+ const entry = { updated };
87
+ const name = text(r.name, ENTITY_NAME_MAX);
88
+ if (name)
89
+ entry.name = name;
90
+ const kind = normalizeKind(r.kind);
91
+ if (kind)
92
+ entry.kind = kind;
93
+ const aliases = cleanAliases(r.aliases, key);
94
+ if (aliases)
95
+ entry.aliases = aliases;
96
+ const note = text(r.note, ENTITY_NOTE_MAX);
97
+ if (note)
98
+ entry.note = note;
99
+ return entry;
100
+ }
101
+ /**
102
+ * The registry in a note body. Tolerant: an empty or unreadable body is an
103
+ * empty registry, a bad entry is skipped, keys are re-normalised (so a key
104
+ * written by hand as "Dana" still lands on "dana"). A body from a newer
105
+ * version is read as far as this version understands it, with its `v`
106
+ * kept so canWriteRegistry() refuses to overwrite it.
107
+ */
108
+ export function parseRegistry(body) {
109
+ if (!body || !body.trim())
110
+ return emptyRegistry();
111
+ let raw;
112
+ try {
113
+ raw = JSON.parse(body);
114
+ }
115
+ catch {
116
+ return emptyRegistry();
117
+ }
118
+ if (raw === null || typeof raw !== 'object' || Array.isArray(raw))
119
+ return emptyRegistry();
120
+ const r = raw;
121
+ const v = typeof r.v === 'number' && Number.isFinite(r.v) && r.v >= 1 ? Math.floor(r.v) : ENTITY_REGISTRY_VERSION;
122
+ const registry = { v, entities: {} };
123
+ const entities = r.entities;
124
+ if (entities && typeof entities === 'object' && !Array.isArray(entities)) {
125
+ for (const [rawKey, rawEntry] of Object.entries(entities)) {
126
+ const key = entityKey(rawKey);
127
+ if (!key)
128
+ continue;
129
+ const entry = cleanEntry(key, rawEntry);
130
+ if (!entry)
131
+ continue;
132
+ const existing = registry.entities[key];
133
+ registry.entities[key] = existing ? newer(existing, entry) : entry;
134
+ }
135
+ }
136
+ return registry;
137
+ }
138
+ /** The note body: keys sorted, so an unchanged registry serialises to the
139
+ * same bytes and a no-op save can be skipped. */
140
+ export function serializeRegistry(registry) {
141
+ const entities = {};
142
+ for (const key of Object.keys(registry.entities).sort()) {
143
+ const e = registry.entities[key];
144
+ // Field order fixed for stable bytes.
145
+ const ordered = {};
146
+ if (e.name)
147
+ ordered.name = e.name;
148
+ if (e.kind)
149
+ ordered.kind = e.kind;
150
+ if (e.aliases?.length)
151
+ ordered.aliases = e.aliases;
152
+ if (e.note)
153
+ ordered.note = e.note;
154
+ ordered.updated = e.updated;
155
+ entities[key] = ordered;
156
+ }
157
+ return JSON.stringify({ v: Math.max(registry.v, ENTITY_REGISTRY_VERSION), entities });
158
+ }
159
+ function newer(a, b) {
160
+ const ta = Date.parse(a.updated);
161
+ const tb = Date.parse(b.updated);
162
+ if (ta !== tb)
163
+ return tb > ta ? b : a;
164
+ return JSON.stringify(b) > JSON.stringify(a) ? b : a;
165
+ }
166
+ /** Two copies of the registry as one, per key by `updated` (see the module
167
+ * comment). Commutative, so every device converges on the same result. */
168
+ export function mergeRegistries(a, b) {
169
+ const merged = { v: Math.max(a.v, b.v), entities: { ...a.entities } };
170
+ for (const [key, entry] of Object.entries(b.entities)) {
171
+ const existing = merged.entities[key];
172
+ merged.entities[key] = existing ? newer(existing, entry) : entry;
173
+ }
174
+ return merged;
175
+ }
176
+ /** The key a name is filed under in the registry: an existing entry's own
177
+ * key, or the key of the entry that lists the name as an alias. */
178
+ export function registryKeyFor(registry, name) {
179
+ const key = entityKey(name);
180
+ if (registry.entities[key])
181
+ return key;
182
+ for (const k of Object.keys(registry.entities).sort()) {
183
+ if (registry.entities[k].aliases?.some((a) => entityKey(a) === key))
184
+ return k;
185
+ }
186
+ return key;
187
+ }
188
+ /**
189
+ * The registry with one entity described. Returns the same object when the
190
+ * patch changes nothing, so a caller can skip the save. `now` is the
191
+ * entry's new `updated`.
192
+ */
193
+ export function describeInRegistry(registry, patch, now = new Date().toISOString()) {
194
+ const key = registryKeyFor(registry, patch.name);
195
+ if (!key)
196
+ return registry;
197
+ const before = registry.entities[key];
198
+ const next = { ...(before ?? { updated: now }), updated: now };
199
+ if (before?.aliases)
200
+ next.aliases = [...before.aliases];
201
+ if (patch.kind === null)
202
+ delete next.kind;
203
+ else if (patch.kind !== undefined) {
204
+ const kind = normalizeKind(patch.kind);
205
+ if (kind)
206
+ next.kind = kind;
207
+ }
208
+ if (patch.note === null || patch.note === '')
209
+ delete next.note;
210
+ else if (patch.note !== undefined) {
211
+ const note = text(patch.note, ENTITY_NOTE_MAX);
212
+ if (note)
213
+ next.note = note;
214
+ }
215
+ if (patch.displayName !== undefined) {
216
+ const name = text(patch.displayName, ENTITY_NAME_MAX);
217
+ if (name && entityKey(name) === key)
218
+ next.name = name;
219
+ }
220
+ if (patch.aliases || patch.removeAliases) {
221
+ const removed = new Set((patch.removeAliases ?? []).map(entityKey));
222
+ const list = [...(next.aliases ?? []), ...(patch.aliases ?? [])].filter((a) => !removed.has(entityKey(a)));
223
+ const aliases = cleanAliases(list, key);
224
+ if (aliases)
225
+ next.aliases = aliases;
226
+ else
227
+ delete next.aliases;
228
+ }
229
+ const same = (a, b) => a !== undefined &&
230
+ a.kind === b.kind &&
231
+ a.note === b.note &&
232
+ a.name === b.name &&
233
+ JSON.stringify(a.aliases ?? []) === JSON.stringify(b.aliases ?? []);
234
+ if (same(before, next))
235
+ return registry;
236
+ // A patch that sets nothing on an entity with no entry is not an entry.
237
+ if (!before && !next.kind && !next.note && !next.aliases && !next.name)
238
+ return registry;
239
+ return { v: registry.v, entities: { ...registry.entities, [key]: next } };
240
+ }
241
+ /** What the graph reads: kind, aliases, note and display name by key. */
242
+ export function describedEntities(registry) {
243
+ const map = new Map();
244
+ if (!registry)
245
+ return map;
246
+ for (const [key, e] of Object.entries(registry.entities)) {
247
+ const d = {};
248
+ if (e.name)
249
+ d.name = e.name;
250
+ if (e.kind)
251
+ d.kind = e.kind;
252
+ if (e.aliases)
253
+ d.aliases = e.aliases;
254
+ if (e.note)
255
+ d.note = e.note;
256
+ map.set(key, d);
257
+ }
258
+ return map;
259
+ }
260
+ //# sourceMappingURL=entity-registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-registry.js","sourceRoot":"","sources":["../src/entity-registry.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -9,6 +9,8 @@ export { MemoryStore, SYNC_PAGE_LIMIT } from './memories.js';
9
9
  export type { CachedMemory, SimilarMemory, SyncResult } from './memories.js';
10
10
  export { MEMORY_NOTE_TYPE, mergeMeta, parseMemoryNote, serializeMemoryBody, toCodeEnvelope, } from './memory-note.js';
11
11
  export type { MemoryMeta, ParsedMemoryNote } from './memory-note.js';
12
+ export { ENTITY_REGISTRY_NOTE_TYPE, ENTITY_REGISTRY_TITLE, ENTITY_REGISTRY_VERSION, canWriteRegistry, describeInRegistry, describedEntities, emptyRegistry, mergeRegistries, parseRegistry, registryKeyFor, serializeRegistry, } from './entity-registry.js';
13
+ export type { EntityEntry, EntityPatch, EntityRegistry } from './entity-registry.js';
12
14
  export { MEMORIES_ROOT_NAME, ensureNamespace, resolveMemoryTree, } from './memory-tree.js';
13
15
  export type { MemoryTree } from './memory-tree.js';
14
16
  export { computeExposure, filteredNotice } from './exposure.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1I,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1H,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC/C,YAAY,EAAE,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC1I,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAChD,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAClD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,YAAY,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC7D,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACrE,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAC9B,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAC1B,YAAY,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAChE,YAAY,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AACpB,YAAY,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAC1H,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACnF,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEnE;;;;;;;;;;GAUG"}
package/dist/index.js CHANGED
@@ -4,6 +4,7 @@ export { NotesService, SEARCH_SCAN_CAP } from './notes.js';
4
4
  export { AttachmentsService } from './attachments.js';
5
5
  export { MemoryStore, SYNC_PAGE_LIMIT } from './memories.js';
6
6
  export { MEMORY_NOTE_TYPE, mergeMeta, parseMemoryNote, serializeMemoryBody, toCodeEnvelope, } from './memory-note.js';
7
+ export { ENTITY_REGISTRY_NOTE_TYPE, ENTITY_REGISTRY_TITLE, ENTITY_REGISTRY_VERSION, canWriteRegistry, describeInRegistry, describedEntities, emptyRegistry, mergeRegistries, parseRegistry, registryKeyFor, serializeRegistry, } from './entity-registry.js';
7
8
  export { MEMORIES_ROOT_NAME, ensureNamespace, resolveMemoryTree, } from './memory-tree.js';
8
9
  export { computeExposure, filteredNotice } from './exposure.js';
9
10
  export { EmbeddingCache } from './embedding-cache.js';
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGnF;;;;;;;;;;GAUG"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE/C,OAAO,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAEhD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EACL,gBAAgB,EAChB,SAAS,EACT,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EACL,yBAAyB,EACzB,qBAAqB,EACrB,uBAAuB,EACvB,gBAAgB,EAChB,kBAAkB,EAClB,iBAAiB,EACjB,aAAa,EACb,eAAe,EACf,aAAa,EACb,cAAc,EACd,iBAAiB,GAClB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EACL,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAEhE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,OAAO,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACnF,OAAO,EACL,eAAe,EACf,SAAS,EACT,WAAW,EACX,YAAY,EACZ,UAAU,EACV,UAAU,EACV,WAAW,EACX,WAAW,EACX,YAAY,EACZ,SAAS,EACT,UAAU,EACV,YAAY,EACZ,WAAW,EACX,aAAa,EACb,UAAU,EACV,QAAQ,GACT,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,iBAAiB,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGnF;;;;;;;;;;GAUG"}
@@ -2,6 +2,7 @@ import { type Embedder } from '@batalabs/virlow-memory';
2
2
  import { type VirlowApi } from './api.js';
3
3
  import type { EmbeddingCacheLike } from './embedding-cache.js';
4
4
  import { type MemoryMeta } from './memory-note.js';
5
+ import { type EntityPatch, type EntityRegistry } from './entity-registry.js';
5
6
  import { type MemoryGraph } from './memory-graph.js';
6
7
  import type { MemoryRelation } from './memory-note.js';
7
8
  import type { Vault } from './vault.js';
@@ -58,6 +59,12 @@ export declare class MemoryStore {
58
59
  private embeddings;
59
60
  private embeddingsLoaded;
60
61
  private syncInFlight;
62
+ /** The entity registry as last read, and the note(s) holding it, oldest
63
+ * first. `registrySupported` is false when the API refused the note type
64
+ * (an API older than the registry): kinds are then only guessed. */
65
+ private registry;
66
+ private registryRows;
67
+ private registrySupported;
61
68
  private mutationChain;
62
69
  /** Bumped every time clear() runs (i.e. every lock). Operations capture it
63
70
  * at the top and re-check before every cache write, so anything still
@@ -71,6 +78,52 @@ export declare class MemoryStore {
71
78
  * calls never double up on network, decrypt, or embedding work. */
72
79
  sync(): Promise<SyncResult>;
73
80
  private doSync;
81
+ /** Re-reads the entity registry. A failure other than "this API does not
82
+ * know the type" keeps what was read before: kinds are a nicety, and a
83
+ * registry hiccup must never fail a recall. */
84
+ private refreshRegistry;
85
+ private fetchRegistry;
86
+ /** Whether this API stores entity kinds (false: an API older than the
87
+ * registry), and the registry as last read. Requires a prior sync. */
88
+ registryState(): {
89
+ supported: boolean;
90
+ registry: EntityRegistry;
91
+ };
92
+ /**
93
+ * Describe entities in the registry: kind, aliases, note. Read, change,
94
+ * save with expectedUpdatedAt; on a 409 (another device saved first) read
95
+ * again and re-apply, so per-key changes from both survive. With
96
+ * `onlyIfUntyped`, a kind is set only where none is stored: how add_memory
97
+ * records the kinds an AI names without overruling the person's choice.
98
+ *
99
+ * `unsupported` when the API does not accept the registry note type yet;
100
+ * nothing is saved then and kinds stay guesses.
101
+ */
102
+ describeEntities(patches: EntityPatch[], opts?: {
103
+ onlyIfUntyped?: boolean;
104
+ }): Promise<{
105
+ changed: string[];
106
+ unsupported: boolean;
107
+ }>;
108
+ /**
109
+ * Names nothing types yet, most known first, each with a few of the
110
+ * memories that name it and a suggested kind when one signal points one
111
+ * way: what an AI needs to propose kinds, and then call describe_entity.
112
+ */
113
+ untyped(namespace?: string, limit?: number): Promise<{
114
+ total: number;
115
+ entities: {
116
+ name: string;
117
+ facts: number;
118
+ memories: {
119
+ id: string;
120
+ label: string;
121
+ text: string;
122
+ }[];
123
+ suggestion: import("./memory-graph.js").KindSuggestion | null;
124
+ }[];
125
+ supported: boolean;
126
+ }>;
74
127
  add(label: string, text: string, namespace?: string, meta?: MemoryMeta): Promise<{
75
128
  action: 'stored' | 'updated';
76
129
  id: string;
@@ -105,6 +158,11 @@ export declare class MemoryStore {
105
158
  * the facts behind them. Null when no memory names it. */
106
159
  recallEntity(name: string, namespace?: string): Promise<{
107
160
  name: string;
161
+ kind: "project" | "person" | "organization" | "tool" | "place" | "event" | "topic" | "product" | "media" | "pet" | "group" | "goal" | "other";
162
+ /** Whether the kind is stored (set by a person or an AI) or guessed. */
163
+ kindStored: boolean;
164
+ aliases: string[];
165
+ note: string | undefined;
108
166
  current: CachedMemory[];
109
167
  past: CachedMemory[];
110
168
  relations: {
@@ -132,8 +190,10 @@ export declare class MemoryStore {
132
190
  */
133
191
  context(namespace?: string, limit?: number): Promise<{
134
192
  entities: {
193
+ note?: string | undefined;
135
194
  name: string;
136
195
  facts: number;
196
+ kind: "project" | "person" | "organization" | "tool" | "place" | "event" | "topic" | "product" | "media" | "pet" | "group" | "goal" | "other";
137
197
  }[];
138
198
  facts: CachedMemory[];
139
199
  }>;
@@ -147,6 +207,7 @@ export declare class MemoryStore {
147
207
  predicate: string;
148
208
  objects: string[];
149
209
  }[];
210
+ untyped: string[];
150
211
  }>;
151
212
  /** The namespace of a memory this session has seen, without a sync;
152
213
  * undefined for a global memory or one not cached yet. */
@@ -1 +1 @@
1
- {"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../src/memories.ts"],"names":[],"mappings":"AAKA,OAAO,EAIL,KAAK,QAAQ,EACd,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAA0C,KAAK,SAAS,EAAE,MAAM,UAAU,CAAC;AAClF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC/D,OAAO,EAKL,KAAK,UAAU,EAChB,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EASL,KAAK,WAAW,EACjB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExC;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,eAAe,KAAK,CAAC;AAElC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,YAAY,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;iEACiE;AACjE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,cAAc,CAAC;CAC1B;AAsBD,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAIF,qBAAa,WAAW;IAepB,OAAO,CAAC,QAAQ,CAAC,GAAG;IACpB,OAAO,CAAC,QAAQ,CAAC,KAAK;IACtB,OAAO,CAAC,QAAQ,CAAC,QAAQ;IACzB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAjB/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmC;IACzD,OAAO,CAAC,IAAI,CAA2B;IACvC,OAAO,CAAC,UAAU,CAAmC;IACrD,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,YAAY,CAAoC;IACxD,OAAO,CAAC,aAAa,CAAuC;IAE5D;;;sEAGkE;IAClE,OAAO,CAAC,KAAK,CAAK;gBAGC,GAAG,EAAE,SAAS,EACd,KAAK,EAAE,KAAK,EACZ,QAAQ,EAAE,QAAQ,EAClB,YAAY,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,kBAAkB;IAKvE,KAAK,IAAI,IAAI;IAQb,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;uEACmE;IACnE,IAAI,IAAI,OAAO,CAAC,UAAU,CAAC;YAOb,MAAM;IA+FpB,GAAG,CACD,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,SAAS,CAAC,EAAE,MAAM,EAClB,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC;QAAE,MAAM,EAAE,QAAQ,GAAG,SAAS,CAAC;QAAC,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,aAAa,EAAE,CAAC;QAAC,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IA2FxG;;;;;OAKG;YACW,eAAe;IA+C7B;gCAC4B;IAC5B,KAAK,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,WAAW;IAQtC;yEACqE;IACrE,OAAO,CAAC,YAAY;IAsBpB;;;;OAIG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,SAAS,CAAC,EAAE,MAAM,EAClB,KAAK,SAAK,EACV,IAAI,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,OAAO,CAAA;KAAO,GACrD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,EAAE,WAAW,GAAG,UAAU,GAAG,WAAW,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAwBtG;+DAC2D;IACrD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM;;;;;;;;;;;;;IAmBnD;4EACwE;IACxE,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,SAAS,CAAC,EAAE,cAAc,EAAE,CAAA;KAAE,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC;IA4BhG;0EACsE;IACtE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAqB1D;;;;OAIG;IACG,OAAO,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK;;;;;;;IAgB5C;0DACsD;IAChD,MAAM,CAAC,SAAS,CAAC,EAAE,MAAM;;;;;;;;;IAO/B;+DAC2D;IAC3D,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIjD,8EAA8E;IAC9E,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,YAAY,EAAE;IAOxC,MAAM,CACJ,EAAE,EAAE,MAAM,EACV,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,UAAU,CAAA;KAAE,GAC5D,OAAO,CAAC,IAAI,CAAC;IA0BhB,+EAA+E;IAC/E,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYjC,8EAA8E;IAC9E,OAAO,CAAC,aAAa;IAYrB;6CACyC;YAC3B,SAAS;YAoCT,UAAU;YAWV,WAAW;YAKX,iBAAiB;IAS/B,yEAAyE;YAC3D,cAAc;IAK5B,OAAO,CAAC,cAAc;IAMtB;;;oDAGgD;IAChD,OAAO,CAAC,OAAO;CAKhB"}
1
+ {"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../src/memories.ts"],"names":[],"mappings":"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"}