velixar-mcp-server 0.2.4 → 1.2.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.
Files changed (104) hide show
  1. package/README.md +120 -64
  2. package/dist/api.d.ts +64 -0
  3. package/dist/api.d.ts.map +1 -0
  4. package/dist/api.js +405 -0
  5. package/dist/api.js.map +1 -0
  6. package/dist/errors.d.ts +19 -0
  7. package/dist/errors.d.ts.map +1 -0
  8. package/dist/errors.js +52 -0
  9. package/dist/errors.js.map +1 -0
  10. package/dist/justify.d.ts +9 -0
  11. package/dist/justify.d.ts.map +1 -0
  12. package/dist/justify.js +114 -0
  13. package/dist/justify.js.map +1 -0
  14. package/dist/prompts.d.ts +88 -0
  15. package/dist/prompts.d.ts.map +1 -0
  16. package/dist/prompts.js +693 -0
  17. package/dist/prompts.js.map +1 -0
  18. package/dist/resources.d.ts +25 -0
  19. package/dist/resources.d.ts.map +1 -0
  20. package/dist/resources.js +278 -0
  21. package/dist/resources.js.map +1 -0
  22. package/dist/server.d.ts +3 -0
  23. package/dist/server.d.ts.map +1 -0
  24. package/dist/server.js +392 -0
  25. package/dist/server.js.map +1 -0
  26. package/dist/simulation/personas.d.ts +41 -0
  27. package/dist/simulation/personas.d.ts.map +1 -0
  28. package/dist/simulation/personas.js +173 -0
  29. package/dist/simulation/personas.js.map +1 -0
  30. package/dist/simulation/report.d.ts +28 -0
  31. package/dist/simulation/report.d.ts.map +1 -0
  32. package/dist/simulation/report.js +105 -0
  33. package/dist/simulation/report.js.map +1 -0
  34. package/dist/simulation/runner.d.ts +63 -0
  35. package/dist/simulation/runner.d.ts.map +1 -0
  36. package/dist/simulation/runner.js +167 -0
  37. package/dist/simulation/runner.js.map +1 -0
  38. package/dist/temporal_merge.d.ts +70 -0
  39. package/dist/temporal_merge.d.ts.map +1 -0
  40. package/dist/temporal_merge.js +258 -0
  41. package/dist/temporal_merge.js.map +1 -0
  42. package/dist/tools/clairvoyance.d.ts +9 -0
  43. package/dist/tools/clairvoyance.d.ts.map +1 -0
  44. package/dist/tools/clairvoyance.js +321 -0
  45. package/dist/tools/clairvoyance.js.map +1 -0
  46. package/dist/tools/cognitive.d.ts +10 -0
  47. package/dist/tools/cognitive.d.ts.map +1 -0
  48. package/dist/tools/cognitive.js +462 -0
  49. package/dist/tools/cognitive.js.map +1 -0
  50. package/dist/tools/construction.d.ts +9 -0
  51. package/dist/tools/construction.d.ts.map +1 -0
  52. package/dist/tools/construction.js +350 -0
  53. package/dist/tools/construction.js.map +1 -0
  54. package/dist/tools/graph.d.ts +14 -0
  55. package/dist/tools/graph.d.ts.map +1 -0
  56. package/dist/tools/graph.js +263 -0
  57. package/dist/tools/graph.js.map +1 -0
  58. package/dist/tools/graph_sanitizer.d.ts +24 -0
  59. package/dist/tools/graph_sanitizer.d.ts.map +1 -0
  60. package/dist/tools/graph_sanitizer.js +79 -0
  61. package/dist/tools/graph_sanitizer.js.map +1 -0
  62. package/dist/tools/lifecycle.d.ts +9 -0
  63. package/dist/tools/lifecycle.d.ts.map +1 -0
  64. package/dist/tools/lifecycle.js +1091 -0
  65. package/dist/tools/lifecycle.js.map +1 -0
  66. package/dist/tools/livedata.d.ts +9 -0
  67. package/dist/tools/livedata.d.ts.map +1 -0
  68. package/dist/tools/livedata.js +222 -0
  69. package/dist/tools/livedata.js.map +1 -0
  70. package/dist/tools/memory.d.ts +10 -0
  71. package/dist/tools/memory.d.ts.map +1 -0
  72. package/dist/tools/memory.js +275 -0
  73. package/dist/tools/memory.js.map +1 -0
  74. package/dist/tools/recall.d.ts +9 -0
  75. package/dist/tools/recall.d.ts.map +1 -0
  76. package/dist/tools/recall.js +206 -0
  77. package/dist/tools/recall.js.map +1 -0
  78. package/dist/tools/retrieval.d.ts +9 -0
  79. package/dist/tools/retrieval.d.ts.map +1 -0
  80. package/dist/tools/retrieval.js +338 -0
  81. package/dist/tools/retrieval.js.map +1 -0
  82. package/dist/tools/system.d.ts +12 -0
  83. package/dist/tools/system.d.ts.map +1 -0
  84. package/dist/tools/system.js +228 -0
  85. package/dist/tools/system.js.map +1 -0
  86. package/dist/types.d.ts +234 -0
  87. package/dist/types.d.ts.map +1 -0
  88. package/dist/types.js +5 -0
  89. package/dist/types.js.map +1 -0
  90. package/dist/validate.d.ts +79 -0
  91. package/dist/validate.d.ts.map +1 -0
  92. package/dist/validate.js +174 -0
  93. package/dist/validate.js.map +1 -0
  94. package/dist/validate_retrieval.d.ts +33 -0
  95. package/dist/validate_retrieval.d.ts.map +1 -0
  96. package/dist/validate_retrieval.js +97 -0
  97. package/dist/validate_retrieval.js.map +1 -0
  98. package/package.json +22 -6
  99. package/server.json +2 -2
  100. package/.github/workflows/ci.yml +0 -18
  101. package/.mcpregistry_github_token +0 -1
  102. package/.mcpregistry_registry_token +0 -1
  103. package/src/index.js +0 -262
  104. package/tests/server.test.js +0 -193
package/README.md CHANGED
@@ -3,24 +3,31 @@
3
3
  [![npm](https://img.shields.io/npm/v/velixar-mcp-server)](https://www.npmjs.com/package/velixar-mcp-server)
4
4
  [![License](https://img.shields.io/github/license/VelixarAi/velixar-mcp-server)](LICENSE)
5
5
 
6
- MCP server that gives any AI assistant persistent memory via [Velixar](https://velixarai.com). Works with any [Model Context Protocol](https://modelcontextprotocol.io)-compatible client Claude Desktop, Kiro, Cursor, Windsurf, Continue, or any MCP-enabled tool.
6
+ The first cognitive memory server for AI assistants. Not a vector database wrapper a full reasoning layer that gives your AI persistent memory, a knowledge graph, identity awareness, contradiction detection, and belief tracking across every session.
7
7
 
8
- ## What It Does
8
+ Works with any [Model Context Protocol](https://modelcontextprotocol.io) client: Claude Desktop, Kiro, Cursor, Windsurf, Continue.dev, or custom hosts.
9
9
 
10
- Your AI assistant forgets everything between sessions. This server fixes that. It connects to Velixar's memory API and exposes 5 tools that let your assistant store, search, list, update, and delete memories that persist across conversations.
10
+ ## Why This Exists
11
11
 
12
- ## Setup
12
+ Every AI assistant starts from zero every conversation. Velixar fixes that — but not by just storing and retrieving text. The MCP server gives your assistant the ability to:
13
13
 
14
- 1. Get an API key at [velixarai.com/settings/api-keys](https://velixarai.com/settings/api-keys)
14
+ - **Orient itself** in a workspace with a single call — no manual context assembly
15
+ - **Track how beliefs evolve** over time and surface when they contradict
16
+ - **Build and traverse a knowledge graph** of entities and relationships it discovers
17
+ - **Maintain a persistent identity model** of who you are, what you prefer, and how you work
18
+ - **Distill sessions** into durable memories automatically, with deduplication
19
+ - **Import and export** your entire memory corpus for backup or migration
20
+
21
+ 40 tools. 5 live resources. 19 workflow prompts. One `npm install`.
22
+
23
+ ## Quick Start
15
24
 
16
- 2. Install:
17
25
  ```bash
18
26
  npm install -g velixar-mcp-server
19
27
  ```
20
28
 
21
- 3. Add to your MCP client config:
29
+ Get an API key at [velixarai.com/settings/api-keys](https://velixarai.com/settings/api-keys), then add to your MCP client:
22
30
 
23
- **Claude Desktop** (`~/Library/Application Support/Claude/claude_desktop_config.json`):
24
31
  ```json
25
32
  {
26
33
  "mcpServers": {
@@ -34,82 +41,131 @@ npm install -g velixar-mcp-server
34
41
  }
35
42
  ```
36
43
 
37
- **Kiro CLI** (`~/.kiro/settings/mcp.json`):
38
- ```json
39
- {
40
- "mcpServers": {
41
- "velixar": {
42
- "command": "velixar-mcp-server",
43
- "env": {
44
- "VELIXAR_API_KEY": "vlx_your_key_here"
45
- }
46
- }
47
- }
48
- }
49
- ```
44
+ Restart your assistant. Done.
50
45
 
51
- **Cursor** (`.cursor/mcp.json` in your project):
52
- ```json
53
- {
54
- "mcpServers": {
55
- "velixar": {
56
- "command": "velixar-mcp-server",
57
- "env": {
58
- "VELIXAR_API_KEY": "vlx_your_key_here"
59
- }
60
- }
61
- }
62
- }
63
- ```
46
+ ## Tool Surface
64
47
 
65
- 4. Restart your AI assistant
48
+ ### Memory
66
49
 
67
- ## Tools
50
+ | Tool | What it does |
51
+ |------|-------------|
52
+ | `velixar_store` | Store a memory with tags, tier, and type |
53
+ | `velixar_search` | Semantic search across all memories |
54
+ | `velixar_list` | Browse with pagination and filtering |
55
+ | `velixar_update` | Edit content or tags on an existing memory |
56
+ | `velixar_delete` | Remove a memory |
68
57
 
69
- | Tool | Description |
58
+ ### Cognitive
59
+
60
+ | Tool | What it does |
61
+ |------|-------------|
62
+ | `velixar_context` | Synthesized workspace briefing — orientation in one call |
63
+ | `velixar_identity` | Get, store, or update the user's profile, preferences, and expertise |
64
+ | `velixar_contradictions` | Surface conflicting facts or beliefs with resolution guidance |
65
+ | `velixar_timeline` | How a topic or belief evolved over time |
66
+ | `velixar_patterns` | Recurring problem/solution motifs across your history |
67
+ | `velixar_inspect` | Deep inspection of a specific memory with full provenance chain |
68
+ | `velixar_graph_traverse` | Walk entity relationships — "what connects to X?" |
69
+ | `velixar_distill` | Extract durable memories from session content with deduplication |
70
+
71
+ ### Lifecycle
72
+
73
+ | Tool | What it does |
74
+ |------|-------------|
75
+ | `velixar_session_save` | Save a session summary for later recall |
76
+ | `velixar_session_recall` | Restore context from a previous session |
77
+ | `velixar_batch_store` | Store up to 20 memories in one call |
78
+ | `velixar_batch_search` | Run up to 10 search queries simultaneously |
79
+ | `velixar_consolidate` | Merge related memories into a single durable memory |
80
+ | `velixar_retag` | Bulk update tags across memories |
81
+ | `velixar_export` | Export memories as JSON or Markdown, optionally with graph data |
82
+ | `velixar_import` | Bulk import from JSON, Markdown, Notion, or Obsidian exports |
83
+
84
+ ### System
85
+
86
+ | Tool | What it does |
70
87
  |------|-------------|
71
- | `velixar_store` | Store a memory with optional tags and tier |
72
- | `velixar_search` | Semantic search across memories |
73
- | `velixar_list` | Browse memories with pagination |
74
- | `velixar_update` | Edit an existing memory |
75
- | `velixar_delete` | Delete a memory by ID |
88
+ | `velixar_health` | Backend connectivity, latency, workspace status |
89
+ | `velixar_debug` | Cache state, circuit breaker, API timings |
90
+ | `velixar_capabilities` | Feature list, tool inventory, resource URIs |
91
+ | `velixar_security` | Get or set content scanning mode |
92
+
93
+ ## Live Resources
94
+
95
+ Resources are injected into your assistant's context automatically — no tool call needed.
76
96
 
77
- ## Memory Tiers
97
+ | Resource | What it provides |
98
+ |----------|-----------------|
99
+ | `velixar://system/constitution` | Behavioral rules and cognitive modes for the assistant |
100
+ | `velixar://identity/current` | Your persistent user profile |
101
+ | `velixar://memories/recent` | Most recent memories (compact) |
102
+ | `velixar://memories/relevant` | Contextually relevant memories based on current activity |
103
+ | `velixar://domains/{domain}/shadow_graph` | Knowledge graph view for a specific domain |
78
104
 
79
- | Tier | Name | Use Case |
80
- |------|------|----------|
81
- | 0 | Pinned | Critical facts, never expire |
82
- | 1 | Session | Current conversation context |
83
- | 2 | Semantic | Long-term memories (default) |
84
- | 3 | Organization | Shared team knowledge |
105
+ ## Workflow Prompts
106
+
107
+ 16 built-in prompts that guide multi-step reasoning workflows:
108
+
109
+ - **Orientation** recall prior reasoning, build project context, profile an entity, orient-then-narrow
110
+ - **Conflict** resolve contradictions, identify knowledge gaps
111
+ - **Continuity** — trace belief evolution, resume sessions, reconstruct decision paths
112
+ - **Lifecycle** — distill sessions, consolidate topic memory, retag recent memories
113
+ - **Identity** — summarize user identity, detect preference shifts, align response style
114
+ - **Enterprise** — evaluate enterprise fit for a domain
115
+
116
+ ## Workspace Isolation
117
+
118
+ Memories are scoped to workspaces. Your personal project never bleeds into work.
119
+
120
+ | Priority | Source | How |
121
+ |----------|--------|-----|
122
+ | 1 | `VELIXAR_WORKSPACE_ID` env var | Explicit |
123
+ | 2 | `.velixar.json` in project root | `{ "workspace_id": "my-project" }` |
124
+ | 3 | Git root directory name | Automatic |
125
+
126
+ ## Host Compatibility
127
+
128
+ | Host | Tools | Resources | Prompts |
129
+ |------|-------|-----------|---------|
130
+ | Kiro CLI | ✅ | ✅ | ✅ |
131
+ | Claude Desktop | ✅ | ✅ | ✅ |
132
+ | Cursor | ✅ | ⚠️ | — |
133
+ | Windsurf | ✅ | ⚠️ | — |
134
+ | Continue.dev | ✅ | ✅ | ✅ |
135
+
136
+ When a host doesn't support resources or prompts, the server degrades gracefully — all tools still work independently.
85
137
 
86
138
  ## Environment Variables
87
139
 
88
140
  | Variable | Required | Description |
89
141
  |----------|----------|-------------|
90
- | `VELIXAR_API_KEY` | Yes | Your Velixar API key |
142
+ | `VELIXAR_API_KEY` | Yes | Your API key (starts with `vlx_`) |
143
+ | `VELIXAR_WORKSPACE_ID` | No | Explicit workspace scope |
91
144
  | `VELIXAR_API_URL` | No | Custom API endpoint |
92
- | `VELIXAR_USER_ID` | No | User ID for memory scoping (default: `kiro-cli`) |
145
+ | `VELIXAR_USER_ID` | No | User ID for memory scoping |
146
+ | `VELIXAR_DEBUG` | No | `true` for verbose logging |
147
+ | `VELIXAR_LOG_FORMAT` | No | `json` for structured Datadog/CloudWatch logging |
148
+ | `VELIXAR_HEALTH_PORT` | No | Port for HTTP health check endpoint |
93
149
 
94
- ## Example
150
+ ## Reliability
95
151
 
96
- Once configured, your AI assistant can:
152
+ - Automatic retry with exponential backoff (3 attempts)
153
+ - Circuit breaker — opens after sustained failures, auto-recovers
154
+ - Cache fallback — serves stale data during outages rather than failing
155
+ - Structured logging compatible with Datadog and CloudWatch
97
156
 
98
- ```
99
- You: Remember that our production database is on us-east-1 and staging is us-west-2
100
- Assistant: ✓ Stored memory
157
+ ## SDKs
101
158
 
102
- You: Which region is our staging database in?
103
- Assistant: Based on my memory, your staging database is in us-west-2.
104
- ```
159
+ Use Velixar directly from code:
105
160
 
106
- Memories persist across sessions, restarts, and even different machines as long as they use the same API key.
161
+ - **JavaScript/TypeScript**: `npm install velixar`[docs](https://docs.velixarai.com/sdks/javascript)
162
+ - **Python**: `pip install velixar` — [docs](https://docs.velixarai.com/sdks/python)
107
163
 
108
- ## Related
164
+ ## CI/CD Integration
109
165
 
110
- - [velixar (JavaScript SDK)](https://github.com/VelixarAi/velixar-js) — Use Velixar directly in Node.js/TypeScript
111
- - [velixar (Python SDK)](https://github.com/VelixarAi/velixar-python) — Python client with LangChain/LlamaIndex integrations
112
- - [velixarai.com](https://velixarai.com)Dashboard, API keys, and docs
166
+ - **GitHub Actions**: [velixar-memory-sync](github-actions/velixar-memory-sync) — distill PR merges into memories
167
+ - **GitHub Actions**: [velixar-decision-capture](github-actions/velixar-decision-capture) — store issue resolutions as decisions
168
+ - **Webhook**: `POST /webhook/ci` generic CI event ingestion
113
169
 
114
170
  ## License
115
171
 
package/dist/api.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ import type { ApiConfig, ApiTiming, MemoryItem, ResponseMeta, VelixarError, VelixarResponse } from './types.js';
2
+ import type { ValidatedRawMemory } from './validate.js';
3
+ export declare function setClientRoots(roots: Array<{
4
+ uri: string;
5
+ name?: string;
6
+ }>): void;
7
+ export declare function validateWorkspace(config: ApiConfig): string | null;
8
+ export declare function loadConfig(): ApiConfig;
9
+ type LogLevel = 'debug' | 'info' | 'warn' | 'error';
10
+ export declare function log(level: LogLevel, msg: string, fields?: Record<string, unknown>): void;
11
+ export declare function getRateLimitInfo(): {
12
+ remaining: number;
13
+ total: number;
14
+ };
15
+ export declare function getTimings(): ApiTiming[];
16
+ export declare function getRetryStats(): {
17
+ retryCount: number;
18
+ fallbackCount: number;
19
+ };
20
+ export declare function getCircuitState(): {
21
+ failures: number;
22
+ open: boolean;
23
+ threshold: number;
24
+ reset_ms: number;
25
+ consecutive_opens: number;
26
+ };
27
+ export declare class ApiClient {
28
+ private config;
29
+ constructor(config: ApiConfig);
30
+ request<T>(path: string, options?: RequestInit & {
31
+ cacheable?: boolean;
32
+ }): Promise<T>;
33
+ get<T>(path: string, cacheable?: boolean): Promise<T>;
34
+ post<T>(path: string, body: unknown): Promise<T>;
35
+ patch<T>(path: string, body: unknown): Promise<T>;
36
+ delete<T>(path: string): Promise<T>;
37
+ requestValidated<T>(path: string, options: RequestInit & {
38
+ cacheable?: boolean;
39
+ }, validate: (raw: unknown, endpoint: string) => T): Promise<T>;
40
+ getValidated<T>(path: string, validate: (raw: unknown, endpoint: string) => T, cacheable?: boolean): Promise<T>;
41
+ postValidated<T>(path: string, body: unknown, validate: (raw: unknown, endpoint: string) => T): Promise<T>;
42
+ patchValidated<T>(path: string, body: unknown, validate: (raw: unknown, endpoint: string) => T): Promise<T>;
43
+ }
44
+ /** Raw memory shape from backend — use ValidatedRawMemory from validate.ts for new code */
45
+ interface RawMemory {
46
+ id: string;
47
+ content: string;
48
+ score?: number;
49
+ tier?: number;
50
+ type?: string | null;
51
+ tags?: string[];
52
+ salience?: number;
53
+ created_at?: string;
54
+ updated_at?: string;
55
+ previous_memory_id?: string | null;
56
+ timestamp?: string;
57
+ }
58
+ export declare function normalizeMemory(raw: RawMemory | ValidatedRawMemory): MemoryItem;
59
+ export declare function makeMeta(config: ApiConfig, overrides?: Partial<ResponseMeta>): ResponseMeta;
60
+ export declare function wrapResponse<T>(data: T, config: ApiConfig, overrides?: Partial<ResponseMeta>): VelixarResponse<T>;
61
+ export declare function makeError(code: string, message: string, retryable?: boolean): VelixarError;
62
+ export declare function isApiError(e: unknown): e is Error;
63
+ export {};
64
+ //# sourceMappingURL=api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAc,YAAY,EAAc,YAAY,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AACxI,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AAuCxD,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAAG,IAAI,CAQjF;AAED,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,GAAG,IAAI,CAmBlE;AAID,wBAAgB,UAAU,IAAI,SAAS,CA6BtC;AAID,KAAK,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAIpD,wBAAgB,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAOxF;AAeD,wBAAgB,gBAAgB;;;EAAyE;AAqBzG,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAExC;AAYD,wBAAgB,aAAa;;;EAE5B;AA8CD,wBAAgB,eAAe;;;;;;EAQ9B;AAID,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,SAAS;IAE/B,OAAO,CAAC,CAAC,EACb,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAO,GAClD,OAAO,CAAC,CAAC,CAAC;IA0HP,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,OAAO,CAAC,CAAC,CAAC;IAInD,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAOhD,KAAK,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC;IAOjD,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC;IAQnC,gBAAgB,CAAC,CAAC,EACtB,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,WAAW,GAAG;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAC9C,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;IAKP,YAAY,CAAC,CAAC,EAClB,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,EAC/C,SAAS,UAAQ,GAChB,OAAO,CAAC,CAAC,CAAC;IAIP,aAAa,CAAC,CAAC,EACnB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;IAIP,cAAc,CAAC,CAAC,EACpB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,QAAQ,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC,GAC9C,OAAO,CAAC,CAAC,CAAC;CAGd;AAKD,2FAA2F;AAC3F,UAAU,SAAS;IACjB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAaD,wBAAgB,eAAe,CAAC,GAAG,EAAE,SAAS,GAAG,kBAAkB,GAAG,UAAU,CAkB/E;AAED,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,YAAY,CAkB/F;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,GAAE,OAAO,CAAC,YAAY,CAAM,GAAG,eAAe,CAAC,CAAC,CAAC,CAErH;AAID,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,UAAQ,GAAG,YAAY,CAExF;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,KAAK,CAEjD"}