@psiclawops/hypermem 0.9.2 → 0.9.4

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.
Files changed (52) hide show
  1. package/CHANGELOG.md +16 -0
  2. package/INSTALL.md +73 -70
  3. package/README.md +33 -51
  4. package/assets/default-config.json +47 -0
  5. package/bin/hypermem-doctor.mjs +76 -2
  6. package/bin/hypermem-status.mjs +255 -7
  7. package/dist/adaptive-lifecycle.d.ts +39 -0
  8. package/dist/adaptive-lifecycle.d.ts.map +1 -1
  9. package/dist/adaptive-lifecycle.js +87 -9
  10. package/dist/background-indexer.d.ts.map +1 -1
  11. package/dist/background-indexer.js +7 -5
  12. package/dist/compositor.d.ts.map +1 -1
  13. package/dist/compositor.js +239 -20
  14. package/dist/hybrid-retrieval.d.ts +8 -0
  15. package/dist/hybrid-retrieval.d.ts.map +1 -1
  16. package/dist/hybrid-retrieval.js +112 -10
  17. package/dist/index.d.ts +15 -2
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +17 -0
  20. package/dist/message-store.d.ts +62 -1
  21. package/dist/message-store.d.ts.map +1 -1
  22. package/dist/message-store.js +355 -2
  23. package/dist/open-domain.d.ts.map +1 -1
  24. package/dist/open-domain.js +3 -2
  25. package/dist/proactive-pass.d.ts +42 -2
  26. package/dist/proactive-pass.d.ts.map +1 -1
  27. package/dist/proactive-pass.js +294 -39
  28. package/dist/topic-synthesizer.d.ts.map +1 -1
  29. package/dist/topic-synthesizer.js +9 -3
  30. package/dist/types.d.ts +99 -0
  31. package/dist/types.d.ts.map +1 -1
  32. package/dist/vector-store.d.ts +10 -1
  33. package/dist/vector-store.d.ts.map +1 -1
  34. package/dist/vector-store.js +45 -9
  35. package/docs/DIAGNOSTICS.md +87 -0
  36. package/docs/INTEGRATION_VALIDATION.md +40 -1
  37. package/docs/ROADMAP.md +25 -12
  38. package/docs/TUNING.md +45 -4
  39. package/install.sh +5 -60
  40. package/memory-plugin/dist/index.d.ts +24 -0
  41. package/memory-plugin/dist/index.js +570 -0
  42. package/memory-plugin/openclaw.plugin.json +199 -2
  43. package/memory-plugin/package.json +3 -3
  44. package/package.json +24 -10
  45. package/plugin/dist/index.d.ts +210 -0
  46. package/plugin/dist/index.d.ts.map +1 -0
  47. package/plugin/dist/index.js +3641 -0
  48. package/plugin/dist/index.js.map +1 -0
  49. package/plugin/openclaw.plugin.json +199 -2
  50. package/plugin/package.json +4 -4
  51. package/scripts/install-packed-runtime.mjs +99 -0
  52. package/scripts/install-runtime.mjs +164 -4
@@ -3,11 +3,208 @@
3
3
  "enabledByDefault": false,
4
4
  "kind": "memory",
5
5
  "activation": {
6
- "onCapabilities": ["memory"]
6
+ "onCapabilities": [
7
+ "memory"
8
+ ]
7
9
  },
8
10
  "configSchema": {
9
11
  "type": "object",
10
12
  "additionalProperties": false,
11
- "properties": {}
13
+ "properties": {
14
+ "hyperMemPath": {
15
+ "type": "string"
16
+ },
17
+ "dataDir": {
18
+ "type": "string"
19
+ },
20
+ "contextWindowSize": {
21
+ "type": "integer",
22
+ "minimum": 1
23
+ },
24
+ "contextWindowReserve": {
25
+ "type": "number",
26
+ "minimum": 0,
27
+ "maximum": 0.5
28
+ },
29
+ "deferToolPruning": {
30
+ "type": "boolean"
31
+ },
32
+ "verboseLogging": {
33
+ "type": "boolean"
34
+ },
35
+ "warmCacheReplayThresholdMs": {
36
+ "type": "integer",
37
+ "minimum": 0
38
+ },
39
+ "subagentWarming": {
40
+ "type": "string",
41
+ "enum": [
42
+ "full",
43
+ "light",
44
+ "off"
45
+ ]
46
+ },
47
+ "contextWindowOverrides": {
48
+ "type": "object",
49
+ "additionalProperties": {
50
+ "type": "object",
51
+ "additionalProperties": false,
52
+ "properties": {
53
+ "contextTokens": {
54
+ "type": "integer",
55
+ "minimum": 1
56
+ },
57
+ "contextWindow": {
58
+ "type": "integer",
59
+ "minimum": 1
60
+ }
61
+ }
62
+ }
63
+ },
64
+ "compositor": {
65
+ "type": "object",
66
+ "additionalProperties": true
67
+ },
68
+ "eviction": {
69
+ "type": "object",
70
+ "additionalProperties": false,
71
+ "properties": {
72
+ "enabled": {
73
+ "type": "boolean"
74
+ },
75
+ "imageAgeTurns": {
76
+ "type": "integer",
77
+ "minimum": 0
78
+ },
79
+ "toolResultAgeTurns": {
80
+ "type": "integer",
81
+ "minimum": 0
82
+ },
83
+ "minTokensToEvict": {
84
+ "type": "integer",
85
+ "minimum": 0
86
+ },
87
+ "keepPreviewChars": {
88
+ "type": "integer",
89
+ "minimum": 0
90
+ }
91
+ }
92
+ },
93
+ "embedding": {
94
+ "type": "object",
95
+ "additionalProperties": false,
96
+ "properties": {
97
+ "provider": {
98
+ "type": "string",
99
+ "enum": [
100
+ "none",
101
+ "ollama",
102
+ "openai",
103
+ "gemini"
104
+ ]
105
+ },
106
+ "ollamaUrl": {
107
+ "type": "string"
108
+ },
109
+ "openaiApiKey": {
110
+ "type": "string"
111
+ },
112
+ "openaiBaseUrl": {
113
+ "type": "string"
114
+ },
115
+ "geminiApiKey": {
116
+ "type": "string"
117
+ },
118
+ "geminiBaseUrl": {
119
+ "type": "string"
120
+ },
121
+ "geminiIndexTaskType": {
122
+ "type": "string"
123
+ },
124
+ "geminiQueryTaskType": {
125
+ "type": "string"
126
+ },
127
+ "queryInputType": {
128
+ "type": "string"
129
+ },
130
+ "documentInputType": {
131
+ "type": "string"
132
+ },
133
+ "queryPrefix": {
134
+ "type": "string"
135
+ },
136
+ "documentPrefix": {
137
+ "type": "string"
138
+ },
139
+ "model": {
140
+ "type": "string"
141
+ },
142
+ "dimensions": {
143
+ "type": "integer",
144
+ "minimum": 1
145
+ },
146
+ "timeout": {
147
+ "type": "integer",
148
+ "minimum": 1
149
+ },
150
+ "batchSize": {
151
+ "type": "integer",
152
+ "minimum": 1
153
+ }
154
+ }
155
+ },
156
+ "reranker": {
157
+ "type": "object",
158
+ "additionalProperties": false,
159
+ "required": [
160
+ "provider"
161
+ ],
162
+ "properties": {
163
+ "provider": {
164
+ "type": "string",
165
+ "enum": [
166
+ "zeroentropy",
167
+ "openrouter",
168
+ "local",
169
+ "none"
170
+ ]
171
+ },
172
+ "minCandidates": {
173
+ "type": "integer",
174
+ "minimum": 0
175
+ },
176
+ "maxDocuments": {
177
+ "type": "integer",
178
+ "minimum": 1
179
+ },
180
+ "topK": {
181
+ "type": "integer",
182
+ "minimum": 1
183
+ },
184
+ "timeoutMs": {
185
+ "type": "integer",
186
+ "minimum": 1
187
+ },
188
+ "zeroEntropyApiKey": {
189
+ "type": "string"
190
+ },
191
+ "zeroEntropyModel": {
192
+ "type": "string"
193
+ },
194
+ "openrouterApiKey": {
195
+ "type": "string"
196
+ },
197
+ "openrouterModel": {
198
+ "type": "string"
199
+ },
200
+ "ollamaUrl": {
201
+ "type": "string"
202
+ },
203
+ "ollamaModel": {
204
+ "type": "string"
205
+ }
206
+ }
207
+ }
208
+ }
12
209
  }
13
210
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@psiclawops/hypermem-memory",
3
- "version": "0.9.2",
4
- "description": "HyperMem memory plugin for OpenClaw bridges HyperMem retrieval into the memory slot",
3
+ "version": "0.9.4",
4
+ "description": "HyperMem memory plugin for OpenClaw \u2014 bridges HyperMem retrieval into the memory slot",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "license": "Apache-2.0",
@@ -40,7 +40,7 @@
40
40
  "typecheck": "tsc --noEmit"
41
41
  },
42
42
  "dependencies": {
43
- "@psiclawops/hypermem": "0.9.2"
43
+ "@psiclawops/hypermem": "^0.9.4"
44
44
  },
45
45
  "devDependencies": {
46
46
  "openclaw": "*",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@psiclawops/hypermem",
3
- "version": "0.9.2",
3
+ "version": "0.9.4",
4
4
  "description": "Agent-centric memory and context composition engine for OpenClaw",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -24,8 +24,8 @@
24
24
  },
25
25
  "scripts": {
26
26
  "build": "tsc",
27
- "prepublishOnly": "npm run build",
28
- "prepack": "npm run build",
27
+ "prepublishOnly": "npm run build:all",
28
+ "prepack": "npm run build:all",
29
29
  "health": "node bin/hypermem-status.mjs --master",
30
30
  "health:master": "node bin/hypermem-status.mjs --master",
31
31
  "install:runtime": "node scripts/install-runtime.mjs",
@@ -44,7 +44,11 @@
44
44
  "validate:version-parity": "node scripts/validate-version-parity.mjs",
45
45
  "validate:public-surface": "node scripts/validate-public-surface.mjs",
46
46
  "bench:memory": "node bench/data-access-bench.mjs --iterations 1000 --warmup 50",
47
- "validate:doctor": "node test/doctor-cli.mjs"
47
+ "validate:doctor": "node test/doctor-cli.mjs",
48
+ "build:all": "npm run build && npm --prefix plugin install --prefer-offline && npm --prefix plugin run build && npm --prefix memory-plugin install --prefer-offline && npm --prefix memory-plugin run build",
49
+ "validate:history-query": "npm run build && npm --prefix memory-plugin run build && node scripts/validate-history-query.mjs",
50
+ "install:runtime:packed": "node scripts/install-packed-runtime.mjs",
51
+ "release:install-smoke": "bash release-gate-internal/fresh-install-smoke.sh"
48
52
  },
49
53
  "dependencies": {
50
54
  "sqlite-vec": "^0.1.9",
@@ -57,14 +61,11 @@
57
61
  "engines": {
58
62
  "node": ">=22.0.0"
59
63
  },
60
- "bundledDependencies": [
61
- "sqlite-vec",
62
- "zod"
63
- ],
64
64
  "files": [
65
65
  "dist/**/*.js",
66
66
  "dist/**/*.d.ts",
67
67
  "dist/**/*.d.ts.map",
68
+ "assets/default-config.json",
68
69
  "bin/hypermem-status.mjs",
69
70
  "bin/hypermem-model-audit.mjs",
70
71
  "bin/hypermem-doctor.mjs",
@@ -78,6 +79,7 @@
78
79
  "memory-plugin/package.json",
79
80
  "memory-plugin/openclaw.plugin.json",
80
81
  "scripts/install-runtime.mjs",
82
+ "scripts/install-packed-runtime.mjs",
81
83
  "docs/*.md",
82
84
  "install.sh",
83
85
  "README.md",
@@ -90,7 +92,7 @@
90
92
  "license": "Apache-2.0",
91
93
  "repository": {
92
94
  "type": "git",
93
- "url": "https://github.com/PsiClawOps/hypermem.git"
95
+ "url": "git+https://github.com/PsiClawOps/hypermem.git"
94
96
  },
95
97
  "publishConfig": {
96
98
  "access": "public",
@@ -105,5 +107,17 @@
105
107
  "sqlite-vec",
106
108
  "redis",
107
109
  "rag"
108
- ]
110
+ ],
111
+ "bundleDependencies": [
112
+ "sqlite-vec",
113
+ "zod"
114
+ ],
115
+ "directories": {
116
+ "doc": "docs",
117
+ "test": "test"
118
+ },
119
+ "bugs": {
120
+ "url": "https://github.com/PsiClawOps/hypermem/issues"
121
+ },
122
+ "homepage": "https://github.com/PsiClawOps/hypermem#readme"
109
123
  }
@@ -0,0 +1,210 @@
1
+ /**
2
+ * hypermem Context Engine Plugin
3
+ *
4
+ * Implements OpenClaw's ContextEngine interface backed by hypermem's
5
+ * four-layer memory architecture:
6
+ *
7
+ * L1 Cache — SQLite `:memory:` hot session working memory
8
+ * L2 Messages — per-agent conversation history (SQLite)
9
+ * L3 Vectors — semantic + keyword search (KNN + FTS5)
10
+ * L4 Library — facts, knowledge, episodes, preferences
11
+ *
12
+ * Lifecycle mapping:
13
+ * ingest() → record each message into messages.db
14
+ * assemble() → compositor builds context from all four layers
15
+ * compact() → delegate to runtime (ownsCompaction: false)
16
+ * afterTurn() → trigger background indexer (fire-and-forget)
17
+ * bootstrap() → warm hot-cache session, register agent in fleet
18
+ * dispose() → close hypermem connections
19
+ *
20
+ * Session key format expected: "agent:<agentId>:<channel>:<name>"
21
+ */
22
+ import type { NeutralMessage, NeutralToolCall, NeutralToolResult, ComposeRequest, ComposeResult } from '@psiclawops/hypermem';
23
+ import { resolveTrimBudgets } from '@psiclawops/hypermem';
24
+ export type { NeutralMessage, NeutralToolCall, NeutralToolResult, ComposeRequest, ComposeResult };
25
+ type TrimTelemetryPath = 'assemble.normal' | 'assemble.toolLoop' | 'assemble.subagent' | 'reshape' | 'compact.nuclear' | 'compact.history' | 'compact.history2' | 'afterTurn.secondary' | 'warmstart';
26
+ type DegradationTelemetryPath = 'compose' | 'toolLoop';
27
+ interface DegradationTelemetryFields {
28
+ agentId: string;
29
+ sessionKey: string;
30
+ turnId: string;
31
+ path: DegradationTelemetryPath;
32
+ toolChainCoEjections?: number;
33
+ toolChainStubReplacements?: number;
34
+ artifactDegradations?: number;
35
+ artifactOversizeThresholdTokens?: number;
36
+ replayState?: 'entering' | 'stabilizing' | 'exited';
37
+ replayReason?: string;
38
+ }
39
+ declare function trimTelemetry(fields: {
40
+ path: TrimTelemetryPath;
41
+ agentId: string;
42
+ sessionKey: string;
43
+ preTokens: number;
44
+ postTokens: number;
45
+ removed: number;
46
+ cacheInvalidated: boolean;
47
+ reason: string;
48
+ }): void;
49
+ declare function assembleTrace(fields: {
50
+ agentId: string;
51
+ sessionKey: string;
52
+ turnId: string;
53
+ path: 'cold' | 'replay' | 'subagent';
54
+ toolLoop: boolean;
55
+ msgCount: number;
56
+ prefixChanged?: boolean;
57
+ prefixHash?: string;
58
+ rerankerStatus?: string;
59
+ rerankerCandidates?: number;
60
+ rerankerProvider?: string | null;
61
+ slotSpans?: Record<string, {
62
+ allocated: number;
63
+ filled: number;
64
+ overflow: boolean;
65
+ }>;
66
+ compactionEligibleCount?: number;
67
+ compactionEligibleRatio?: number;
68
+ compactionProcessedCount?: number;
69
+ composeTopicSource?: 'request-topic-id' | 'session-topic-map' | 'none';
70
+ composeTopicState?: 'no-active-topic' | 'active-topic-ready' | 'active-topic-missing-stamped-history' | 'history-disabled';
71
+ composeTopicMessageCount?: number;
72
+ composeTopicStampedMessageCount?: number;
73
+ composeTopicTelemetryStatus?: 'emitted' | 'intentionally-omitted';
74
+ }): void;
75
+ declare function degradationTelemetry(fields: DegradationTelemetryFields): void;
76
+ declare function lifecyclePolicyTelemetry(fields: {
77
+ path: 'compose.eviction' | 'compose.preRecall' | 'afterTurn.gradient';
78
+ agentId: string;
79
+ sessionKey: string;
80
+ band: string;
81
+ pressurePct?: number;
82
+ topicShiftConfidence?: number;
83
+ trimSoftTarget?: number;
84
+ protectedWarmingFloorFraction?: number;
85
+ protectedSlotsKept?: number;
86
+ reasons?: string[];
87
+ }): void;
88
+ declare function nextTurnId(): string;
89
+ declare const GUARD_TELEMETRY_REASONS: readonly ["warmstart-pressure-demoted", "reshape-downshift-demoted", "duplicate-claim-suppressed", "afterturn-secondary-demoted", "window-within-budget-skip", "pressure-accounting-anomaly"];
90
+ type GuardTelemetryReason = typeof GUARD_TELEMETRY_REASONS[number];
91
+ declare function beginTrimOwnerTurn(sessionKey: string, turnId: string): void;
92
+ declare function endTrimOwnerTurn(sessionKey: string, turnId: string): void;
93
+ /**
94
+ * Claim the steady-state trim owner slot for the current turn.
95
+ *
96
+ * Behavior:
97
+ * - compact.* paths are exception-only and pass through without claiming.
98
+ * - Non-steady paths (warmstart, reshape, afterTurn.secondary) also pass
99
+ * through without claiming. Demoted/no-op sites should normally emit
100
+ * via guardTelemetry() instead so they stay visible without contending
101
+ * for ownership (sub-tasks 2.2 and 2.3 wire this in).
102
+ * - Steady-state paths (assemble.normal, assemble.subagent,
103
+ * assemble.toolLoop) claim the single owner slot for the current turn.
104
+ * The first such claim succeeds. A second steady-state claim against the
105
+ * same turn is a duplicate-turn violation: it throws loudly under
106
+ * NODE_ENV='development' and warns in other environments (returning
107
+ * false so non-dev runtimes keep working).
108
+ *
109
+ * Callers should invoke this immediately before the real
110
+ * trimHistoryToTokenBudget() call. Guard telemetry does NOT route through
111
+ * this helper — it is explicitly excluded from the steady-state invariant.
112
+ *
113
+ * Returns true when the claim succeeds (or is exempt); false on a swallowed
114
+ * duplicate claim in non-development. In development the duplicate throws
115
+ * before returning.
116
+ */
117
+ declare function claimTrimOwner(sessionKey: string, turnId: string, path: TrimTelemetryPath): boolean;
118
+ /**
119
+ * Non-counting guard / noop telemetry.
120
+ *
121
+ * Emits a `trim-guard` record on the same JSONL channel as trimTelemetry()
122
+ * but with a distinct event name so per-turn reporting (scripts/trim-report.mjs,
123
+ * future ownership dashboards) can keep it out of `trimCount`. Used by
124
+ * demoted/no-op call sites in 2.2 and 2.3 so their path labels stay visible
125
+ * in telemetry without consuming a steady-state owner slot.
126
+ *
127
+ * Zero-cost when telemetry is off. Never throws.
128
+ */
129
+ declare function guardTelemetry(fields: {
130
+ path: TrimTelemetryPath;
131
+ agentId: string;
132
+ sessionKey: string;
133
+ reason: GuardTelemetryReason;
134
+ }): void;
135
+ export declare const __telemetryForTests: {
136
+ trimTelemetry: typeof trimTelemetry;
137
+ assembleTrace: typeof assembleTrace;
138
+ degradationTelemetry: typeof degradationTelemetry;
139
+ guardTelemetry: typeof guardTelemetry;
140
+ lifecyclePolicyTelemetry: typeof lifecyclePolicyTelemetry;
141
+ nextTurnId: typeof nextTurnId;
142
+ beginTrimOwnerTurn: typeof beginTrimOwnerTurn;
143
+ endTrimOwnerTurn: typeof endTrimOwnerTurn;
144
+ claimTrimOwner: typeof claimTrimOwner;
145
+ TRIM_SOFT_TARGET: number;
146
+ TRIM_GROWTH_THRESHOLD: number;
147
+ TRIM_HEADROOM_FRACTION: number;
148
+ resolveTrimBudgets: typeof resolveTrimBudgets;
149
+ reset(): void;
150
+ };
151
+ export declare const CONTEXT_WINDOW_OVERRIDE_KEY_REGEX: RegExp;
152
+ export type ContextWindowOverride = {
153
+ contextTokens?: number;
154
+ contextWindow?: number;
155
+ };
156
+ export declare function sanitizeContextWindowOverrides(raw: unknown): {
157
+ value: Record<string, ContextWindowOverride>;
158
+ warnings: string[];
159
+ };
160
+ export declare function resolveEffectiveBudget(args: {
161
+ tokenBudget?: number;
162
+ model?: string;
163
+ contextWindowSize: number;
164
+ contextWindowReserve: number;
165
+ contextWindowOverrides?: Record<string, ContextWindowOverride>;
166
+ }): {
167
+ budget: number;
168
+ source: string;
169
+ };
170
+ export interface ModelIdentity {
171
+ rawModel: string | null;
172
+ modelKey: string | null;
173
+ provider: string | null;
174
+ modelId: string | null;
175
+ }
176
+ export declare function resolveModelIdentity(model?: string): ModelIdentity;
177
+ export declare function diffModelState(previous: {
178
+ model?: string;
179
+ modelKey?: string | null;
180
+ provider?: string | null;
181
+ modelId?: string | null;
182
+ tokenBudget?: number;
183
+ } | null | undefined, current: {
184
+ model?: string;
185
+ tokenBudget?: number;
186
+ }): {
187
+ previousIdentity: ModelIdentity;
188
+ currentIdentity: ModelIdentity;
189
+ modelChanged: boolean;
190
+ providerChanged: boolean;
191
+ modelIdChanged: boolean;
192
+ budgetChanged: boolean;
193
+ budgetDownshift: boolean;
194
+ budgetUplift: boolean;
195
+ };
196
+ /**
197
+ * Bust the assembly cache for a specific agent+session.
198
+ * Call this after writing to identity files (SOUL.md, IDENTITY.md, TOOLS.md,
199
+ * USER.md) to ensure the next assemble() runs full compositor, not a replay.
200
+ */
201
+ export declare function bustAssemblyCache(agentId: string, sessionKey: string): Promise<void>;
202
+ declare const _default: {
203
+ id: string;
204
+ name: string;
205
+ description: string;
206
+ configSchema: import("openclaw/plugin-sdk").OpenClawPluginConfigSchema;
207
+ register: NonNullable<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition["register"]>;
208
+ } & Pick<import("openclaw/plugin-sdk/plugin-entry").OpenClawPluginDefinition, "kind" | "reload" | "nodeHostCommands" | "securityAuditCollectors">;
209
+ export default _default;
210
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAaH,OAAO,KAAK,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EAId,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAUL,kBAAkB,EASnB,MAAM,sBAAsB,CAAC;AAW9B,YAAY,EAAE,cAAc,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,aAAa,EAAE,CAAC;AAYlG,KAAK,iBAAiB,GAClB,iBAAiB,GACjB,mBAAmB,GACnB,mBAAmB,GACnB,SAAS,GACT,iBAAiB,GACjB,iBAAiB,GACjB,kBAAkB,GAClB,qBAAqB,GACrB,WAAW,CAAC;AAEhB,KAAK,wBAAwB,GAAG,SAAS,GAAG,UAAU,CAAC;AAEvD,UAAU,0BAA0B;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,wBAAwB,CAAC;IAC/B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,WAAW,CAAC,EAAE,UAAU,GAAG,aAAa,GAAG,QAAQ,CAAC;IACpD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AA0BD,iBAAS,aAAa,CAAC,MAAM,EAAE;IAC7B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAChB,GAAG,IAAI,CAcP;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrC,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IAEjB,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IACrF,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,kBAAkB,CAAC,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,MAAM,CAAC;IACvE,iBAAiB,CAAC,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,sCAAsC,GAAG,kBAAkB,CAAC;IAC3H,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,2BAA2B,CAAC,EAAE,SAAS,GAAG,uBAAuB,CAAC;CACnE,GAAG,IAAI,CAcP;AAED,iBAAS,oBAAoB,CAAC,MAAM,EAAE,0BAA0B,GAAG,IAAI,CActE;AAGD,iBAAS,wBAAwB,CAAC,MAAM,EAAE;IACxC,IAAI,EAAE,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,CAAC;IACtE,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAC9B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB,GAAG,IAAI,CAcP;AAkBD,iBAAS,UAAU,IAAI,MAAM,CAG5B;AA+CD,QAAA,MAAM,uBAAuB,+LAOnB,CAAC;AACX,KAAK,oBAAoB,GAAG,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AAqBnE,iBAAS,kBAAkB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAEpE;AAED,iBAAS,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAElE;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,iBAAS,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAwB5F;AAED;;;;;;;;;;GAUG;AACH,iBAAS,cAAc,CAAC,MAAM,EAAE;IAC9B,IAAI,EAAE,iBAAiB,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,oBAAoB,CAAC;CAC9B,GAAG,IAAI,CAcP;AAkBD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;aAgBrB,IAAI;CASd,CAAC;AAyEF,eAAO,MAAM,iCAAiC,QAAuB,CAAC;AACtE,MAAM,MAAM,qBAAqB,GAAG;IAAE,aAAa,CAAC,EAAE,MAAM,CAAC;IAAC,aAAa,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAwBvF,wBAAgB,8BAA8B,CAAC,GAAG,EAAE,OAAO,GAAG;IAC5D,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;IAC7C,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB,CA4BA;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,iBAAiB,EAAE,MAAM,CAAC;IAC1B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,sBAAsB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,CAAC;CAChE,GAAG;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAoBrC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;CACxB;AAED,wBAAgB,oBAAoB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,aAAa,CAkBlE;AAED,wBAAgB,cAAc,CAC5B,QAAQ,EAAE;IACR,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GAAG,IAAI,GAAG,SAAS,EACpB,OAAO,EAAE;IACP,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB,GACA;IACD,gBAAgB,EAAE,aAAa,CAAC;IAChC,eAAe,EAAE,aAAa,CAAC;IAC/B,YAAY,EAAE,OAAO,CAAC;IACtB,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,OAAO,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,YAAY,EAAE,OAAO,CAAC;CACvB,CAyBA;AAgwGD;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAU1F;;;;;;;;AA2GD,wBA8FG"}