@synthaer/resonance 0.1.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 +19 -0
- package/dist/cli.d.ts +9 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +40 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +24 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +44 -0
- package/dist/config.js.map +1 -0
- package/dist/contracts.d.ts +4 -0
- package/dist/contracts.d.ts.map +1 -0
- package/dist/contracts.js +2 -0
- package/dist/contracts.js.map +1 -0
- package/dist/db/local.d.ts +21 -0
- package/dist/db/local.d.ts.map +1 -0
- package/dist/db/local.js +158 -0
- package/dist/db/local.js.map +1 -0
- package/dist/db-types.d.ts +14 -0
- package/dist/db-types.d.ts.map +1 -0
- package/dist/db-types.js +2 -0
- package/dist/db-types.js.map +1 -0
- package/dist/dikw-pipeline.d.ts +31 -0
- package/dist/dikw-pipeline.d.ts.map +1 -0
- package/dist/dikw-pipeline.js +130 -0
- package/dist/dikw-pipeline.js.map +1 -0
- package/dist/embedding-provider.d.ts +25 -0
- package/dist/embedding-provider.d.ts.map +1 -0
- package/dist/embedding-provider.js +62 -0
- package/dist/embedding-provider.js.map +1 -0
- package/dist/embeddings/local.d.ts +31 -0
- package/dist/embeddings/local.d.ts.map +1 -0
- package/dist/embeddings/local.js +72 -0
- package/dist/embeddings/local.js.map +1 -0
- package/dist/encryption.d.ts +22 -0
- package/dist/encryption.d.ts.map +1 -0
- package/dist/encryption.js +39 -0
- package/dist/encryption.js.map +1 -0
- package/dist/index.d.ts +22 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp-server.d.ts +362 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +722 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/pki.d.ts +160 -0
- package/dist/pki.d.ts.map +1 -0
- package/dist/pki.js +502 -0
- package/dist/pki.js.map +1 -0
- package/dist/ratification.d.ts +125 -0
- package/dist/ratification.d.ts.map +1 -0
- package/dist/ratification.js +315 -0
- package/dist/ratification.js.map +1 -0
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +119 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +33 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +132 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +11 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +297 -0
- package/dist/server.js.map +1 -0
- package/dist/store.d.ts +77 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +572 -0
- package/dist/store.js.map +1 -0
- package/dist/tools/cloud-gate.d.ts +72 -0
- package/dist/tools/cloud-gate.d.ts.map +1 -0
- package/dist/tools/cloud-gate.js +79 -0
- package/dist/tools/cloud-gate.js.map +1 -0
- package/dist/tools/experiences.d.ts +20 -0
- package/dist/tools/experiences.d.ts.map +1 -0
- package/dist/tools/experiences.js +135 -0
- package/dist/tools/experiences.js.map +1 -0
- package/dist/tools/knowledge.d.ts +37 -0
- package/dist/tools/knowledge.d.ts.map +1 -0
- package/dist/tools/knowledge.js +213 -0
- package/dist/tools/knowledge.js.map +1 -0
- package/dist/tools/sessions.d.ts +11 -0
- package/dist/tools/sessions.d.ts.map +1 -0
- package/dist/tools/sessions.js +66 -0
- package/dist/tools/sessions.js.map +1 -0
- package/dist/tools/trust.d.ts +18 -0
- package/dist/tools/trust.d.ts.map +1 -0
- package/dist/tools/trust.js +42 -0
- package/dist/tools/trust.js.map +1 -0
- package/dist/types.d.ts +75 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +16 -0
- package/dist/types.js.map +1 -0
- package/package.json +50 -0
package/dist/store.js
ADDED
|
@@ -0,0 +1,572 @@
|
|
|
1
|
+
import crypto from 'node:crypto';
|
|
2
|
+
import { deriveLocalKey, encryptContent, decryptContent } from './encryption.js';
|
|
3
|
+
import { signContent } from './pki.js';
|
|
4
|
+
/**
|
|
5
|
+
* Default knowledge limit when offline with no account info.
|
|
6
|
+
* The REAL limit comes from the cloud server based on:
|
|
7
|
+
* 1. The user's plan tier (base allocation)
|
|
8
|
+
* 2. Any purchased add-on packs (+1,000 per pack at $5/mo)
|
|
9
|
+
* 3. Current invoice items on their Stripe subscription
|
|
10
|
+
*
|
|
11
|
+
* When connected, the cloud enforces the exact limit.
|
|
12
|
+
* When offline, we use the last-known limit from the server,
|
|
13
|
+
* falling back to this conservative default.
|
|
14
|
+
*/
|
|
15
|
+
const DEFAULT_OFFLINE_LIMIT = 200;
|
|
16
|
+
function parseJsonb(value) {
|
|
17
|
+
if (typeof value === 'string') {
|
|
18
|
+
return JSON.parse(value);
|
|
19
|
+
}
|
|
20
|
+
return value;
|
|
21
|
+
}
|
|
22
|
+
function rowToKnowledge(row) {
|
|
23
|
+
return {
|
|
24
|
+
id: row.id,
|
|
25
|
+
content: row.content,
|
|
26
|
+
kind: row.kind,
|
|
27
|
+
dikwStage: row.dikw_stage,
|
|
28
|
+
strength: row.strength,
|
|
29
|
+
tags: parseJsonb(row.tags),
|
|
30
|
+
sourceCount: row.source_count,
|
|
31
|
+
contextCount: row.context_count,
|
|
32
|
+
projectId: row.project_id ?? undefined,
|
|
33
|
+
createdAt: row.created_at,
|
|
34
|
+
updatedAt: row.updated_at,
|
|
35
|
+
lastAccessedAt: row.last_accessed_at ?? undefined,
|
|
36
|
+
decayRate: row.decay_rate,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function rowToExperience(row) {
|
|
40
|
+
return {
|
|
41
|
+
id: row.id,
|
|
42
|
+
agentId: row.agent_id ?? undefined,
|
|
43
|
+
sessionId: row.session_id ?? undefined,
|
|
44
|
+
content: row.content,
|
|
45
|
+
kind: row.kind,
|
|
46
|
+
projectId: row.project_id ?? undefined,
|
|
47
|
+
relatedKnowledgeIds: parseJsonb(row.related_knowledge_ids),
|
|
48
|
+
createdAt: row.created_at,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
function rowToSession(row) {
|
|
52
|
+
return {
|
|
53
|
+
id: row.id,
|
|
54
|
+
agentId: row.agent_id ?? undefined,
|
|
55
|
+
projectId: row.project_id ?? undefined,
|
|
56
|
+
checkpoint: row.checkpoint ? parseJsonb(row.checkpoint) : undefined,
|
|
57
|
+
memory: parseJsonb(row.memory),
|
|
58
|
+
createdAt: row.created_at,
|
|
59
|
+
updatedAt: row.updated_at,
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
function rowToMaturationLog(row) {
|
|
63
|
+
return {
|
|
64
|
+
id: row.id,
|
|
65
|
+
knowledgeId: row.knowledge_id,
|
|
66
|
+
fromStage: row.from_stage,
|
|
67
|
+
toStage: row.to_stage,
|
|
68
|
+
reason: row.reason ?? '',
|
|
69
|
+
triggeredBy: row.triggered_by ?? 'auto',
|
|
70
|
+
createdAt: row.created_at,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
export class ResonanceStore {
|
|
74
|
+
db;
|
|
75
|
+
userId;
|
|
76
|
+
enforceMultiTenant;
|
|
77
|
+
authToken;
|
|
78
|
+
encryptionKey;
|
|
79
|
+
/** The user's plan tier — determines knowledge limits */
|
|
80
|
+
planTier = 'nascent';
|
|
81
|
+
/** The effective limit from the server (plan tier + add-on packs from invoice) */
|
|
82
|
+
serverProvidedLimit = null;
|
|
83
|
+
/** The highest effective limit ever seen — existing knowledge stays forever */
|
|
84
|
+
highWaterLimit = DEFAULT_OFFLINE_LIMIT;
|
|
85
|
+
/** Whether the subscription is currently active (cloud confirms this) */
|
|
86
|
+
subscriptionActive = true;
|
|
87
|
+
/** Local Ed25519 signing key for experiences and knowledge */
|
|
88
|
+
localSigningKey = null;
|
|
89
|
+
/** Fingerprint of the local signing key */
|
|
90
|
+
localFingerprint = null;
|
|
91
|
+
constructor(db, userId = 'system', enforceMultiTenant = true, authToken = null) {
|
|
92
|
+
this.db = db;
|
|
93
|
+
this.userId = userId;
|
|
94
|
+
this.enforceMultiTenant = enforceMultiTenant;
|
|
95
|
+
this.authToken = authToken;
|
|
96
|
+
this.encryptionKey = authToken ? deriveLocalKey(authToken) : null;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Set the account status from the cloud server.
|
|
100
|
+
* The server provides the REAL limit based on plan tier + add-on packs
|
|
101
|
+
* from the user's current invoice items. We cache it locally for
|
|
102
|
+
* offline use.
|
|
103
|
+
*
|
|
104
|
+
* @param tier - The plan tier name
|
|
105
|
+
* @param active - Whether the subscription is currently active
|
|
106
|
+
* @param effectiveLimit - The REAL limit from the server (tier base + add-on packs)
|
|
107
|
+
*/
|
|
108
|
+
setAccountStatus(tier, active, effectiveLimit) {
|
|
109
|
+
this.planTier = tier.toLowerCase();
|
|
110
|
+
this.subscriptionActive = active;
|
|
111
|
+
this.serverProvidedLimit = effectiveLimit;
|
|
112
|
+
// High water mark: existing knowledge stays accessible forever
|
|
113
|
+
if (effectiveLimit > this.highWaterLimit) {
|
|
114
|
+
this.highWaterLimit = effectiveLimit;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
/** Get the current knowledge limit — from server if available, fallback to offline default */
|
|
118
|
+
get knowledgeLimit() {
|
|
119
|
+
return this.serverProvidedLimit ?? DEFAULT_OFFLINE_LIMIT;
|
|
120
|
+
}
|
|
121
|
+
/** Whether this user can add new knowledge (requires active subscription) */
|
|
122
|
+
get canAddKnowledge() {
|
|
123
|
+
return this.subscriptionActive && this.encryptionKey !== null;
|
|
124
|
+
}
|
|
125
|
+
/** Whether this user can read existing knowledge (always yes — stays local forever) */
|
|
126
|
+
get canReadKnowledge() {
|
|
127
|
+
return this.encryptionKey !== null;
|
|
128
|
+
}
|
|
129
|
+
/** Set the local signing key for experience and knowledge signatures */
|
|
130
|
+
setSigningKey(privateKey, fingerprint) {
|
|
131
|
+
this.localSigningKey = privateKey;
|
|
132
|
+
this.localFingerprint = fingerprint;
|
|
133
|
+
}
|
|
134
|
+
forUser(userId) {
|
|
135
|
+
return new ResonanceStore(this.db, userId, this.enforceMultiTenant, this.authToken);
|
|
136
|
+
}
|
|
137
|
+
/** Update the auth token (and derived encryption key) at runtime. */
|
|
138
|
+
setAuthToken(token) {
|
|
139
|
+
this.authToken = token;
|
|
140
|
+
this.encryptionKey = token ? deriveLocalKey(token) : null;
|
|
141
|
+
}
|
|
142
|
+
/** Check whether knowledge operations are available (requires auth). */
|
|
143
|
+
get knowledgeEnabled() {
|
|
144
|
+
return this.encryptionKey !== null;
|
|
145
|
+
}
|
|
146
|
+
requireAuth() {
|
|
147
|
+
if (!this.encryptionKey) {
|
|
148
|
+
throw new Error('Sign in to Synthaer to store knowledge locally. Local experiences are always available.');
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
async getKnowledgeCount() {
|
|
152
|
+
await this.setUserContext();
|
|
153
|
+
const result = this.enforceMultiTenant
|
|
154
|
+
? await this.db.query(`SELECT COUNT(*) as count FROM knowledge WHERE (user_id = $1 OR user_id = 'system')`, [this.userId])
|
|
155
|
+
: await this.db.query(`SELECT COUNT(*) as count FROM knowledge`);
|
|
156
|
+
return Number(result.rows[0]?.count ?? 0);
|
|
157
|
+
}
|
|
158
|
+
async enforceKnowledgeLimit() {
|
|
159
|
+
// Lapsed subscription: knowledge stays but can't add more
|
|
160
|
+
if (!this.subscriptionActive) {
|
|
161
|
+
throw new Error('Your Synthaer subscription is inactive. ' +
|
|
162
|
+
'Existing knowledge remains accessible, but new knowledge cannot be added. ' +
|
|
163
|
+
'Experiences are always available. Reactivate your subscription to resume.');
|
|
164
|
+
}
|
|
165
|
+
const count = await this.getKnowledgeCount();
|
|
166
|
+
const limit = this.knowledgeLimit;
|
|
167
|
+
if (count >= limit) {
|
|
168
|
+
const tierName = this.planTier.charAt(0).toUpperCase() + this.planTier.slice(1);
|
|
169
|
+
throw new Error(`Knowledge limit reached (${count}/${limit} ratified items on ${tierName} tier). ` +
|
|
170
|
+
'Purchase additional Ratified Items or upgrade to a higher tier.');
|
|
171
|
+
}
|
|
172
|
+
}
|
|
173
|
+
decryptKnowledgeRow(item) {
|
|
174
|
+
if (!this.encryptionKey)
|
|
175
|
+
return item;
|
|
176
|
+
try {
|
|
177
|
+
return { ...item, content: decryptContent(item.content, this.encryptionKey) };
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// Content may be unencrypted (pre-migration data) — return as-is
|
|
181
|
+
return item;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async setUserContext() {
|
|
185
|
+
if (!this.enforceMultiTenant)
|
|
186
|
+
return;
|
|
187
|
+
try {
|
|
188
|
+
await this.db.query(`SELECT set_config('app.current_user_id', $1, false)`, [this.userId]);
|
|
189
|
+
}
|
|
190
|
+
catch {
|
|
191
|
+
// PGlite may not support set_config.
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async storeKnowledge(item) {
|
|
195
|
+
this.requireAuth();
|
|
196
|
+
await this.enforceKnowledgeLimit();
|
|
197
|
+
const id = crypto.randomUUID();
|
|
198
|
+
const now = new Date().toISOString();
|
|
199
|
+
// Encrypt content before persisting — key derived from auth token
|
|
200
|
+
const storedContent = encryptContent(item.content, this.encryptionKey);
|
|
201
|
+
await this.setUserContext();
|
|
202
|
+
await this.db.query(`
|
|
203
|
+
INSERT INTO knowledge (id, content, kind, dikw_stage, strength, tags, source_count, context_count, project_id, created_at, updated_at, last_accessed_at, decay_rate, user_id)
|
|
204
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14)
|
|
205
|
+
`, [
|
|
206
|
+
id,
|
|
207
|
+
storedContent,
|
|
208
|
+
item.kind,
|
|
209
|
+
item.dikwStage,
|
|
210
|
+
item.strength,
|
|
211
|
+
JSON.stringify(item.tags),
|
|
212
|
+
item.sourceCount,
|
|
213
|
+
item.contextCount,
|
|
214
|
+
item.projectId ?? null,
|
|
215
|
+
now,
|
|
216
|
+
now,
|
|
217
|
+
item.lastAccessedAt ?? null,
|
|
218
|
+
item.decayRate,
|
|
219
|
+
this.userId,
|
|
220
|
+
]);
|
|
221
|
+
return id;
|
|
222
|
+
}
|
|
223
|
+
async getKnowledge(id) {
|
|
224
|
+
this.requireAuth();
|
|
225
|
+
await this.setUserContext();
|
|
226
|
+
const result = this.enforceMultiTenant
|
|
227
|
+
? await this.db.query(`SELECT * FROM knowledge WHERE id = $1 AND (user_id = $2 OR user_id = 'system')`, [id, this.userId])
|
|
228
|
+
: await this.db.query(`SELECT * FROM knowledge WHERE id = $1`, [id]);
|
|
229
|
+
const row = result.rows[0];
|
|
230
|
+
return row ? this.decryptKnowledgeRow(rowToKnowledge(row)) : undefined;
|
|
231
|
+
}
|
|
232
|
+
async updateKnowledge(id, updates) {
|
|
233
|
+
this.requireAuth();
|
|
234
|
+
if (!this.subscriptionActive) {
|
|
235
|
+
throw new Error('Your subscription is inactive. Existing knowledge is read-only. ' +
|
|
236
|
+
'Experiences are always available. Reactivate to update knowledge.');
|
|
237
|
+
}
|
|
238
|
+
await this.setUserContext();
|
|
239
|
+
const setClauses = [];
|
|
240
|
+
const params = [];
|
|
241
|
+
let paramIndex = 0;
|
|
242
|
+
if (updates.content !== undefined) {
|
|
243
|
+
paramIndex++;
|
|
244
|
+
setClauses.push(`content = $${paramIndex}`);
|
|
245
|
+
// Encrypt content before persisting
|
|
246
|
+
params.push(encryptContent(updates.content, this.encryptionKey));
|
|
247
|
+
}
|
|
248
|
+
if (updates.kind !== undefined) {
|
|
249
|
+
paramIndex++;
|
|
250
|
+
setClauses.push(`kind = $${paramIndex}`);
|
|
251
|
+
params.push(updates.kind);
|
|
252
|
+
}
|
|
253
|
+
if (updates.dikwStage !== undefined) {
|
|
254
|
+
paramIndex++;
|
|
255
|
+
setClauses.push(`dikw_stage = $${paramIndex}`);
|
|
256
|
+
params.push(updates.dikwStage);
|
|
257
|
+
}
|
|
258
|
+
if (updates.strength !== undefined) {
|
|
259
|
+
paramIndex++;
|
|
260
|
+
setClauses.push(`strength = $${paramIndex}`);
|
|
261
|
+
params.push(updates.strength);
|
|
262
|
+
}
|
|
263
|
+
if (updates.tags !== undefined) {
|
|
264
|
+
paramIndex++;
|
|
265
|
+
setClauses.push(`tags = $${paramIndex}`);
|
|
266
|
+
params.push(JSON.stringify(updates.tags));
|
|
267
|
+
}
|
|
268
|
+
if (updates.sourceCount !== undefined) {
|
|
269
|
+
paramIndex++;
|
|
270
|
+
setClauses.push(`source_count = $${paramIndex}`);
|
|
271
|
+
params.push(updates.sourceCount);
|
|
272
|
+
}
|
|
273
|
+
if (updates.contextCount !== undefined) {
|
|
274
|
+
paramIndex++;
|
|
275
|
+
setClauses.push(`context_count = $${paramIndex}`);
|
|
276
|
+
params.push(updates.contextCount);
|
|
277
|
+
}
|
|
278
|
+
if (updates.projectId !== undefined) {
|
|
279
|
+
paramIndex++;
|
|
280
|
+
setClauses.push(`project_id = $${paramIndex}`);
|
|
281
|
+
params.push(updates.projectId ?? null);
|
|
282
|
+
}
|
|
283
|
+
if (updates.lastAccessedAt !== undefined) {
|
|
284
|
+
paramIndex++;
|
|
285
|
+
setClauses.push(`last_accessed_at = $${paramIndex}`);
|
|
286
|
+
params.push(updates.lastAccessedAt ?? null);
|
|
287
|
+
}
|
|
288
|
+
if (updates.decayRate !== undefined) {
|
|
289
|
+
paramIndex++;
|
|
290
|
+
setClauses.push(`decay_rate = $${paramIndex}`);
|
|
291
|
+
params.push(updates.decayRate);
|
|
292
|
+
}
|
|
293
|
+
paramIndex++;
|
|
294
|
+
setClauses.push(`updated_at = $${paramIndex}`);
|
|
295
|
+
params.push(new Date().toISOString());
|
|
296
|
+
paramIndex++;
|
|
297
|
+
const idParam = paramIndex;
|
|
298
|
+
params.push(id);
|
|
299
|
+
paramIndex++;
|
|
300
|
+
const userParam = paramIndex;
|
|
301
|
+
params.push(this.userId);
|
|
302
|
+
const sql = this.enforceMultiTenant
|
|
303
|
+
? `UPDATE knowledge SET ${setClauses.join(', ')} WHERE id = $${idParam} AND (user_id = $${userParam} OR user_id = 'system')`
|
|
304
|
+
: `UPDATE knowledge SET ${setClauses.join(', ')} WHERE id = $${idParam}`;
|
|
305
|
+
await this.db.query(sql, params);
|
|
306
|
+
}
|
|
307
|
+
async deleteKnowledge(id) {
|
|
308
|
+
this.requireAuth();
|
|
309
|
+
await this.setUserContext();
|
|
310
|
+
if (this.enforceMultiTenant) {
|
|
311
|
+
await this.db.query(`DELETE FROM knowledge WHERE id = $1 AND (user_id = $2 OR user_id = 'system')`, [id, this.userId]);
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
await this.db.query(`DELETE FROM knowledge WHERE id = $1`, [id]);
|
|
315
|
+
}
|
|
316
|
+
this.searchCache.delete(id);
|
|
317
|
+
}
|
|
318
|
+
async listKnowledge(options) {
|
|
319
|
+
this.requireAuth();
|
|
320
|
+
await this.setUserContext();
|
|
321
|
+
const clauses = [];
|
|
322
|
+
const params = [];
|
|
323
|
+
let paramIndex = 0;
|
|
324
|
+
if (this.enforceMultiTenant) {
|
|
325
|
+
paramIndex++;
|
|
326
|
+
clauses.push(`(user_id = $${paramIndex} OR user_id = 'system')`);
|
|
327
|
+
params.push(this.userId);
|
|
328
|
+
}
|
|
329
|
+
if (options?.kind !== undefined) {
|
|
330
|
+
paramIndex++;
|
|
331
|
+
clauses.push(`kind = $${paramIndex}`);
|
|
332
|
+
params.push(options.kind);
|
|
333
|
+
}
|
|
334
|
+
if (options?.projectId !== undefined) {
|
|
335
|
+
paramIndex++;
|
|
336
|
+
clauses.push(`project_id = $${paramIndex}`);
|
|
337
|
+
params.push(options.projectId);
|
|
338
|
+
}
|
|
339
|
+
let sql = 'SELECT * FROM knowledge';
|
|
340
|
+
if (clauses.length > 0) {
|
|
341
|
+
sql += ` WHERE ${clauses.join(' AND ')}`;
|
|
342
|
+
}
|
|
343
|
+
sql += ' ORDER BY updated_at DESC';
|
|
344
|
+
if (options?.limit !== undefined) {
|
|
345
|
+
paramIndex++;
|
|
346
|
+
sql += ` LIMIT $${paramIndex}`;
|
|
347
|
+
params.push(options.limit);
|
|
348
|
+
}
|
|
349
|
+
const result = await this.db.query(sql, params);
|
|
350
|
+
return result.rows.map(rowToKnowledge).map((item) => this.decryptKnowledgeRow(item));
|
|
351
|
+
}
|
|
352
|
+
async getAllKnowledge() {
|
|
353
|
+
return this.listKnowledge();
|
|
354
|
+
}
|
|
355
|
+
async recallKnowledge(query, options) {
|
|
356
|
+
this.requireAuth();
|
|
357
|
+
await this.setUserContext();
|
|
358
|
+
const clauses = ['content ILIKE $1'];
|
|
359
|
+
const params = [`%${query}%`];
|
|
360
|
+
let paramIndex = 1;
|
|
361
|
+
if (this.enforceMultiTenant) {
|
|
362
|
+
paramIndex++;
|
|
363
|
+
clauses.push(`(user_id = $${paramIndex} OR user_id = 'system')`);
|
|
364
|
+
params.push(this.userId);
|
|
365
|
+
}
|
|
366
|
+
if (options?.projectId) {
|
|
367
|
+
paramIndex++;
|
|
368
|
+
clauses.push(`project_id = $${paramIndex}`);
|
|
369
|
+
params.push(options.projectId);
|
|
370
|
+
}
|
|
371
|
+
if (options?.kinds && options.kinds.length > 0) {
|
|
372
|
+
paramIndex++;
|
|
373
|
+
clauses.push(`kind = ANY($${paramIndex}::int[])`);
|
|
374
|
+
params.push(options.kinds);
|
|
375
|
+
}
|
|
376
|
+
if (options?.minStrength !== undefined) {
|
|
377
|
+
paramIndex++;
|
|
378
|
+
clauses.push(`strength >= $${paramIndex}`);
|
|
379
|
+
params.push(options.minStrength);
|
|
380
|
+
}
|
|
381
|
+
paramIndex++;
|
|
382
|
+
params.push(options?.limit ?? 20);
|
|
383
|
+
const result = await this.db.query(`SELECT * FROM knowledge WHERE ${clauses.join(' AND ')} ORDER BY updated_at DESC LIMIT $${paramIndex}`, params);
|
|
384
|
+
return result.rows.map(rowToKnowledge).map((item) => this.decryptKnowledgeRow(item));
|
|
385
|
+
}
|
|
386
|
+
async storeExperience(exp) {
|
|
387
|
+
const id = crypto.randomUUID();
|
|
388
|
+
await this.setUserContext();
|
|
389
|
+
// Sign the experience locally — Human or Agent, both get a local signature
|
|
390
|
+
// The signer_type indicates who created it
|
|
391
|
+
const signerType = exp.agentId ? 'agent' : 'human';
|
|
392
|
+
let localSig = null;
|
|
393
|
+
let signerFingerprint = null;
|
|
394
|
+
if (this.localSigningKey) {
|
|
395
|
+
localSig = signContent(exp.content, this.localSigningKey, this.localFingerprint ?? 'local');
|
|
396
|
+
signerFingerprint = this.localFingerprint ?? null;
|
|
397
|
+
}
|
|
398
|
+
await this.db.query(`INSERT INTO experiences (id, agent_id, session_id, content, kind, project_id, related_knowledge_ids, local_signature, signer_type, signer_fingerprint, user_id)
|
|
399
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11)`, [
|
|
400
|
+
id,
|
|
401
|
+
exp.agentId ?? null,
|
|
402
|
+
exp.sessionId ?? null,
|
|
403
|
+
exp.content,
|
|
404
|
+
exp.kind,
|
|
405
|
+
exp.projectId ?? null,
|
|
406
|
+
JSON.stringify(exp.relatedKnowledgeIds),
|
|
407
|
+
localSig ? JSON.stringify(localSig) : null,
|
|
408
|
+
signerType,
|
|
409
|
+
signerFingerprint,
|
|
410
|
+
this.userId,
|
|
411
|
+
]);
|
|
412
|
+
return id;
|
|
413
|
+
}
|
|
414
|
+
async getExperience(id) {
|
|
415
|
+
await this.setUserContext();
|
|
416
|
+
const result = this.enforceMultiTenant
|
|
417
|
+
? await this.db.query(`SELECT * FROM experiences WHERE id = $1 AND (user_id = $2 OR user_id = 'system')`, [id, this.userId])
|
|
418
|
+
: await this.db.query(`SELECT * FROM experiences WHERE id = $1`, [id]);
|
|
419
|
+
const row = result.rows[0];
|
|
420
|
+
return row ? rowToExperience(row) : undefined;
|
|
421
|
+
}
|
|
422
|
+
async updateExperience(id, updates) {
|
|
423
|
+
await this.setUserContext();
|
|
424
|
+
const setClauses = [];
|
|
425
|
+
const params = [];
|
|
426
|
+
let paramIndex = 0;
|
|
427
|
+
if (updates.content !== undefined) {
|
|
428
|
+
paramIndex++;
|
|
429
|
+
setClauses.push(`content = $${paramIndex}`);
|
|
430
|
+
params.push(updates.content);
|
|
431
|
+
}
|
|
432
|
+
if (updates.kind !== undefined) {
|
|
433
|
+
paramIndex++;
|
|
434
|
+
setClauses.push(`kind = $${paramIndex}`);
|
|
435
|
+
params.push(updates.kind);
|
|
436
|
+
}
|
|
437
|
+
if (updates.agentId !== undefined) {
|
|
438
|
+
paramIndex++;
|
|
439
|
+
setClauses.push(`agent_id = $${paramIndex}`);
|
|
440
|
+
params.push(updates.agentId ?? null);
|
|
441
|
+
}
|
|
442
|
+
if (updates.sessionId !== undefined) {
|
|
443
|
+
paramIndex++;
|
|
444
|
+
setClauses.push(`session_id = $${paramIndex}`);
|
|
445
|
+
params.push(updates.sessionId ?? null);
|
|
446
|
+
}
|
|
447
|
+
if (updates.projectId !== undefined) {
|
|
448
|
+
paramIndex++;
|
|
449
|
+
setClauses.push(`project_id = $${paramIndex}`);
|
|
450
|
+
params.push(updates.projectId ?? null);
|
|
451
|
+
}
|
|
452
|
+
if (updates.relatedKnowledgeIds !== undefined) {
|
|
453
|
+
paramIndex++;
|
|
454
|
+
setClauses.push(`related_knowledge_ids = $${paramIndex}`);
|
|
455
|
+
params.push(JSON.stringify(updates.relatedKnowledgeIds));
|
|
456
|
+
}
|
|
457
|
+
if (setClauses.length === 0)
|
|
458
|
+
return;
|
|
459
|
+
paramIndex++;
|
|
460
|
+
const idParam = paramIndex;
|
|
461
|
+
params.push(id);
|
|
462
|
+
paramIndex++;
|
|
463
|
+
const userParam = paramIndex;
|
|
464
|
+
params.push(this.userId);
|
|
465
|
+
const sql = this.enforceMultiTenant
|
|
466
|
+
? `UPDATE experiences SET ${setClauses.join(', ')} WHERE id = $${idParam} AND (user_id = $${userParam} OR user_id = 'system')`
|
|
467
|
+
: `UPDATE experiences SET ${setClauses.join(', ')} WHERE id = $${idParam}`;
|
|
468
|
+
await this.db.query(sql, params);
|
|
469
|
+
}
|
|
470
|
+
async deleteExperience(id) {
|
|
471
|
+
await this.setUserContext();
|
|
472
|
+
if (this.enforceMultiTenant) {
|
|
473
|
+
await this.db.query(`DELETE FROM experiences WHERE id = $1 AND (user_id = $2 OR user_id = 'system')`, [id, this.userId]);
|
|
474
|
+
}
|
|
475
|
+
else {
|
|
476
|
+
await this.db.query(`DELETE FROM experiences WHERE id = $1`, [id]);
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
async getAllExperiences() {
|
|
480
|
+
await this.setUserContext();
|
|
481
|
+
const result = this.enforceMultiTenant
|
|
482
|
+
? await this.db.query(`SELECT * FROM experiences WHERE (user_id = $1 OR user_id = 'system') ORDER BY created_at DESC`, [this.userId])
|
|
483
|
+
: await this.db.query(`SELECT * FROM experiences ORDER BY created_at DESC`);
|
|
484
|
+
return result.rows.map(rowToExperience);
|
|
485
|
+
}
|
|
486
|
+
async recallExperiences(query, options) {
|
|
487
|
+
await this.setUserContext();
|
|
488
|
+
const clauses = ['content ILIKE $1'];
|
|
489
|
+
const params = [`%${query}%`];
|
|
490
|
+
let paramIndex = 1;
|
|
491
|
+
if (this.enforceMultiTenant) {
|
|
492
|
+
paramIndex++;
|
|
493
|
+
clauses.push(`(user_id = $${paramIndex} OR user_id = 'system')`);
|
|
494
|
+
params.push(this.userId);
|
|
495
|
+
}
|
|
496
|
+
if (options?.projectId) {
|
|
497
|
+
paramIndex++;
|
|
498
|
+
clauses.push(`project_id = $${paramIndex}`);
|
|
499
|
+
params.push(options.projectId);
|
|
500
|
+
}
|
|
501
|
+
if (options?.kinds && options.kinds.length > 0) {
|
|
502
|
+
paramIndex++;
|
|
503
|
+
clauses.push(`kind = ANY($${paramIndex}::int[])`);
|
|
504
|
+
params.push(options.kinds);
|
|
505
|
+
}
|
|
506
|
+
paramIndex++;
|
|
507
|
+
params.push(options?.limit ?? 20);
|
|
508
|
+
const result = await this.db.query(`SELECT * FROM experiences WHERE ${clauses.join(' AND ')} ORDER BY created_at DESC LIMIT $${paramIndex}`, params);
|
|
509
|
+
return result.rows.map(rowToExperience);
|
|
510
|
+
}
|
|
511
|
+
async sessionResume(agentId, projectId) {
|
|
512
|
+
await this.setUserContext();
|
|
513
|
+
const result = this.enforceMultiTenant
|
|
514
|
+
? await this.db.query(`SELECT * FROM sessions WHERE agent_id = $1 AND project_id = $2 AND user_id = $3 ORDER BY updated_at DESC LIMIT 1`, [agentId, projectId, this.userId])
|
|
515
|
+
: await this.db.query(`SELECT * FROM sessions WHERE agent_id = $1 AND project_id = $2 ORDER BY updated_at DESC LIMIT 1`, [agentId, projectId]);
|
|
516
|
+
const existing = result.rows[0];
|
|
517
|
+
if (existing)
|
|
518
|
+
return rowToSession(existing);
|
|
519
|
+
const id = crypto.randomUUID();
|
|
520
|
+
const now = new Date().toISOString();
|
|
521
|
+
await this.db.query(`INSERT INTO sessions (id, agent_id, project_id, checkpoint, memory, created_at, updated_at, user_id)
|
|
522
|
+
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`, [id, agentId, projectId, null, '[]', now, now, this.userId]);
|
|
523
|
+
return {
|
|
524
|
+
id,
|
|
525
|
+
agentId,
|
|
526
|
+
projectId,
|
|
527
|
+
memory: [],
|
|
528
|
+
createdAt: now,
|
|
529
|
+
updatedAt: now,
|
|
530
|
+
};
|
|
531
|
+
}
|
|
532
|
+
async memoryAppend(sessionId, item) {
|
|
533
|
+
await this.setUserContext();
|
|
534
|
+
const session = await this.sessionById(sessionId);
|
|
535
|
+
if (!session)
|
|
536
|
+
return;
|
|
537
|
+
const memory = [...session.memory, item];
|
|
538
|
+
await this.db.query(`UPDATE sessions SET memory = $1, updated_at = $2 WHERE id = $3`, [JSON.stringify(memory), new Date().toISOString(), sessionId]);
|
|
539
|
+
}
|
|
540
|
+
async memoryCheckpoint(sessionId) {
|
|
541
|
+
await this.setUserContext();
|
|
542
|
+
const session = await this.sessionById(sessionId);
|
|
543
|
+
if (!session)
|
|
544
|
+
return;
|
|
545
|
+
await this.db.query(`UPDATE sessions SET checkpoint = $1, updated_at = $2 WHERE id = $3`, [
|
|
546
|
+
JSON.stringify({ memoryLength: session.memory.length, capturedAt: new Date().toISOString() }),
|
|
547
|
+
new Date().toISOString(),
|
|
548
|
+
sessionId,
|
|
549
|
+
]);
|
|
550
|
+
}
|
|
551
|
+
async logMaturation(knowledgeId, fromStage, toStage, reason, triggeredBy) {
|
|
552
|
+
await this.setUserContext();
|
|
553
|
+
await this.db.query(`INSERT INTO maturation_log (knowledge_id, from_stage, to_stage, reason, triggered_by, user_id)
|
|
554
|
+
VALUES ($1, $2, $3, $4, $5, $6)`, [knowledgeId, fromStage, toStage, reason, triggeredBy, this.userId]);
|
|
555
|
+
}
|
|
556
|
+
async getMaturationLog(knowledgeId) {
|
|
557
|
+
await this.setUserContext();
|
|
558
|
+
const result = this.enforceMultiTenant
|
|
559
|
+
? await this.db.query(`SELECT * FROM maturation_log WHERE knowledge_id = $1 AND user_id = $2 ORDER BY created_at DESC`, [knowledgeId, this.userId])
|
|
560
|
+
: await this.db.query(`SELECT * FROM maturation_log WHERE knowledge_id = $1 ORDER BY created_at DESC`, [knowledgeId]);
|
|
561
|
+
return result.rows.map(rowToMaturationLog);
|
|
562
|
+
}
|
|
563
|
+
searchCache = new Map();
|
|
564
|
+
async sessionById(sessionId) {
|
|
565
|
+
const result = this.enforceMultiTenant
|
|
566
|
+
? await this.db.query(`SELECT * FROM sessions WHERE id = $1 AND user_id = $2`, [sessionId, this.userId])
|
|
567
|
+
: await this.db.query(`SELECT * FROM sessions WHERE id = $1`, [sessionId]);
|
|
568
|
+
const row = result.rows[0];
|
|
569
|
+
return row ? rowToSession(row) : undefined;
|
|
570
|
+
}
|
|
571
|
+
}
|
|
572
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjF,OAAO,EAAE,WAAW,EAAyB,MAAM,UAAU,CAAC;AAY9D;;;;;;;;;;GAUG;AACH,MAAM,qBAAqB,GAAG,GAAG,CAAC;AAiDlC,SAAS,UAAU,CAAI,KAAiB;IACtC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAM,CAAC;IAChC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,GAAiB;IACvC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAqB;QAC/B,SAAS,EAAE,GAAG,CAAC,UAAuB;QACtC,QAAQ,EAAE,GAAG,CAAC,QAAQ;QACtB,IAAI,EAAE,UAAU,CAAW,GAAG,CAAC,IAAI,CAAC;QACpC,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,YAAY,EAAE,GAAG,CAAC,aAAa;QAC/B,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,cAAc,EAAE,GAAG,CAAC,gBAAgB,IAAI,SAAS;QACjD,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,eAAe,CAAC,GAAkB;IACzC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QAClC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,mBAAmB,EAAE,UAAU,CAAW,GAAG,CAAC,qBAAqB,CAAC;QACpE,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,GAAe;IACnC,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,OAAO,EAAE,GAAG,CAAC,QAAQ,IAAI,SAAS;QAClC,SAAS,EAAE,GAAG,CAAC,UAAU,IAAI,SAAS;QACtC,UAAU,EAAE,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,UAAU,CAA0B,GAAG,CAAC,UAAoB,CAAC,CAAC,CAAC,CAAC,SAAS;QACtG,MAAM,EAAE,UAAU,CAAe,GAAG,CAAC,MAAM,CAAC;QAC5C,SAAS,EAAE,GAAG,CAAC,UAAU;QACzB,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CAAC,GAAqB;IAC/C,OAAO;QACL,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,WAAW,EAAE,GAAG,CAAC,YAAY;QAC7B,SAAS,EAAE,GAAG,CAAC,UAAuB;QACtC,OAAO,EAAE,GAAG,CAAC,QAAqB;QAClC,MAAM,EAAE,GAAG,CAAC,MAAM,IAAI,EAAE;QACxB,WAAW,EAAG,GAAG,CAAC,YAAiC,IAAI,MAAM;QAC7D,SAAS,EAAE,GAAG,CAAC,UAAU;KAC1B,CAAC;AACJ,CAAC;AAED,MAAM,OAAO,cAAc;IACjB,EAAE,CAAiB;IACnB,MAAM,CAAS;IACf,kBAAkB,CAAU;IAC5B,SAAS,CAAgB;IACzB,aAAa,CAAgB;IACrC,yDAAyD;IACjD,QAAQ,GAAW,SAAS,CAAC;IACrC,kFAAkF;IAC1E,mBAAmB,GAAkB,IAAI,CAAC;IAClD,+EAA+E;IACvE,cAAc,GAAW,qBAAqB,CAAC;IACvD,yEAAyE;IACjE,kBAAkB,GAAY,IAAI,CAAC;IAC3C,8DAA8D;IAC9D,eAAe,GAA4B,IAAI,CAAC;IAChD,2CAA2C;IAC3C,gBAAgB,GAAkB,IAAI,CAAC;IAEvC,YAAY,EAAkB,EAAE,MAAM,GAAG,QAAQ,EAAE,kBAAkB,GAAG,IAAI,EAAE,YAA2B,IAAI;QAC3G,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;QACrB,IAAI,CAAC,kBAAkB,GAAG,kBAAkB,CAAC;QAC7C,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpE,CAAC;IAED;;;;;;;;;OASG;IACH,gBAAgB,CAAC,IAAY,EAAE,MAAe,EAAE,cAAsB;QACpE,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QACnC,IAAI,CAAC,kBAAkB,GAAG,MAAM,CAAC;QACjC,IAAI,CAAC,mBAAmB,GAAG,cAAc,CAAC;QAE1C,+DAA+D;QAC/D,IAAI,cAAc,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;YACzC,IAAI,CAAC,cAAc,GAAG,cAAc,CAAC;QACvC,CAAC;IACH,CAAC;IAED,8FAA8F;IAC9F,IAAI,cAAc;QAChB,OAAO,IAAI,CAAC,mBAAmB,IAAI,qBAAqB,CAAC;IAC3D,CAAC;IAED,6EAA6E;IAC7E,IAAI,eAAe;QACjB,OAAO,IAAI,CAAC,kBAAkB,IAAI,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IAChE,CAAC;IAED,uFAAuF;IACvF,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACrC,CAAC;IAED,wEAAwE;IACxE,aAAa,CAAC,UAA4B,EAAE,WAAmB;QAC7D,IAAI,CAAC,eAAe,GAAG,UAAU,CAAC;QAClC,IAAI,CAAC,gBAAgB,GAAG,WAAW,CAAC;IACtC,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,OAAO,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,CAAC,kBAAkB,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IACtF,CAAC;IAED,qEAAqE;IACrE,YAAY,CAAC,KAAoB;QAC/B,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5D,CAAC;IAED,wEAAwE;IACxE,IAAI,gBAAgB;QAClB,OAAO,IAAI,CAAC,aAAa,KAAK,IAAI,CAAC;IACrC,CAAC;IAEO,WAAW;QACjB,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,CAAC;YACxB,MAAM,IAAI,KAAK,CAAC,yFAAyF,CAAC,CAAC;QAC7G,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,iBAAiB;QAC7B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,oFAAoF,EACpF,CAAC,IAAI,CAAC,MAAM,CAAC,CACd;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAA6B,yCAAyC,CAAC,CAAC;QAC/F,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,CAAC;IAC5C,CAAC;IAEO,KAAK,CAAC,qBAAqB;QACjC,0DAA0D;QAC1D,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,0CAA0C;gBAC1C,4EAA4E;gBAC5E,2EAA2E,CAC5E,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,iBAAiB,EAAE,CAAC;QAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc,CAAC;QAClC,IAAI,KAAK,IAAI,KAAK,EAAE,CAAC;YACnB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAChF,MAAM,IAAI,KAAK,CACb,4BAA4B,KAAK,IAAI,KAAK,sBAAsB,QAAQ,UAAU;gBAClF,iEAAiE,CAClE,CAAC;QACJ,CAAC;IACH,CAAC;IAEO,mBAAmB,CAAC,IAAmB;QAC7C,IAAI,CAAC,IAAI,CAAC,aAAa;YAAE,OAAO,IAAI,CAAC;QACrC,IAAI,CAAC;YACH,OAAO,EAAE,GAAG,IAAI,EAAE,OAAO,EAAE,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAa,CAAC,EAAE,CAAC;QAChF,CAAC;QAAC,MAAM,CAAC;YACP,iEAAiE;YACjE,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc;QAClB,IAAI,CAAC,IAAI,CAAC,kBAAkB;YAAE,OAAO;QACrC,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,qDAAqD,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5F,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,cAAc,CAAC,IAA2D;QAC9E,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC;QAEnC,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,kEAAkE;QAClE,MAAM,aAAa,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,aAAc,CAAC,CAAC;QACxE,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC;;;KAGnB,EAAE;YACD,EAAE;YACF,aAAa;YACb,IAAI,CAAC,IAAI;YACT,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,QAAQ;YACb,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;YACzB,IAAI,CAAC,WAAW;YAChB,IAAI,CAAC,YAAY;YACjB,IAAI,CAAC,SAAS,IAAI,IAAI;YACtB,GAAG;YACH,GAAG;YACH,IAAI,CAAC,cAAc,IAAI,IAAI;YAC3B,IAAI,CAAC,SAAS;YACd,IAAI,CAAC,MAAM;SACZ,CAAC,CAAC;QACH,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,EAAU;QAC3B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,gFAAgF,EAChF,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAClB;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAe,uCAAuC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACzE,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU,EAAE,OAA+B;QAC/D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,IAAI,CAAC,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC7B,MAAM,IAAI,KAAK,CACb,kEAAkE;gBAClE,mEAAmE,CACpE,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;YAC5C,oCAAoC;YACpC,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,aAAc,CAAC,CAAC,CAAC;QACpE,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;YACnC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAChC,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC5C,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,KAAK,SAAS,EAAE,CAAC;YACtC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,mBAAmB,UAAU,EAAE,CAAC,CAAC;YACjD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QACD,IAAI,OAAO,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;YACvC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,oBAAoB,UAAU,EAAE,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,cAAc,KAAK,SAAS,EAAE,CAAC;YACzC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,uBAAuB,UAAU,EAAE,CAAC,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,cAAc,IAAI,IAAI,CAAC,CAAC;QAC9C,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,UAAU,EAAE,CAAC;QACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC;QAEtC,UAAU,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,UAAU,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB;YACjC,CAAC,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,oBAAoB,SAAS,yBAAyB;YAC5H,CAAC,CAAC,wBAAwB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC;QAE3E,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,EAAU;QAC9B,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,8EAA8E,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QACzH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,qCAAqC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACnE,CAAC;QACD,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAA+D;QACjF,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,yBAAyB,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,IAAI,KAAK,SAAS,EAAE,CAAC;YAChC,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,EAAE,SAAS,KAAK,SAAS,EAAE,CAAC;YACrC,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QAED,IAAI,GAAG,GAAG,yBAAyB,CAAC;QACpC,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,GAAG,IAAI,UAAU,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC3C,CAAC;QACD,GAAG,IAAI,2BAA2B,CAAC;QAEnC,IAAI,OAAO,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YACjC,UAAU,EAAE,CAAC;YACb,GAAG,IAAI,WAAW,UAAU,EAAE,CAAC;YAC/B,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAe,GAAG,EAAE,MAAM,CAAC,CAAC;QAC9D,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,eAAe;QACnB,OAAO,IAAI,CAAC,aAAa,EAAE,CAAC;IAC9B,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,KAAa,EAAE,OAAuB;QAC1D,IAAI,CAAC,WAAW,EAAE,CAAC;QACnB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAa,CAAC,kBAAkB,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAc,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACzC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,yBAAyB,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,UAAU,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,IAAI,OAAO,EAAE,WAAW,KAAK,SAAS,EAAE,CAAC;YACvC,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,gBAAgB,UAAU,EAAE,CAAC,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;QACnC,CAAC;QAED,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAChC,iCAAiC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,UAAU,EAAE,EACtG,MAAM,CACP,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,CAAC;IAED,KAAK,CAAC,eAAe,CAAC,GAAyC;QAC7D,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAE5B,2EAA2E;QAC3E,2CAA2C;QAC3C,MAAM,UAAU,GAAG,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC;QACnD,IAAI,QAAQ,GAA4B,IAAI,CAAC;QAC7C,IAAI,iBAAiB,GAAkB,IAAI,CAAC;QAE5C,IAAI,IAAI,CAAC,eAAe,EAAE,CAAC;YACzB,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,IAAI,CAAC,gBAAgB,IAAI,OAAO,CAAC,CAAC;YAC5F,iBAAiB,GAAG,IAAI,CAAC,gBAAgB,IAAI,IAAI,CAAC;QACpD,CAAC;QAED,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB;6DACuD,EACvD;YACE,EAAE;YACF,GAAG,CAAC,OAAO,IAAI,IAAI;YACnB,GAAG,CAAC,SAAS,IAAI,IAAI;YACrB,GAAG,CAAC,OAAO;YACX,GAAG,CAAC,IAAI;YACR,GAAG,CAAC,SAAS,IAAI,IAAI;YACrB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,mBAAmB,CAAC;YACvC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI;YAC1C,UAAU;YACV,iBAAiB;YACjB,IAAI,CAAC,MAAM;SACZ,CACF,CAAC;QACF,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,EAAU;QAC5B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,kFAAkF,EAClF,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAClB;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAgB,yCAAyC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACxF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChD,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU,EAAE,OAAsD;QACvF,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,MAAM,MAAM,GAAc,EAAE,CAAC;QAC7B,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,cAAc,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,IAAI,OAAO,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;YAC/B,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,WAAW,UAAU,EAAE,CAAC,CAAC;YACzC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;YAClC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,eAAe,UAAU,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI,CAAC,CAAC;QACvC,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;YACpC,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC/C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,IAAI,OAAO,CAAC,mBAAmB,KAAK,SAAS,EAAE,CAAC;YAC9C,UAAU,EAAE,CAAC;YACb,UAAU,CAAC,IAAI,CAAC,4BAA4B,UAAU,EAAE,CAAC,CAAC;YAC1D,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC;QAC3D,CAAC;QAED,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO;QAEpC,UAAU,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,UAAU,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEhB,UAAU,EAAE,CAAC;QACb,MAAM,SAAS,GAAG,UAAU,CAAC;QAC7B,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEzB,MAAM,GAAG,GAAG,IAAI,CAAC,kBAAkB;YACjC,CAAC,CAAC,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,oBAAoB,SAAS,yBAAyB;YAC9H,CAAC,CAAC,0BAA0B,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,OAAO,EAAE,CAAC;QAE7E,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,EAAU;QAC/B,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,gFAAgF,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC3H,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,uCAAuC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACrE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,iBAAiB;QACrB,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,+FAA+F,EAC/F,CAAC,IAAI,CAAC,MAAM,CAAC,CACd;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAgB,oDAAoD,CAAC,CAAC;QAC7F,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,iBAAiB,CAAC,KAAa,EAAE,OAAuB;QAC5D,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAa,CAAC,kBAAkB,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAc,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC;QACzC,IAAI,UAAU,GAAG,CAAC,CAAC;QAEnB,IAAI,IAAI,CAAC,kBAAkB,EAAE,CAAC;YAC5B,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,yBAAyB,CAAC,CAAC;YACjE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3B,CAAC;QACD,IAAI,OAAO,EAAE,SAAS,EAAE,CAAC;YACvB,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,iBAAiB,UAAU,EAAE,CAAC,CAAC;YAC5C,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACjC,CAAC;QACD,IAAI,OAAO,EAAE,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/C,UAAU,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,CAAC,eAAe,UAAU,UAAU,CAAC,CAAC;YAClD,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QAED,UAAU,EAAE,CAAC;QACb,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAElC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAChC,mCAAmC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,oCAAoC,UAAU,EAAE,EACxG,MAAM,CACP,CAAC;QACF,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,OAAe,EAAE,SAAiB;QACpD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,kHAAkH,EAClH,CAAC,OAAO,EAAE,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAClC;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,iGAAiG,EACjG,CAAC,OAAO,EAAE,SAAS,CAAC,CACrB,CAAC;QAEN,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAChC,IAAI,QAAQ;YAAE,OAAO,YAAY,CAAC,QAAQ,CAAC,CAAC;QAE5C,MAAM,EAAE,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC;QAC/B,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB;+CACyC,EACzC,CAAC,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,CAC5D,CAAC;QAEF,OAAO;YACL,EAAE;YACF,OAAO;YACP,SAAS;YACT,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;SACf,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,YAAY,CAAC,SAAiB,EAAE,IAAgB;QACpD,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,gEAAgE,EAChE,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,SAAS,CAAC,CAC9D,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,SAAiB;QACtC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,OAAO;YAAE,OAAO;QAErB,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,oEAAoE,EACpE;YACE,IAAI,CAAC,SAAS,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE,CAAC;YAC7F,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACxB,SAAS;SACV,CACF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,SAAoB,EAAE,OAAkB,EAAE,MAAc,EAAE,WAA6B;QAC9H,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB;uCACiC,EACjC,CAAC,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CACpE,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,gBAAgB,CAAC,WAAmB;QACxC,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,gGAAgG,EAChG,CAAC,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,CAC3B;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,+EAA+E,EAC/E,CAAC,WAAW,CAAC,CACd,CAAC;QACN,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAC7C,CAAC;IAEO,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;IAEvC,KAAK,CAAC,WAAW,CAAC,SAAiB;QACzC,MAAM,MAAM,GAAG,IAAI,CAAC,kBAAkB;YACpC,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CACjB,uDAAuD,EACvD,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CACzB;YACH,CAAC,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,KAAK,CAAa,sCAAsC,EAAE,CAAC,SAAS,CAAC,CAAC,CAAC;QACzF,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC3B,OAAO,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7C,CAAC;CACF"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloud-gated tools return a structured error when called in local mode.
|
|
3
|
+
* These tools require a Synthaer cloud account.
|
|
4
|
+
*/
|
|
5
|
+
declare const CLOUD_ONLY_TOOLS: readonly ["ratify_knowledge", "verify_ratification", "get_ratification_stats", "publish_cross_project_event", "subscribe_cross_project_events", "get_cross_project_impact", "publish_topology", "get_topology", "process_unembedded_knowledge", "get_embedding_stats"];
|
|
6
|
+
export type CloudOnlyTool = (typeof CLOUD_ONLY_TOOLS)[number];
|
|
7
|
+
export declare function isCloudOnlyTool(name: string): boolean;
|
|
8
|
+
export declare function cloudRequiredError(toolName: string): {
|
|
9
|
+
content: Array<{
|
|
10
|
+
type: 'text';
|
|
11
|
+
text: string;
|
|
12
|
+
}>;
|
|
13
|
+
isError: true;
|
|
14
|
+
};
|
|
15
|
+
/**
|
|
16
|
+
* Tool definitions for cloud-only tools.
|
|
17
|
+
* These are registered so agents can discover them and get guidance on upgrade.
|
|
18
|
+
*/
|
|
19
|
+
export declare const CLOUD_ONLY_TOOL_DEFINITIONS: readonly [{
|
|
20
|
+
readonly name: "ratify_knowledge";
|
|
21
|
+
readonly description: "Ratify local knowledge items to the Synthaer cloud. Requires cloud account.";
|
|
22
|
+
readonly inputSchema: {
|
|
23
|
+
readonly type: "object";
|
|
24
|
+
readonly properties: {
|
|
25
|
+
readonly ids: {
|
|
26
|
+
readonly type: "array";
|
|
27
|
+
readonly items: {
|
|
28
|
+
readonly type: "string";
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
readonly project: {
|
|
32
|
+
readonly type: "string";
|
|
33
|
+
};
|
|
34
|
+
};
|
|
35
|
+
readonly required: readonly ["ids"];
|
|
36
|
+
};
|
|
37
|
+
}, {
|
|
38
|
+
readonly name: "verify_ratification";
|
|
39
|
+
readonly description: "Verify the ratification status of knowledge items. Requires cloud account.";
|
|
40
|
+
readonly inputSchema: {
|
|
41
|
+
readonly type: "object";
|
|
42
|
+
readonly properties: {
|
|
43
|
+
readonly ids: {
|
|
44
|
+
readonly type: "array";
|
|
45
|
+
readonly items: {
|
|
46
|
+
readonly type: "string";
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
};
|
|
50
|
+
readonly required: readonly ["ids"];
|
|
51
|
+
};
|
|
52
|
+
}, {
|
|
53
|
+
readonly name: "publish_cross_project_event";
|
|
54
|
+
readonly description: "Publish a cross-project event. Requires cloud account.";
|
|
55
|
+
readonly inputSchema: {
|
|
56
|
+
readonly type: "object";
|
|
57
|
+
readonly properties: {
|
|
58
|
+
readonly event: {
|
|
59
|
+
readonly type: "string";
|
|
60
|
+
};
|
|
61
|
+
readonly project: {
|
|
62
|
+
readonly type: "string";
|
|
63
|
+
};
|
|
64
|
+
readonly data: {
|
|
65
|
+
readonly type: "object";
|
|
66
|
+
};
|
|
67
|
+
};
|
|
68
|
+
readonly required: readonly ["event", "project"];
|
|
69
|
+
};
|
|
70
|
+
}];
|
|
71
|
+
export {};
|
|
72
|
+
//# sourceMappingURL=cloud-gate.d.ts.map
|