@batalabs/virlow-mcp-core 3.82.1 → 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.
- package/dist/api.d.ts +6 -0
- package/dist/api.d.ts.map +1 -1
- package/dist/api.js +2 -0
- package/dist/api.js.map +1 -1
- package/dist/cjs/api.d.ts +6 -0
- package/dist/cjs/api.js +2 -0
- package/dist/cjs/entity-registry.d.ts +101 -0
- package/dist/cjs/entity-registry.js +270 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +14 -1
- package/dist/cjs/memories.d.ts +61 -0
- package/dist/cjs/memories.js +191 -3
- package/dist/cjs/memory-graph.d.ts +89 -7
- package/dist/cjs/memory-graph.js +351 -44
- package/dist/cjs/notes.js +13 -4
- package/dist/entity-registry.d.ts +102 -0
- package/dist/entity-registry.d.ts.map +1 -0
- package/dist/entity-registry.js +260 -0
- package/dist/entity-registry.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memories.d.ts +61 -0
- package/dist/memories.d.ts.map +1 -1
- package/dist/memories.js +192 -4
- package/dist/memories.js.map +1 -1
- package/dist/memory-graph.d.ts +89 -7
- package/dist/memory-graph.d.ts.map +1 -1
- package/dist/memory-graph.js +342 -42
- package/dist/memory-graph.js.map +1 -1
- package/dist/notes.d.ts.map +1 -1
- package/dist/notes.js +13 -4
- package/dist/notes.js.map +1 -1
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +150 -15
- package/dist/tools.js.map +1 -1
- package/package.json +9 -3
|
@@ -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';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -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"}
|
package/dist/memories.d.ts
CHANGED
|
@@ -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. */
|
package/dist/memories.d.ts.map
CHANGED
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"memories.d.ts","sourceRoot":"","sources":["../src/memories.ts"],"names":[],"mappings":"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"}
|