@synapcores/openclaw-memory 0.1.0 → 0.3.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
@@ -2,12 +2,11 @@
2
2
 
3
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.
4
4
 
5
- > **0.1.0 shipping note:** tested against gateway `v1.6.5.2-ce` and `@synapcores/sdk@0.3.0`. The parity API (recall/capture/forget) plus two of the three SynapCores-only read extensions (`recallFiltered`, `predictRelevance`) are wired against the live SDK and exercised end-to-end. Two methods are **signature-only in 0.1.0** and throw a clear "ships in 0.2.0" error before calling the gateway:
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`).
6
6
  >
7
- > - **`trainRelevanceModel`** gateway `v1.6.5.x` rejects inline training data with HTTP 400; 0.2.0 stages rows in a sibling collection before calling `/v1/automl/train`. `predictRelevance` runs in heuristic mode in the meantime (always works).
8
- > - **`recallRelated`** gateway `v1.6.5.x` derives `SIMILAR_TO` synthetically from a graph-node vector index that this release does not populate (the plugin writes only to the vector collection; promoting Memory nodes into the graph backend ships in 0.2.0). Use `predictRelevance(query, candidates)` over a broad `recallFiltered({where: "1=1", semantic: query, limit: 20})` for relevance-scoped recall in the meantime.
9
- >
10
- > `autoLinkSimilar` is also a no-op in 0.1.0 for the same synthetic-edge reason (the gateway doesn't permit explicit `MERGE`s on `SIMILAR_TO` and computes the edge from vectors at query time).
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` POSTs — are deleted in favour of the SDK's typed helpers.
11
10
 
12
11
  ## Why use this over `@openclaw/memory-lancedb`?
13
12
 
@@ -48,33 +47,58 @@ Create an API key from the SynapCores admin UI (default `http://localhost:8095`)
48
47
 
49
48
  ## Configure
50
49
 
51
- Add this entry to your `openclaw.config.json` (or whichever config path your OpenClaw install uses):
50
+ Requires OpenClaw **`>=2026.4.10`**. Install the plugin, then add its config and
51
+ give it the **memory slot**:
52
+
53
+ ```bash
54
+ openclaw plugins install @synapcores/openclaw-memory
55
+ ```
56
+
57
+ Add this to your OpenClaw config (run `openclaw config file` to find the path,
58
+ typically `~/.openclaw/openclaw.json`). Three things matter: the
59
+ `plugins.entries.<id>.config` nesting, the `plugins.allow` entry, and
60
+ **`plugins.slots.memory`**:
52
61
 
53
62
  ```json
54
63
  {
55
64
  "plugins": {
56
- "memory-synapcores": {
57
- "embedding": {
58
- "apiKey": "${OPENAI_API_KEY}",
59
- "model": "text-embedding-3-small"
60
- },
61
- "synapcores": {
62
- "host": "localhost",
63
- "port": 8080,
64
- "apiKey": "${SYNAPCORES_API_KEY}",
65
- "useHttps": false
66
- },
67
- "collection": "openclaw_memories",
68
- "graph": "openclaw_memory_graph",
69
- "autoCapture": true,
70
- "autoRecall": true,
71
- "autoLinkSimilar": true
65
+ "allow": ["memory-synapcores"],
66
+ "slots": { "memory": "memory-synapcores" },
67
+ "entries": {
68
+ "memory-synapcores": {
69
+ "enabled": true,
70
+ "config": {
71
+ "embedding": {
72
+ "apiKey": "${OPENAI_API_KEY}",
73
+ "model": "text-embedding-3-small"
74
+ },
75
+ "synapcores": {
76
+ "host": "localhost",
77
+ "port": 8080,
78
+ "apiKey": "${SYNAPCORES_API_KEY}",
79
+ "useHttps": false
80
+ },
81
+ "collection": "openclaw_memories",
82
+ "graph": "openclaw_memory_graph",
83
+ "autoCapture": true,
84
+ "autoRecall": true,
85
+ "autoLinkSimilar": true
86
+ }
87
+ }
72
88
  }
73
89
  }
74
90
  }
75
91
  ```
76
92
 
77
- Environment-variable interpolation (`${OPENAI_API_KEY}`, `${SYNAPCORES_API_KEY}`) is supported in any string field so you don't have to commit secrets.
93
+ > **You must set `plugins.slots.memory` to `"memory-synapcores"`.** Only one
94
+ > plugin can own the memory slot, and the default is OpenClaw's built-in
95
+ > `memory-core` — without claiming the slot the plugin loads but stays
96
+ > **disabled**.
97
+
98
+ Then `openclaw config validate`. Environment-variable interpolation
99
+ (`${OPENAI_API_KEY}`, `${SYNAPCORES_API_KEY}`) is supported in any string field
100
+ so you don't have to commit secrets. (Store keys **clean** — a trailing newline
101
+ in `apiKey` will break auth.)
78
102
 
79
103
  ### Config fields
80
104
 
@@ -90,7 +114,7 @@ Environment-variable interpolation (`${OPENAI_API_KEY}`, `${SYNAPCORES_API_KEY}`
90
114
  | `graph` | no | `openclaw_memory_graph` | SynapCores graph name (used for `SIMILAR_TO` edges and `recallRelated` walks). |
91
115
  | `autoCapture` | no | `true` | Auto-store memorable utterances after each agent turn. |
92
116
  | `autoRecall` | no | `true` | Auto-inject relevant memories before each agent turn. |
93
- | `autoLinkSimilar` | no | `true` | On capture, draw `SIMILAR_TO` edges to existing memories with cosine similarity > 0.7 so `recallRelated` returns useful neighborhoods out of the box (adds ~30-50ms per capture). |
117
+ | `autoLinkSimilar` | no | `true` | On capture, insert each Memory as a graph node carrying the embedding so `recallRelated` returns useful neighborhoods out of the box. Adds ~30-80ms per capture; disable if you never call `recallRelated`. |
94
118
  | `workspace` | no | — | Optional workspace suffix on the AutoML relevance model name so multiple installations sharing one gateway can train independent models. |
95
119
 
96
120
  ## What you get
@@ -160,12 +184,16 @@ The `where` clause is forwarded to the SynapCores gateway as the `filter` field
160
184
 
161
185
  ```ts
162
186
  const neighbors = await plugin.extensions.recallRelated(memoryId, {
163
- hops: 2,
164
- edgeKinds: ["SIMILAR_TO"], // omit for any edge type
187
+ hops: 1,
188
+ edgeKinds: ["SIMILAR_TO"], // default
189
+ similarityThreshold: 0.5, // default — cosine threshold for synthetic edges
190
+ limit: 20,
165
191
  });
166
192
  ```
167
193
 
168
- > **0.1.0 status:** this method validates its arguments and throws a clear "ships in 0.2.0" error before calling the gateway. Gateway `v1.6.5.x` derives `SIMILAR_TO` edges synthetically from a graph-node vector index that the plugin does not populate in this release; 0.2.0 will post each Memory node into the graph backend with its embedding at capture time so the gateway's `[:SIMILAR_TO > T]` MATCH expansion returns useful neighborhoods. Wire your callers now and they will start returning data the moment you upgrade to `@synapcores/openclaw-memory@0.2.0`.
194
+ Returns memories cosine-similar to the source (synthetic `SIMILAR_TO` edges, single-hop), plus any explicit `MENTIONS` / `RELATES_TO` edges the caller has populated (multi-hop supported on non-synthetic edge kinds). Requires `autoLinkSimilar: true` at capture time the plugin inserts each Memory as a graph node carrying the embedding so the gateway's vector-indexed synthetic edges resolve at MATCH time.
195
+
196
+ If a source memory was captured before `autoLinkSimilar` was enabled, its `Memory` graph node won't exist and `recallRelated` will return `[]` for it. Re-capture (or write a one-off back-fill that posts `{labels: ["Memory"], properties: {id, text, embedding, ...}}` to `/v1/graph/nodes`) to retro-fit.
169
197
 
170
198
  #### `predictRelevance` — AutoML re-ranking with heuristic fallback
171
199
 
@@ -197,13 +225,14 @@ await plugin.extensions.trainRelevanceModel(feedback);
197
225
 
198
226
  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.
199
227
 
200
- > **0.1.0 status:** `trainRelevanceModel` validates inputs but throws a clear "not implemented yet" error before calling the gateway, because gateway `v1.6.5.x` rejects inline training rows. Wire your feedback-collection now and the method will start training models the moment you upgrade to `@synapcores/openclaw-memory@0.2.0` (which stages rows in a sibling collection before calling `/v1/automl/train`).
228
+ 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.
201
229
 
202
- ## Roadmap (0.2.0+)
230
+ ## Roadmap (0.3.0+)
203
231
 
204
232
  - **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.
205
233
  - **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.
206
234
  - **`synapcores-import-lancedb` migration script** — read an existing `~/.openclaw/memory/lancedb` store, re-embed if needed, and bulk-load into a SynapCores collection. Ships as a `bin` entry on the package.
235
+ - **Drop the `_getHttpClient` graph-node workaround** once `@synapcores/sdk >0.4.0` fixes `client.graph.nodes.create` to post `{labels: [label]}` instead of `{label}` (the wire shape the gateway's `/v1/graph/nodes` handler expects).
207
236
 
208
237
  ## Upstream
209
238
 
@@ -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
@@ -9,11 +9,11 @@
9
9
  * `recallRelated`, and `predictRelevance`.
10
10
  *
11
11
  * This is the @synapcores/openclaw-memory drop-in alternative to
12
- * @openclaw/memory-lancedb. The parity API (recall + capture +
13
- * auto-recall/auto-capture) plus the three SynapCores-only extensions
14
- * are all fully wired in 0.1.0.
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`.
15
16
  */
16
- import type { OpenClawPluginApi } from "openclaw/plugin-sdk";
17
17
  import { type MemoryCategory } from "./config.js";
18
18
  export type MemoryEntry = {
19
19
  id: string;
@@ -45,10 +45,24 @@ export type RecallFilteredOptions = {
45
45
  * memory graph from a given memory ID and returns the neighborhood.
46
46
  */
47
47
  export type RecallRelatedOptions = {
48
- /** Maximum graph hops to traverse (default: 1). */
48
+ /** Maximum graph hops to traverse (default: 1). Capped at 4 to avoid runaway walks. */
49
49
  hops?: number;
50
- /** Restrict to specific edge kinds (default: any). Common kinds: `SIMILAR_TO`, `MENTIONS`, `RELATES_TO`. */
50
+ /**
51
+ * Restrict to specific edge kinds (default: `["SIMILAR_TO"]`). The
52
+ * gateway exposes `SIMILAR_TO` as a synthetic edge derived from
53
+ * cosine similarity over the `embedding` property the plugin writes
54
+ * onto every captured Memory node. Other edge kinds (e.g. `MENTIONS`,
55
+ * `RELATES_TO`) are honoured if the caller has populated them.
56
+ */
51
57
  edgeKinds?: string[];
58
+ /**
59
+ * Cosine-similarity threshold for synthetic `SIMILAR_TO` edges
60
+ * (default: 0.5). Higher values return fewer, more closely related
61
+ * memories. Ignored for non-synthetic edge kinds.
62
+ */
63
+ similarityThreshold?: number;
64
+ /** Maximum results to return (default: 20). */
65
+ limit?: number;
52
66
  };
53
67
  /**
54
68
  * One result returned from `recallRelated` — the neighbor memory plus the
@@ -98,15 +112,17 @@ export declare function escapeCypherString(value: string): string;
98
112
  * methods are exported via `memoryPlugin.extensions` so callers can reach
99
113
  * them through the OpenClaw plugin registry.
100
114
  *
101
- * The three SynapCores-only methods use:
102
- * - `client.collection(...).vectorSearch({ ..., filter })` for recallFiltered,
103
- * forwarding the SQL `WHERE` clause through to the gateway under
115
+ * The four SynapCores-only methods use:
116
+ * - `vectorCollection.search({ ..., filter: { sql } })` for `recallFiltered`,
117
+ * forwarding the SQL `WHERE` clause to the gateway under
104
118
  * `filter: { sql: where }`.
105
- * - `client.graph.cypher(...)` for recallRelated, walking the `SIMILAR_TO`
106
- * edges created automatically at capture-time (plus any `MENTIONS` /
107
- * `RELATES_TO` edges added by future entity-extraction tools).
108
- * - `client.automl.getModel(...).predict(...)` for predictRelevance, with
119
+ * - `client.graph.cypher(...)` for `recallRelated`, walking the synthetic
120
+ * `SIMILAR_TO` edges that resolve against `Memory.embedding`.
121
+ * - `client.automl.getModel(...).predict(...)` for `predictRelevance`, with
109
122
  * a deterministic heuristic fallback when no model is trained yet.
123
+ * - `client.executeQuery(...)` + `client.automl.train(...)` for
124
+ * `trainRelevanceModel`, staging feedback rows in a SQL table the
125
+ * gateway can `SELECT * FROM` for training.
110
126
  */
111
127
  export interface MemorySynapCoresExtensions {
112
128
  /**
@@ -124,12 +140,14 @@ export interface MemorySynapCoresExtensions {
124
140
  * Graph walk from a memory through `SIMILAR_TO` / `MENTIONS` / `RELATES_TO`
125
141
  * edges, returning the neighborhood.
126
142
  *
127
- * @param memoryId - UUID of the source memory.
128
- * @param options - Hops and edge-kind filter.
143
+ * v0.2.0 wires this against the gateway's synthetic-SIMILAR_TO Cypher
144
+ * syntax (`[:SIMILAR_TO > T]`) which resolves against the `embedding`
145
+ * property the plugin writes onto every captured Memory node. If a
146
+ * source memory has not been promoted to a graph node yet (e.g.
147
+ * `autoLinkSimilar: false`), this returns an empty array.
129
148
  *
130
- * @remarks `SIMILAR_TO` edges are auto-created at capture time when
131
- * `autoLinkSimilar` is true (default). `via` is left empty in 0.1.0;
132
- * derive it from a follow-up Cypher walk if you need the full path.
149
+ * @param memoryId - UUID of the source memory.
150
+ * @param options - Hops, edge-kind filter, similarity threshold, limit.
133
151
  */
134
152
  recallRelated(memoryId: string, options?: RecallRelatedOptions): Promise<RelatedMemoryResult[]>;
135
153
  /**
@@ -153,89 +171,29 @@ export interface MemorySynapCoresExtensions {
153
171
  /**
154
172
  * Train (or retrain) the AutoML model used by `predictRelevance`.
155
173
  *
174
+ * v0.2.0 wires this against the staged-collection workflow: feedback
175
+ * rows are inserted into a SQL table the gateway's AutoML can read
176
+ * via `SELECT * FROM {table}`, then `/v1/automl/train` is invoked with
177
+ * `target: 'score'` to fit a regression model. Existing training data
178
+ * in the staging table is preserved across calls so feedback
179
+ * accumulates across sessions.
180
+ *
156
181
  * @param feedback - Array of `{ memoryId, queryText, score }` samples.
157
182
  * Requires at least {@link MIN_TRAINING_SAMPLES} samples;
158
183
  * throws otherwise.
159
- * @returns The id of the trained model.
184
+ * @returns The id and name of the trained model.
160
185
  */
161
186
  trainRelevanceModel(feedback: RelevanceFeedback[]): Promise<{
162
187
  modelId: string;
163
188
  modelName: string;
164
189
  }>;
165
190
  }
166
- declare const memoryPlugin: {
191
+ declare const pluginEntry: {
167
192
  id: string;
168
193
  name: string;
169
194
  description: string;
170
- kind: "memory";
171
- configSchema: {
172
- parse(value: unknown): import("./config.js").MemoryConfig;
173
- uiHints: {
174
- "embedding.apiKey": {
175
- label: string;
176
- sensitive: boolean;
177
- placeholder: string;
178
- help: string;
179
- };
180
- "embedding.model": {
181
- label: string;
182
- placeholder: string;
183
- help: string;
184
- };
185
- "synapcores.host": {
186
- label: string;
187
- placeholder: string;
188
- help: string;
189
- };
190
- "synapcores.port": {
191
- label: string;
192
- placeholder: string;
193
- help: string;
194
- };
195
- "synapcores.apiKey": {
196
- label: string;
197
- sensitive: boolean;
198
- placeholder: string;
199
- help: string;
200
- };
201
- "synapcores.useHttps": {
202
- label: string;
203
- advanced: boolean;
204
- help: string;
205
- };
206
- collection: {
207
- label: string;
208
- placeholder: string;
209
- advanced: boolean;
210
- help: string;
211
- };
212
- graph: {
213
- label: string;
214
- placeholder: string;
215
- advanced: boolean;
216
- help: string;
217
- };
218
- autoCapture: {
219
- label: string;
220
- help: string;
221
- };
222
- autoRecall: {
223
- label: string;
224
- help: string;
225
- };
226
- autoLinkSimilar: {
227
- label: string;
228
- advanced: boolean;
229
- help: string;
230
- };
231
- workspace: {
232
- label: string;
233
- advanced: boolean;
234
- help: string;
235
- };
236
- };
237
- };
238
- register(api: OpenClawPluginApi): void;
239
- };
240
- export default memoryPlugin;
195
+ configSchema: import("openclaw/plugin-sdk/core").OpenClawPluginConfigSchema;
196
+ register: NonNullable<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition["register"]>;
197
+ } & Pick<import("openclaw/plugin-sdk/core").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
198
+ export default pluginEntry;
241
199
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;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,mDAAmD;IACnD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,4GAA4G;IAC5G,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,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;AAodF;;;;;;;;;;;;GAYG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAExD;AA2DD;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,0BAA0B;IACzC;;;;;;;;;OASG;IACH,cAAc,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAE9E;;;;;;;;;;OAUG;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;;;;;;;OAOG;IACH,mBAAmB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrG;AAsKD,QAAA,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAOF,iBAAiB;CAqbhC,CAAC;AAEF,eAAe,YAAY,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAUH,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;AAsfF;;;;;;;;;;;;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;AAkwBD,QAAA,MAAM,WAAW;;;;;;yIAAkC,CAAC;AAEpD,eAAe,WAAW,CAAC"}