nexus-prime 0.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.
- package/README.md +253 -0
- package/dist/agents/adapters/mcp.d.ts +21 -0
- package/dist/agents/adapters/mcp.d.ts.map +1 -0
- package/dist/agents/adapters/mcp.js +447 -0
- package/dist/agents/adapters/mcp.js.map +1 -0
- package/dist/agents/adapters.d.ts +57 -0
- package/dist/agents/adapters.d.ts.map +1 -0
- package/dist/agents/adapters.js +151 -0
- package/dist/agents/adapters.js.map +1 -0
- package/dist/agents/coordinator.d.ts +75 -0
- package/dist/agents/coordinator.d.ts.map +1 -0
- package/dist/agents/coordinator.js +339 -0
- package/dist/agents/coordinator.js.map +1 -0
- package/dist/agents/core/types.d.ts +157 -0
- package/dist/agents/core/types.d.ts.map +1 -0
- package/dist/agents/core/types.js +5 -0
- package/dist/agents/core/types.js.map +1 -0
- package/dist/agents/learner.d.ts +25 -0
- package/dist/agents/learner.d.ts.map +1 -0
- package/dist/agents/learner.js +88 -0
- package/dist/agents/learner.js.map +1 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +237 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +74 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +73 -0
- package/dist/config.js.map +1 -0
- package/dist/core/evolution.d.ts +122 -0
- package/dist/core/evolution.d.ts.map +1 -0
- package/dist/core/evolution.js +319 -0
- package/dist/core/evolution.js.map +1 -0
- package/dist/core/memory.d.ts +96 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +304 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/optimize.d.ts +100 -0
- package/dist/core/optimize.d.ts.map +1 -0
- package/dist/core/optimize.js +263 -0
- package/dist/core/optimize.js.map +1 -0
- package/dist/core/types.d.ts +155 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/core/wave.d.ts +55 -0
- package/dist/core/wave.d.ts.map +1 -0
- package/dist/core/wave.js +119 -0
- package/dist/core/wave.js.map +1 -0
- package/dist/engines/benchmark.d.ts +76 -0
- package/dist/engines/benchmark.d.ts.map +1 -0
- package/dist/engines/benchmark.js +167 -0
- package/dist/engines/benchmark.js.map +1 -0
- package/dist/engines/cache-manager.d.ts +75 -0
- package/dist/engines/cache-manager.d.ts.map +1 -0
- package/dist/engines/cache-manager.js +200 -0
- package/dist/engines/cache-manager.js.map +1 -0
- package/dist/engines/context.d.ts +50 -0
- package/dist/engines/context.d.ts.map +1 -0
- package/dist/engines/context.js +99 -0
- package/dist/engines/context.js.map +1 -0
- package/dist/engines/embedder.d.ts +55 -0
- package/dist/engines/embedder.d.ts.map +1 -0
- package/dist/engines/embedder.js +223 -0
- package/dist/engines/embedder.js.map +1 -0
- package/dist/engines/guardrails-bridge.d.ts +64 -0
- package/dist/engines/guardrails-bridge.d.ts.map +1 -0
- package/dist/engines/guardrails-bridge.js +251 -0
- package/dist/engines/guardrails-bridge.js.map +1 -0
- package/dist/engines/index.d.ts +14 -0
- package/dist/engines/index.d.ts.map +1 -0
- package/dist/engines/index.js +14 -0
- package/dist/engines/index.js.map +1 -0
- package/dist/engines/memory.d.ts +76 -0
- package/dist/engines/memory.d.ts.map +1 -0
- package/dist/engines/memory.js +431 -0
- package/dist/engines/memory.js.map +1 -0
- package/dist/engines/meta-learner.d.ts +87 -0
- package/dist/engines/meta-learner.d.ts.map +1 -0
- package/dist/engines/meta-learner.js +214 -0
- package/dist/engines/meta-learner.js.map +1 -0
- package/dist/engines/orchestrator.d.ts +69 -0
- package/dist/engines/orchestrator.d.ts.map +1 -0
- package/dist/engines/orchestrator.js +175 -0
- package/dist/engines/orchestrator.js.map +1 -0
- package/dist/engines/pod-network.d.ts +31 -0
- package/dist/engines/pod-network.d.ts.map +1 -0
- package/dist/engines/pod-network.js +108 -0
- package/dist/engines/pod-network.js.map +1 -0
- package/dist/engines/token-optimizer.d.ts +53 -0
- package/dist/engines/token-optimizer.d.ts.map +1 -0
- package/dist/engines/token-optimizer.js +115 -0
- package/dist/engines/token-optimizer.js.map +1 -0
- package/dist/engines/token-supremacy.d.ts +86 -0
- package/dist/engines/token-supremacy.d.ts.map +1 -0
- package/dist/engines/token-supremacy.js +403 -0
- package/dist/engines/token-supremacy.js.map +1 -0
- package/dist/index.d.ts +99 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +302 -0
- package/dist/index.js.map +1 -0
- package/dist/nexus-prime.d.ts +15 -0
- package/dist/nexus-prime.d.ts.map +1 -0
- package/dist/nexus-prime.js +15 -0
- package/dist/nexus-prime.js.map +1 -0
- package/dist/phantom/index.d.ts +135 -0
- package/dist/phantom/index.d.ts.map +1 -0
- package/dist/phantom/index.js +286 -0
- package/dist/phantom/index.js.map +1 -0
- package/dist/phantom/merge-oracle.d.ts +35 -0
- package/dist/phantom/merge-oracle.d.ts.map +1 -0
- package/dist/phantom/merge-oracle.js +189 -0
- package/dist/phantom/merge-oracle.js.map +1 -0
- package/dist/phantom/phase4-orchestrator.d.ts +14 -0
- package/dist/phantom/phase4-orchestrator.d.ts.map +1 -0
- package/dist/phantom/phase4-orchestrator.js +488 -0
- package/dist/phantom/phase4-orchestrator.js.map +1 -0
- package/dist/verify-guardrails.d.ts +2 -0
- package/dist/verify-guardrails.d.ts.map +1 -0
- package/dist/verify-guardrails.js +48 -0
- package/dist/verify-guardrails.js.map +1 -0
- package/dist/verify-pod-sync.d.ts +2 -0
- package/dist/verify-pod-sync.d.ts.map +1 -0
- package/dist/verify-pod-sync.js +41 -0
- package/dist/verify-pod-sync.js.map +1 -0
- package/dist/verify-substrate.d.ts +2 -0
- package/dist/verify-substrate.d.ts.map +1 -0
- package/dist/verify-substrate.js +41 -0
- package/dist/verify-substrate.js.map +1 -0
- package/dist/verify-token-scoring.d.ts +2 -0
- package/dist/verify-token-scoring.d.ts.map +1 -0
- package/dist/verify-token-scoring.js +37 -0
- package/dist/verify-token-scoring.js.map +1 -0
- package/package.json +80 -0
package/README.md
ADDED
|
@@ -0,0 +1,253 @@
|
|
|
1
|
+
# 🧬 Nexus Prime
|
|
2
|
+
|
|
3
|
+
**The AI meta-framework that makes agents smarter about themselves.**
|
|
4
|
+
|
|
5
|
+
Nexus Prime is an MCP server that gives AI coding agents cross-session memory, token optimization, parallel sub-agent orchestration, and machine-checked guardrails — running as a background process that any agent can call as native tools.
|
|
6
|
+
|
|
7
|
+
[](LICENSE)
|
|
8
|
+
[](https://nodejs.org)
|
|
9
|
+
[](https://typescriptlang.org)
|
|
10
|
+
[](https://www.npmjs.com/package/nexus-prime)
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## The Super Intellect Stack
|
|
15
|
+
|
|
16
|
+
Nexus Prime is the **runtime layer** in a 4-project ecosystem:
|
|
17
|
+
|
|
18
|
+
```
|
|
19
|
+
┌─────────────────────────────────────────────────┐
|
|
20
|
+
│ Phantom (PM) │
|
|
21
|
+
│ "What to build" — PRDs, releases, docs │
|
|
22
|
+
│ github.com/sir-ad/phantom │
|
|
23
|
+
├─────────────────────────────────────────────────┤
|
|
24
|
+
│ MindKit (Skills) │
|
|
25
|
+
│ "How to think" — 22 skills, guardrails, routing │
|
|
26
|
+
│ github.com/sir-ad/mindkit │
|
|
27
|
+
├─────────────────────────────────────────────────┤
|
|
28
|
+
│ Nexus Prime (OS) ← YOU ARE HERE │
|
|
29
|
+
│ "How to run" — memory, tokens, workers, POD │
|
|
30
|
+
│ github.com/sir-ad/nexus-prime │
|
|
31
|
+
├─────────────────────────────────────────────────┤
|
|
32
|
+
│ Grain (Language) │
|
|
33
|
+
│ "How to speak" — 10 universal AI primitives │
|
|
34
|
+
│ github.com/sir-ad/grain │
|
|
35
|
+
└─────────────────────────────────────────────────┘
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
## Why?
|
|
41
|
+
|
|
42
|
+
Every AI coding session starts cold. The agent re-reads the same files, re-discovers the same patterns, makes the same mistakes. Nexus Prime fixes this:
|
|
43
|
+
|
|
44
|
+
- **Memory persists between sessions** — findings survive restarts
|
|
45
|
+
- **Token usage is optimized** — agents read only what they need (50-90% savings)
|
|
46
|
+
- **Parallel sub-agents** explore multiple solutions simultaneously via git worktrees
|
|
47
|
+
- **Guardrails prevent mistakes** before code is written
|
|
48
|
+
- **Self-evolution** — learns from past sessions and adapts
|
|
49
|
+
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
## Architecture
|
|
53
|
+
|
|
54
|
+
```
|
|
55
|
+
┌─────────────────────────────────────────────────────┐
|
|
56
|
+
│ AI Agent (Claude / Gemini / GPT) │
|
|
57
|
+
│ │
|
|
58
|
+
│ Session Start During Work Shutdown │
|
|
59
|
+
│ nexus_recall_memory nexus_store_memory store │
|
|
60
|
+
│ nexus_memory_stats nexus_optimize_tokens summary │
|
|
61
|
+
│ nexus_mindkit_check │
|
|
62
|
+
│ nexus_ghost_pass │
|
|
63
|
+
│ nexus_spawn_workers │
|
|
64
|
+
│ nexus_audit_evolution │
|
|
65
|
+
└────────────────────────┬────────────────────────────┘
|
|
66
|
+
│ MCP (stdio)
|
|
67
|
+
┌────────────────────────▼────────────────────────────┐
|
|
68
|
+
│ NEXUS PRIME MCP SERVER │
|
|
69
|
+
│ │
|
|
70
|
+
│ MemoryEngine TokenSupremacyEngine │
|
|
71
|
+
│ ├─ Prefrontal (7) ├─ Content-Aware Scoring │
|
|
72
|
+
│ ├─ Hippocampus (200) ├─ BudgetAllocator │
|
|
73
|
+
│ └─ Cortex (∞, SQLite) └─ DifferentialContext │
|
|
74
|
+
│ │
|
|
75
|
+
│ PhantomWorkers GuardrailEngine │
|
|
76
|
+
│ ├─ GhostPass ├─ TokenBudget │
|
|
77
|
+
│ ├─ PhantomWorker ├─ DestructiveGuard │
|
|
78
|
+
│ ├─ MergeOracle ├─ MindKit GitHub Sync │
|
|
79
|
+
│ └─ POD Network └─ MemoryFirst │
|
|
80
|
+
│ │
|
|
81
|
+
│ HyperTuning AgentLearner │
|
|
82
|
+
│ ├─ Adaptive Budget ├─ SQL Pattern Detection │
|
|
83
|
+
│ └─ Complexity Signals └─ Evolution Candidates │
|
|
84
|
+
│ │
|
|
85
|
+
│ Embedder (TF-IDF 128-dim + optional OpenAI API) │
|
|
86
|
+
│ SessionTelemetry (📡 footer on every response) │
|
|
87
|
+
└─────────────────────────────────────────────────────┘
|
|
88
|
+
│
|
|
89
|
+
▼
|
|
90
|
+
~/.nexus-prime/memory.db (SQLite, survives restarts)
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## Quick Start
|
|
96
|
+
|
|
97
|
+
```bash
|
|
98
|
+
# Install from npm
|
|
99
|
+
npm install -g nexus-prime
|
|
100
|
+
|
|
101
|
+
# Or clone and build
|
|
102
|
+
git clone https://github.com/sir-ad/nexus-prime
|
|
103
|
+
cd nexus-prime
|
|
104
|
+
npm install
|
|
105
|
+
npm run build
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
### Wire into your AI agent
|
|
109
|
+
|
|
110
|
+
Add to your MCP config (AntiGravity, Claude Desktop, etc.):
|
|
111
|
+
|
|
112
|
+
```json
|
|
113
|
+
{
|
|
114
|
+
"mcpServers": {
|
|
115
|
+
"nexus-prime": {
|
|
116
|
+
"command": "node",
|
|
117
|
+
"args": ["/path/to/nexus-prime/dist/cli.js", "mcp"]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
---
|
|
124
|
+
|
|
125
|
+
## The 8 MCP Tools
|
|
126
|
+
|
|
127
|
+
### Memory
|
|
128
|
+
|
|
129
|
+
| Tool | When | What |
|
|
130
|
+
|------|------|------|
|
|
131
|
+
| `nexus_store_memory` | After discoveries | Store findings, bugs, decisions. Priority 0-1. |
|
|
132
|
+
| `nexus_recall_memory` | Session start + mid-session | Semantic recall. Top-k memories matching query. |
|
|
133
|
+
| `nexus_memory_stats` | Session start | Tier counts, top tags, Zettelkasten link stats. |
|
|
134
|
+
|
|
135
|
+
### Intelligence
|
|
136
|
+
|
|
137
|
+
| Tool | When | What |
|
|
138
|
+
|------|------|------|
|
|
139
|
+
| `nexus_optimize_tokens` | Before reading 3+ files | Pre-flight reading plan. 50-90% token savings. |
|
|
140
|
+
| `nexus_ghost_pass` | Before modifying 3+ files | Risk analysis + worker approach suggestions. |
|
|
141
|
+
| `nexus_mindkit_check` | Before destructive ops | Guardrail check. PASS/FAIL with score 0-100. |
|
|
142
|
+
|
|
143
|
+
### Parallel Work
|
|
144
|
+
|
|
145
|
+
| Tool | When | What |
|
|
146
|
+
|------|------|------|
|
|
147
|
+
| `nexus_spawn_workers` | Complex multi-file refactors | Phantom Workers in isolated git worktrees. |
|
|
148
|
+
| `nexus_audit_evolution` | Sprint boundaries / post-bug | Find recurring patterns, file hotspots. |
|
|
149
|
+
|
|
150
|
+
---
|
|
151
|
+
|
|
152
|
+
## Memory System
|
|
153
|
+
|
|
154
|
+
Three-tier architecture modelled on human memory:
|
|
155
|
+
|
|
156
|
+
| Tier | Size | Backed by | Purpose |
|
|
157
|
+
|------|------|-----------|---------:|
|
|
158
|
+
| **Prefrontal** | 7 items | RAM | Active working set |
|
|
159
|
+
| **Hippocampus** | 200 items | RAM | Recent session context |
|
|
160
|
+
| **Cortex** | Unlimited | SQLite | Long-term persistence |
|
|
161
|
+
|
|
162
|
+
**Recall** uses hybrid scoring: TF-IDF vectors (128-dim) + priority + recency + access count.
|
|
163
|
+
|
|
164
|
+
---
|
|
165
|
+
|
|
166
|
+
## Phantom Workers
|
|
167
|
+
|
|
168
|
+
Parallel sub-agent framework using real git worktrees:
|
|
169
|
+
|
|
170
|
+
```
|
|
171
|
+
GhostPass (read-only analysis)
|
|
172
|
+
→ N PhantomWorkers (parallel, isolated git worktrees)
|
|
173
|
+
→ POD Network (asynchronous learning exchange)
|
|
174
|
+
→ MergeOracle (Byzantine vote, confidence-weighted merge)
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
Each worker gets an isolated copy of the repo. Workers broadcast findings via the **POD Network**. The `MergeOracle` evaluates outcomes by confidence score.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
## Session Telemetry
|
|
182
|
+
|
|
183
|
+
Every MCP response includes a telemetry footer:
|
|
184
|
+
|
|
185
|
+
```
|
|
186
|
+
─── 📡 Nexus Prime (12s) ───
|
|
187
|
+
3 calls │ 20.3k tokens saved │ 2 stored │ 5 recalled │ 59 Zettel links
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## Guardrails (MindKit)
|
|
193
|
+
|
|
194
|
+
6 machine-checked rules + external rules synced from [MindKit](https://github.com/sir-ad/mindkit):
|
|
195
|
+
|
|
196
|
+
| Rule | Trigger | Action |
|
|
197
|
+
|------|---------|--------|
|
|
198
|
+
| `TOKEN_BUDGET` | Context > 100k tokens | 🚫 Block |
|
|
199
|
+
| `TOKEN_WARN` | Context > 70k tokens | ⚠️ Warn |
|
|
200
|
+
| `DESTRUCTIVE_GUARD` | `isDestructive: true` | 🚫 Block |
|
|
201
|
+
| `BULK_FILE_GUARD` | > 10 files modified | ⚠️ Warn |
|
|
202
|
+
| `NO_PROD_WRITES` | `/etc`, `/usr`, `/bin` | 🚫 Block |
|
|
203
|
+
| `MEMORY_FIRST` | "research" / "look up" | ℹ️ Remind |
|
|
204
|
+
|
|
205
|
+
---
|
|
206
|
+
|
|
207
|
+
## Project Structure
|
|
208
|
+
|
|
209
|
+
```
|
|
210
|
+
nexus-prime/
|
|
211
|
+
├── src/
|
|
212
|
+
│ ├── index.ts # NexusPrime main class
|
|
213
|
+
│ ├── cli.ts # CLI entry (node dist/cli.js mcp)
|
|
214
|
+
│ ├── agents/
|
|
215
|
+
│ │ ├── adapters/mcp.ts # MCP server, 8 tools + telemetry
|
|
216
|
+
│ │ ├── coordinator.ts # Worker dispatch orchestration
|
|
217
|
+
│ │ ├── orchestrator.ts # Context-aware agent runner
|
|
218
|
+
│ │ └── learner.ts # SQL-based evolution detection
|
|
219
|
+
│ ├── engines/
|
|
220
|
+
│ │ ├── memory.ts # Three-tier memory + queryByTags
|
|
221
|
+
│ │ ├── embedder.ts # TF-IDF + optional OpenAI embeddings
|
|
222
|
+
│ │ ├── token-supremacy.ts # Content-aware token optimization
|
|
223
|
+
│ │ ├── guardrails-bridge.ts # GuardrailEngine + MindKit sync
|
|
224
|
+
│ │ └── meta-learner.ts # HyperTuning adaptive parameters
|
|
225
|
+
│ └── phantom/
|
|
226
|
+
│ ├── index.ts # GhostPass, PhantomWorker, MergeOracle
|
|
227
|
+
│ └── phase4-orchestrator.ts # Self-built phase orchestrator
|
|
228
|
+
├── packages/
|
|
229
|
+
│ └── mindkit/ # Standalone npm package
|
|
230
|
+
├── test/
|
|
231
|
+
│ ├── phantom.test.ts # E2E Phantom Workers test
|
|
232
|
+
│ └── memory.test.ts # Semantic recall test
|
|
233
|
+
├── GEMINI.md # Session protocol for AI agents
|
|
234
|
+
├── AGENTS.md # Agent overview
|
|
235
|
+
└── NEXUS.md # Language specification
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
---
|
|
239
|
+
|
|
240
|
+
## Configuration
|
|
241
|
+
|
|
242
|
+
| Env Var | Default | Description |
|
|
243
|
+
|---------|---------|-------------|
|
|
244
|
+
| `NEXUS_EMBED_MODE` | `local` | `local` (TF-IDF) or `api` (OpenAI-compatible) |
|
|
245
|
+
| `NEXUS_EMBED_URL` | — | API endpoint when mode=api |
|
|
246
|
+
| `NEXUS_EMBED_KEY` | — | API key when mode=api |
|
|
247
|
+
| `NEXUS_EMBED_MODEL` | — | Model name when mode=api |
|
|
248
|
+
|
|
249
|
+
---
|
|
250
|
+
|
|
251
|
+
## License
|
|
252
|
+
|
|
253
|
+
MIT — [sir-ad](https://github.com/sir-ad)
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Adapter, NetworkMessage } from '../core/types.js';
|
|
2
|
+
import { NexusPrime } from '../../index.js';
|
|
3
|
+
export declare class MCPAdapter implements Adapter {
|
|
4
|
+
name: string;
|
|
5
|
+
type: "mcp";
|
|
6
|
+
connected: boolean;
|
|
7
|
+
agents: string[];
|
|
8
|
+
private server;
|
|
9
|
+
private nexusRef?;
|
|
10
|
+
private telemetry;
|
|
11
|
+
constructor();
|
|
12
|
+
setNexusRef(nexus: NexusPrime): void;
|
|
13
|
+
private setupToolHandlers;
|
|
14
|
+
private handleToolCall;
|
|
15
|
+
private scanSourceFiles;
|
|
16
|
+
connect(): Promise<void>;
|
|
17
|
+
disconnect(): Promise<void>;
|
|
18
|
+
send(_message: NetworkMessage): Promise<void>;
|
|
19
|
+
receive(_message: NetworkMessage): void;
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=mcp.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/agents/adapters/mcp.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AA6C5C,qBAAa,UAAW,YAAW,OAAO;IACtC,IAAI,SAAS;IACb,IAAI,EAAG,KAAK,CAAU;IACtB,SAAS,UAAS;IAClB,MAAM,EAAE,MAAM,EAAE,CAAM;IAEtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,QAAQ,CAAC,CAAa;IAC9B,OAAO,CAAC,SAAS,CAA0B;;IAU3C,WAAW,CAAC,KAAK,EAAE,UAAU;IAI7B,OAAO,CAAC,iBAAiB;YAqIX,cAAc;IA8R5B,OAAO,CAAC,eAAe;IAgBjB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAOxB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAM3B,IAAI,CAAC,QAAQ,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC;IACnD,OAAO,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI;CAC1C"}
|