@synapcores/openclaw-memory 0.2.0 → 0.4.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/README.md CHANGED
@@ -1,12 +1,26 @@
1
1
  # @synapcores/openclaw-memory
2
2
 
3
- A long-term memory plugin for [OpenClaw](https://github.com/openclaw/openclaw) that uses **SynapCores AIDB** as the storage backend. Drop-in alternative to `@openclaw/memory-lancedb` with the same auto-recall / auto-capture lifecycle, plus three SynapCores-only extensions: SQL-filtered semantic recall, graph-relation walks, and AutoML relevance scoring.
3
+ A long-term memory plugin for [OpenClaw](https://github.com/openclaw/openclaw) that uses **SynapCores AIDB** as the storage backend. Drop-in alternative to `@openclaw/memory-lancedb` with the same auto-recall / auto-capture lifecycle, plus four SynapCores-only extensions: SQL-filtered semantic recall, graph-relation walks, AutoML relevance scoring, and a model-training helper.
4
4
 
5
- > **0.2.0 shipping note:** verified against gateway `v1.6.5.2-ce` and `@synapcores/sdk@^0.4.0`. The full surface parity API (recall/capture/forget) **plus all four SynapCores-only extensions** (`recallFiltered`, `recallRelated`, `predictRelevance`, `trainRelevanceModel`) is wired against the live SDK and exercised end-to-end (7/7 live smoke steps pass against `:28201`).
5
+ > **0.4.0 shipping note:** the core memory ops (`memory_store` / `memory_recall` / `memory_forget`) now ride the engine-side `MEMORY_STORE` / `MEMORY_RECALL` / `MEMORY_FORGET` primitives via `@synapcores/sdk@^0.5.0`'s `client.memory` surface. The plugin's public API (tools, CLI, extensions, types) is unchanged only the internal storage path moved.
6
6
  >
7
- > - **`recallRelated`** is now implemented (was signature-only in 0.1.0). On capture, the plugin inserts each Memory as a graph node carrying the embedding under the `embedding` property so the gateway's synthetic `SIMILAR_TO` edge resolves at MATCH time. `autoLinkSimilar: true` (default) enables this; turn it off if you don't need graph-backed recall.
8
- > - **`trainRelevanceModel`** is now implemented (was signature-only in 0.1.0). Feedback rows are staged in a SQL table (`openclaw_memory_relevance_training[_<workspace>]`) the gateway's AutoML can read, then trained as a regression model targeting the `score` column.
9
- > - SDK dep bumped to `@synapcores/sdk@^0.4.0` (which switched API-key auth to `Authorization: Bearer` and added `createVectorCollection` / `vectorCollection(name)`). The three v0.1.0 workarounds auth-header shim, direct `/v1/vectors/collections` POSTs, direct `/v1/vectors/collections/{n}/vectors` POSTsare deleted in favour of the SDK's typed helpers.
7
+ > - **Requires SynapCores gateway `v1.8.5-ce` or newer** (the version that ships the `MEMORY_*` SQL functions).
8
+ > - **Embedding moved server-side for the hot path.** `memory_store` / `memory_recall` no longer call OpenAI the gateway embeds via its configured model. The OpenAI client is still used by the relevance extensions (`predictRelevance`, `trainRelevanceModel`) and the `autoLinkSimilar` graph-node embedding.
9
+ > - **Migration from 0.3.x: the engine-managed table is `_memory_<namespace>`, a different storage backend from the v0.3.x vector collection. Existing v0.3.x memories WILL NOT appear after upgradere-capture them.** See "Upgrading from 0.3.x" below.
10
+ > - **`collection` config field becomes the engine `namespace`.** It must now match `^[A-Za-z_][A-Za-z0-9_]*$`. The default `openclaw_memories` continues to work; other custom values with hyphens or other non-identifier characters need updating.
11
+ > - **`recallFiltered` WHERE clauses run engine-side** against the `MEMORY_RECALL(?, ?, ?)` result-set. The plugin auto-rewrites the four legacy column shorthands (`category`, `importance`, `createdAt`, `text`) into the JSON-extract form so most existing call sites keep working unchanged.
12
+
13
+ ## Upgrading from 0.3.x
14
+
15
+ `@synapcores/openclaw-memory@0.4.0` is a **hard cut**: the storage backend changes, so old memories will not migrate automatically. Steps:
16
+
17
+ 1. Upgrade the SynapCores gateway to `v1.8.5-ce` or newer.
18
+ 2. `npm install @synapcores/openclaw-memory@0.4.0`.
19
+ 3. If your `collection` config value contains hyphens or other non-identifier characters, rename it to match `^[A-Za-z_][A-Za-z0-9_]*$` before restarting.
20
+ 4. (Optional) export any high-value memories from the v0.3.x vector collection (the legacy `openclaw_memories` collection in your gateway) and re-store them via `memory_store` so they land in the new `_memory_<namespace>` table.
21
+ 5. (Optional) drop the old vector collection from the gateway once you're sure the export is done.
22
+
23
+ If your `recallFiltered` callers use plain column names (`category`, `importance`, `createdAt`, `text`), they continue to work via auto-rewrite. Callers using the more general SQL surface should switch to the JSON-extract form (`metadata->>'…'`) directly.
10
24
 
11
25
  ## Why use this over `@openclaw/memory-lancedb`?
12
26
 
@@ -47,33 +61,58 @@ Create an API key from the SynapCores admin UI (default `http://localhost:8095`)
47
61
 
48
62
  ## Configure
49
63
 
50
- Add this entry to your `openclaw.config.json` (or whichever config path your OpenClaw install uses):
64
+ Requires OpenClaw **`>=2026.4.10`**. Install the plugin, then add its config and
65
+ give it the **memory slot**:
66
+
67
+ ```bash
68
+ openclaw plugins install @synapcores/openclaw-memory
69
+ ```
70
+
71
+ Add this to your OpenClaw config (run `openclaw config file` to find the path,
72
+ typically `~/.openclaw/openclaw.json`). Three things matter: the
73
+ `plugins.entries.<id>.config` nesting, the `plugins.allow` entry, and
74
+ **`plugins.slots.memory`**:
51
75
 
52
76
  ```json
53
77
  {
54
78
  "plugins": {
55
- "memory-synapcores": {
56
- "embedding": {
57
- "apiKey": "${OPENAI_API_KEY}",
58
- "model": "text-embedding-3-small"
59
- },
60
- "synapcores": {
61
- "host": "localhost",
62
- "port": 8080,
63
- "apiKey": "${SYNAPCORES_API_KEY}",
64
- "useHttps": false
65
- },
66
- "collection": "openclaw_memories",
67
- "graph": "openclaw_memory_graph",
68
- "autoCapture": true,
69
- "autoRecall": true,
70
- "autoLinkSimilar": true
79
+ "allow": ["memory-synapcores"],
80
+ "slots": { "memory": "memory-synapcores" },
81
+ "entries": {
82
+ "memory-synapcores": {
83
+ "enabled": true,
84
+ "config": {
85
+ "embedding": {
86
+ "apiKey": "${OPENAI_API_KEY}",
87
+ "model": "text-embedding-3-small"
88
+ },
89
+ "synapcores": {
90
+ "host": "localhost",
91
+ "port": 8080,
92
+ "apiKey": "${SYNAPCORES_API_KEY}",
93
+ "useHttps": false
94
+ },
95
+ "collection": "openclaw_memories",
96
+ "graph": "openclaw_memory_graph",
97
+ "autoCapture": true,
98
+ "autoRecall": true,
99
+ "autoLinkSimilar": true
100
+ }
101
+ }
71
102
  }
72
103
  }
73
104
  }
74
105
  ```
75
106
 
76
- Environment-variable interpolation (`${OPENAI_API_KEY}`, `${SYNAPCORES_API_KEY}`) is supported in any string field so you don't have to commit secrets.
107
+ > **You must set `plugins.slots.memory` to `"memory-synapcores"`.** Only one
108
+ > plugin can own the memory slot, and the default is OpenClaw's built-in
109
+ > `memory-core` — without claiming the slot the plugin loads but stays
110
+ > **disabled**.
111
+
112
+ Then `openclaw config validate`. Environment-variable interpolation
113
+ (`${OPENAI_API_KEY}`, `${SYNAPCORES_API_KEY}`) is supported in any string field
114
+ so you don't have to commit secrets. (Store keys **clean** — a trailing newline
115
+ in `apiKey` will break auth.)
77
116
 
78
117
  ### Config fields
79
118
 
@@ -200,9 +239,9 @@ await plugin.extensions.trainRelevanceModel(feedback);
200
239
 
201
240
  Requires at least 10 samples; throws otherwise. Train periodically (cron / on-demand) — the next `predictRelevance` call will detect the model and switch out of heuristic mode.
202
241
 
203
- Under the hood, v0.2.0 stages feedback rows in a SQL table (`openclaw_memory_relevance_training[_<workspace>]`) on the gateway, then calls `/v1/automl/train` with `target: 'score'` and `task: 'regression'`. The table is preserved across calls so feedback accumulates between sessions; clear it manually with `DROP TABLE` (via `client.executeQuery`) if you want a clean restart.
242
+ Under the hood, v0.4.0 stages feedback rows in a SQL table (`openclaw_memory_relevance_training[_<workspace>]`) on the gateway, then calls `/v1/automl/train` with `target: 'score'` and `task: 'regression'`. The table is preserved across calls so feedback accumulates between sessions; clear it manually with `DROP TABLE` (via `client.executeQuery`) if you want a clean restart. Memory hydration is via `MEMORY_RECALL(?, ?, ?) WHERE id = ?` against the engine's namespace; rows whose memories have been deleted are skipped.
204
243
 
205
- ## Roadmap (0.3.0+)
244
+ ## Roadmap (0.5.0+)
206
245
 
207
246
  - **Entity extraction on capture** — parse `@mention` tokens and known-contact names out of incoming text and create `Person` / `Project` graph nodes with `MENTIONS` edges back to the memory.
208
247
  - **Tag inference** — auto-classify memories into a configurable tag vocabulary on capture (small classifier or LLM call) so `recallFiltered` queries can use tags out of the box.
@@ -0,0 +1,9 @@
1
+ declare const _default: {
2
+ id: string;
3
+ name: string;
4
+ description: string;
5
+ configSchema: import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginConfigSchema;
6
+ register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
7
+ } & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
8
+ export default _default;
9
+ //# sourceMappingURL=cli-metadata.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-metadata.d.ts","sourceRoot":"","sources":["../cli-metadata.ts"],"names":[],"mappings":";;;;;;;AAMA,wBAeG"}
@@ -0,0 +1,22 @@
1
+ import { definePluginEntry } from "openclaw/plugin-sdk/plugin-entry";
2
+ // Lightweight CLI-metadata entry: lets `openclaw plugins` list the `ltm`
3
+ // command + its subcommands without loading the full plugin runtime. The
4
+ // actual command implementation (list / search / stats) is wired via
5
+ // `api.registerCli` inside the main plugin entry (index.ts).
6
+ export default definePluginEntry({
7
+ id: "memory-synapcores",
8
+ name: "Memory (SynapCores)",
9
+ description: "SynapCores-backed long-term memory provider",
10
+ register(api) {
11
+ api.registerCli(() => { }, {
12
+ descriptors: [
13
+ {
14
+ name: "ltm",
15
+ description: "Inspect and query SynapCores-backed memory",
16
+ hasSubcommands: true,
17
+ },
18
+ ],
19
+ });
20
+ },
21
+ });
22
+ //# sourceMappingURL=cli-metadata.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-metadata.js","sourceRoot":"","sources":["../cli-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,yEAAyE;AACzE,yEAAyE;AACzE,qEAAqE;AACrE,6DAA6D;AAC7D,eAAe,iBAAiB,CAAC;IAC/B,EAAE,EAAE,mBAAmB;IACvB,IAAI,EAAE,qBAAqB;IAC3B,WAAW,EAAE,6CAA6C;IAC1D,QAAQ,CAAC,GAAG;QACV,GAAG,CAAC,WAAW,CAAC,GAAG,EAAE,GAAE,CAAC,EAAE;YACxB,WAAW,EAAE;gBACX;oBACE,IAAI,EAAE,KAAK;oBACX,WAAW,EAAE,4CAA4C;oBACzD,cAAc,EAAE,IAAI;iBACrB;aACF;SACF,CAAC,CAAC;IACL,CAAC;CACF,CAAC,CAAC"}
package/dist/index.d.ts CHANGED
@@ -2,20 +2,29 @@
2
2
  * OpenClaw Memory (SynapCores) Plugin
3
3
  *
4
4
  * Long-term memory with vector search for AI conversations.
5
- * Uses SynapCores AIDB for storage and OpenAI for embeddings.
5
+ * Uses SynapCores AIDB for storage via the engine-side
6
+ * `MEMORY_STORE` / `MEMORY_RECALL` / `MEMORY_FORGET` primitives and
7
+ * OpenAI for the relevance-extension features that still need a
8
+ * client-side embedding (cosine feature in `predictRelevance`,
9
+ * graph-node embedding when `autoLinkSimilar` is on).
10
+ *
6
11
  * Provides seamless auto-recall and auto-capture via lifecycle hooks,
7
- * plus three SynapCores-only extensions (SQL-filtered recall, graph-relation
8
- * walks, and AutoML relevance scoring) — see `recallFiltered`,
9
- * `recallRelated`, and `predictRelevance`.
12
+ * plus four SynapCores-only extensions (SQL-filtered recall, graph-relation
13
+ * walks, AutoML relevance scoring, and a model-training helper) — see
14
+ * `recallFiltered`, `recallRelated`, `predictRelevance`, and
15
+ * `trainRelevanceModel`.
10
16
  *
11
- * This is the @synapcores/openclaw-memory drop-in alternative to
12
- * @openclaw/memory-lancedb. Verified end-to-end against SynapCores
13
- * gateway v1.6.5.2-ce. Requires @synapcores/sdk@^0.4.0 — which added
14
- * `client.vectorCollection(name)` + `client.createVectorCollection(...)`
15
- * and switched API-key auth to `Authorization: Bearer`.
17
+ * v0.4.0 migrates the core memory ops to `@synapcores/sdk@^0.5.0`'s
18
+ * `client.memory` surface. Requires SynapCores gateway v1.8.5-ce+.
16
19
  */
17
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
18
20
  import { type MemoryCategory } from "./config.js";
21
+ /**
22
+ * Internal memory record shape used throughout the plugin. The legacy v0.3.x
23
+ * surface guaranteed `vector: number[]` on every entry because storage went
24
+ * through `client.vectorCollection(...)`. v0.4.0's `client.memory.recall`
25
+ * does not return embeddings — `vector` is filled lazily by callers that
26
+ * need it (currently only `predictRelevance` / `trainRelevanceModel`).
27
+ */
19
28
  export type MemoryEntry = {
20
29
  id: string;
21
30
  text: string;
@@ -34,9 +43,21 @@ export type MemorySearchResult = {
34
43
  * importance thresholds, category equality, etc.).
35
44
  */
36
45
  export type RecallFilteredOptions = {
37
- /** SQL fragment applied as the search filter (e.g. `category = 'preference' AND importance >= 0.7`). */
46
+ /**
47
+ * SQL fragment applied as the search filter.
48
+ *
49
+ * v0.4.0 note: the WHERE clause is now evaluated against the columns
50
+ * returned by `MEMORY_RECALL(?, ?, ?)` — `id`, `content`, `similarity`,
51
+ * `metadata`, `created_at`. The legacy v0.3.x `category = 'preference'`
52
+ * shorthand still works for callers that wrote category/importance into
53
+ * the metadata blob (the plugin always does so) BUT the path is now
54
+ * engine-side JSON access: `metadata->>'category' = 'preference'` is the
55
+ * portable form. The plugin auto-rewrites a handful of the legacy
56
+ * shorthands (`category`, `importance`, `createdAt`, `text`) into the
57
+ * JSON-extract form so most existing callers keep working unchanged.
58
+ */
38
59
  where: string;
39
- /** Natural-language query that gets embedded and used as the search vector. */
60
+ /** Natural-language query that gets embedded engine-side and used as the search vector. */
40
61
  semantic: string;
41
62
  /** Maximum results to return (default: 5). */
42
63
  limit?: number;
@@ -97,11 +118,12 @@ export type RelevanceFeedback = {
97
118
  /**
98
119
  * Escape a string literal for safe inlining into a Cypher query.
99
120
  *
100
- * Gateway v1.6.5.2-ce explicitly rejects named-parameter bindings (`$param`)
101
- * with HTTP 400; the supported path is to inline literal values into the
102
- * query string. Memory IDs flow in from `randomUUID()` so they are normally
103
- * safe, BUT we never trust upstream input — every string that ends up
104
- * inside `'...'` in a Cypher fragment must go through this helper.
121
+ * Gateway v1.6.5.2+ rejects named-parameter bindings (`$param`) with HTTP
122
+ * 400; the supported path is to inline literal values into the query
123
+ * string. Memory IDs flow in from `MEMORY_STORE` (engine-generated, e.g.
124
+ * `mem_1kv69sxfn_5ofzwK`) so they are normally safe, BUT we never trust
125
+ * upstream input — every string that ends up inside `'...'` in a Cypher
126
+ * fragment must go through this helper.
105
127
  *
106
128
  * Escapes single quotes (`'` -> `\'`) and backslashes (`\` -> `\\`).
107
129
  * Returns the inner content only; callers are responsible for the
@@ -114,9 +136,8 @@ export declare function escapeCypherString(value: string): string;
114
136
  * them through the OpenClaw plugin registry.
115
137
  *
116
138
  * The four SynapCores-only methods use:
117
- * - `vectorCollection.search({ ..., filter: { sql } })` for `recallFiltered`,
118
- * forwarding the SQL `WHERE` clause to the gateway under
119
- * `filter: { sql: where }`.
139
+ * - `client.executeQuery(...)` against MEMORY_RECALL for `recallFiltered`,
140
+ * wrapping the user's WHERE clause around the engine's recall result-set.
120
141
  * - `client.graph.cypher(...)` for `recallRelated`, walking the synthetic
121
142
  * `SIMILAR_TO` edges that resolve against `Memory.embedding`.
122
143
  * - `client.automl.getModel(...).predict(...)` for `predictRelevance`, with
@@ -131,7 +152,7 @@ export interface MemorySynapCoresExtensions {
131
152
  *
132
153
  * @example
133
154
  * await ext.recallFiltered({
134
- * where: "category = 'preference' AND importance >= 0.7 AND createdAt > 1700000000000",
155
+ * where: "category = 'preference' AND importance >= 0.7",
135
156
  * semantic: "what kind of UI does the user prefer?",
136
157
  * limit: 5,
137
158
  * });
@@ -141,13 +162,13 @@ export interface MemorySynapCoresExtensions {
141
162
  * Graph walk from a memory through `SIMILAR_TO` / `MENTIONS` / `RELATES_TO`
142
163
  * edges, returning the neighborhood.
143
164
  *
144
- * v0.2.0 wires this against the gateway's synthetic-SIMILAR_TO Cypher
145
- * syntax (`[:SIMILAR_TO > T]`) which resolves against the `embedding`
146
- * property the plugin writes onto every captured Memory node. If a
147
- * source memory has not been promoted to a graph node yet (e.g.
148
- * `autoLinkSimilar: false`), this returns an empty array.
165
+ * Wires against the gateway's synthetic-SIMILAR_TO Cypher syntax
166
+ * (`[:SIMILAR_TO > T]`) which resolves against the `embedding` property
167
+ * the plugin writes onto every captured Memory node. If a source memory
168
+ * has not been promoted to a graph node yet (e.g. `autoLinkSimilar:
169
+ * false`), this returns an empty array.
149
170
  *
150
- * @param memoryId - UUID of the source memory.
171
+ * @param memoryId - id of the source memory (engine-assigned, e.g. `mem_...`).
151
172
  * @param options - Hops, edge-kind filter, similarity threshold, limit.
152
173
  */
153
174
  recallRelated(memoryId: string, options?: RecallRelatedOptions): Promise<RelatedMemoryResult[]>;
@@ -172,12 +193,12 @@ export interface MemorySynapCoresExtensions {
172
193
  /**
173
194
  * Train (or retrain) the AutoML model used by `predictRelevance`.
174
195
  *
175
- * v0.2.0 wires this against the staged-collection workflow: feedback
176
- * rows are inserted into a SQL table the gateway's AutoML can read
177
- * via `SELECT * FROM {table}`, then `/v1/automl/train` is invoked with
196
+ * Wires against the staged-collection workflow: feedback rows are
197
+ * inserted into a SQL table the gateway's AutoML can read via
198
+ * `SELECT * FROM {table}`, then `/v1/automl/train` is invoked with
178
199
  * `target: 'score'` to fit a regression model. Existing training data
179
- * in the staging table is preserved across calls so feedback
180
- * accumulates across sessions.
200
+ * in the staging table is preserved across calls so feedback accumulates
201
+ * across sessions.
181
202
  *
182
203
  * @param feedback - Array of `{ memoryId, queryText, score }` samples.
183
204
  * Requires at least {@link MIN_TRAINING_SAMPLES} samples;
@@ -189,79 +210,12 @@ export interface MemorySynapCoresExtensions {
189
210
  modelName: string;
190
211
  }>;
191
212
  }
192
- declare const memoryPlugin: {
213
+ declare const pluginEntry: {
193
214
  id: string;
194
215
  name: string;
195
216
  description: string;
196
- kind: "memory";
197
- configSchema: {
198
- parse(value: unknown): import("./config.js").MemoryConfig;
199
- uiHints: {
200
- "embedding.apiKey": {
201
- label: string;
202
- sensitive: boolean;
203
- placeholder: string;
204
- help: string;
205
- };
206
- "embedding.model": {
207
- label: string;
208
- placeholder: string;
209
- help: string;
210
- };
211
- "synapcores.host": {
212
- label: string;
213
- placeholder: string;
214
- help: string;
215
- };
216
- "synapcores.port": {
217
- label: string;
218
- placeholder: string;
219
- help: string;
220
- };
221
- "synapcores.apiKey": {
222
- label: string;
223
- sensitive: boolean;
224
- placeholder: string;
225
- help: string;
226
- };
227
- "synapcores.useHttps": {
228
- label: string;
229
- advanced: boolean;
230
- help: string;
231
- };
232
- collection: {
233
- label: string;
234
- placeholder: string;
235
- advanced: boolean;
236
- help: string;
237
- };
238
- graph: {
239
- label: string;
240
- placeholder: string;
241
- advanced: boolean;
242
- help: string;
243
- };
244
- autoCapture: {
245
- label: string;
246
- help: string;
247
- };
248
- autoRecall: {
249
- label: string;
250
- help: string;
251
- };
252
- autoLinkSimilar: {
253
- label: string;
254
- advanced: boolean;
255
- help: string;
256
- };
257
- workspace: {
258
- label: string;
259
- advanced: boolean;
260
- help: string;
261
- };
262
- };
263
- };
264
- register(api: OpenClawPluginApi): void;
265
- };
266
- export default memoryPlugin;
217
+ configSchema: import("openclaw/plugin-sdk/core").OpenClawPluginConfigSchema;
218
+ register: NonNullable<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition["register"]>;
219
+ } & Pick<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
220
+ export default pluginEntry;
267
221
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAO7D,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AAMrB,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,wGAAwG;IACxG,KAAK,EAAE,MAAM,CAAC;IACd,+EAA+E;IAC/E,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAgYF;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAuGD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE9E;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEhG;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,EAAE,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrG;AA4UD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOF,iBAAiB;CA8ZhC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AASH,OAAO,EAEL,KAAK,cAAc,EAGpB,MAAM,aAAa,CAAC;AAMrB;;;;;;GAMG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,cAAc,CAAC;IACzB,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,KAAK,EAAE,WAAW,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;;;;;;;;;;OAYG;IACH,KAAK,EAAE,MAAM,CAAC;IACd,2FAA2F;IAC3F,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;IACd;;;;;;OAMG;IACH,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB;;;;OAIG;IACH,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,+CAA+C;IAC/C,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE,WAAW,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,EAAE,CAAC;CACf,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,KAAK,EAAE,WAAW,CAAC;IACnB,2CAA2C;IAC3C,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC;IACjB,8CAA8C;IAC9C,SAAS,EAAE,MAAM,CAAC;IAClB,0EAA0E;IAC1E,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAiqBF;;;;;;;;;;;;;GAaG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AAqGD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE9E;;;;;;;;;;;;OAYG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,EAAE,CAAC,CAAC;IAEhG;;;;;;;;;;;;;;;;OAgBG;IACH,gBAAgB,CACd,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,WAAW,EAAE,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC,CAAC;IAEpC;;;;;;;;;;;;;;OAcG;IACH,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrG;AA4zBD,QAAA,MAAM,WAAW;;;;;;yIAAkC,CAAC;AAEpD,eAAe,WAAW,CAAC"}