aismemory 0.2.0 → 0.4.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/dist/__tests__/cli-review.test.d.ts +1 -0
- package/dist/__tests__/cli-review.test.js +26 -0
- package/dist/__tests__/cli-review.test.js.map +1 -0
- package/dist/__tests__/config.test.d.ts +1 -0
- package/dist/__tests__/config.test.js +54 -0
- package/dist/__tests__/config.test.js.map +1 -0
- package/dist/__tests__/local-claude-source.test.d.ts +1 -0
- package/dist/__tests__/local-claude-source.test.js +97 -0
- package/dist/__tests__/local-claude-source.test.js.map +1 -0
- package/dist/__tests__/local-mirror.test.d.ts +1 -0
- package/dist/__tests__/local-mirror.test.js +95 -0
- package/dist/__tests__/local-mirror.test.js.map +1 -0
- package/dist/__tests__/mcp-init-no-auth.test.d.ts +1 -0
- package/dist/__tests__/mcp-init-no-auth.test.js +75 -0
- package/dist/__tests__/mcp-init-no-auth.test.js.map +1 -0
- package/dist/__tests__/pipeline-ingestion.test.d.ts +1 -0
- package/dist/__tests__/pipeline-ingestion.test.js +161 -0
- package/dist/__tests__/pipeline-ingestion.test.js.map +1 -0
- package/dist/__tests__/pipeline-scope-resolver.test.d.ts +1 -0
- package/dist/__tests__/pipeline-scope-resolver.test.js +51 -0
- package/dist/__tests__/pipeline-scope-resolver.test.js.map +1 -0
- package/dist/__tests__/pipeline-trust-tagger.test.d.ts +1 -0
- package/dist/__tests__/pipeline-trust-tagger.test.js +24 -0
- package/dist/__tests__/pipeline-trust-tagger.test.js.map +1 -0
- package/dist/__tests__/read-claude-memory-tree.test.d.ts +1 -0
- package/dist/__tests__/read-claude-memory-tree.test.js +37 -0
- package/dist/__tests__/read-claude-memory-tree.test.js.map +1 -0
- package/dist/__tests__/trust-ledger.test.d.ts +1 -0
- package/dist/__tests__/trust-ledger.test.js +55 -0
- package/dist/__tests__/trust-ledger.test.js.map +1 -0
- package/dist/cli/read-claude-memory-tree.d.ts +7 -0
- package/dist/cli/read-claude-memory-tree.js +65 -0
- package/dist/cli/read-claude-memory-tree.js.map +1 -0
- package/dist/cli/sync-memory.d.ts +2 -0
- package/dist/cli/sync-memory.js +155 -0
- package/dist/cli/sync-memory.js.map +1 -0
- package/dist/config.d.ts +11 -0
- package/dist/config.js +51 -0
- package/dist/config.js.map +1 -0
- package/dist/index.js +154 -54
- package/dist/index.js.map +1 -1
- package/dist/local-mirror.d.ts +15 -0
- package/dist/local-mirror.js +56 -0
- package/dist/local-mirror.js.map +1 -0
- package/dist/pipeline/dedupe.d.ts +11 -0
- package/dist/pipeline/dedupe.js +21 -0
- package/dist/pipeline/dedupe.js.map +1 -0
- package/dist/pipeline/ingestion.d.ts +56 -0
- package/dist/pipeline/ingestion.js +86 -0
- package/dist/pipeline/ingestion.js.map +1 -0
- package/dist/pipeline/scope-resolver.d.ts +15 -0
- package/dist/pipeline/scope-resolver.js +28 -0
- package/dist/pipeline/scope-resolver.js.map +1 -0
- package/dist/pipeline/trust-tagger.d.ts +10 -0
- package/dist/pipeline/trust-tagger.js +12 -0
- package/dist/pipeline/trust-tagger.js.map +1 -0
- package/dist/pipeline/types.d.ts +41 -0
- package/dist/pipeline/types.js +6 -0
- package/dist/pipeline/types.js.map +1 -0
- package/dist/review/cli-review.d.ts +10 -0
- package/dist/review/cli-review.js +47 -0
- package/dist/review/cli-review.js.map +1 -0
- package/dist/sources/local-claude.d.ts +11 -0
- package/dist/sources/local-claude.js +137 -0
- package/dist/sources/local-claude.js.map +1 -0
- package/dist/sources/types.d.ts +53 -0
- package/dist/sources/types.js +9 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/trust-ledger.d.ts +8 -0
- package/dist/trust-ledger.js +61 -0
- package/dist/trust-ledger.js.map +1 -0
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -62,6 +62,33 @@ async function aisGet(path, token) {
|
|
|
62
62
|
});
|
|
63
63
|
return res.json();
|
|
64
64
|
}
|
|
65
|
+
async function resolveAgentForLoad(token, query) {
|
|
66
|
+
const resolveRes = (await aisGet(`/v1/resolve?query=${encodeURIComponent(query)}`, token));
|
|
67
|
+
if (resolveRes.data?.status === 'resolved' && resolveRes.data.agent) {
|
|
68
|
+
return resolveRes.data.agent;
|
|
69
|
+
}
|
|
70
|
+
if (resolveRes.data?.status === 'ambiguous') {
|
|
71
|
+
const ids = resolveRes.data.matches?.map((ag) => ag.id).join(', ') ?? '(none)';
|
|
72
|
+
throw new Error(resolveRes.data.message ?? `agent_load: multiple agents match "${query}" (ids: ${ids}). Use an agent id to disambiguate.`);
|
|
73
|
+
}
|
|
74
|
+
if (resolveRes.data?.status === 'not_found') {
|
|
75
|
+
const available = resolveRes.data.available?.map((ag) => ag.name).join(', ');
|
|
76
|
+
throw new Error(resolveRes.data.message ?? `agent_load: no agent named "${query}" in this tenant. Available: ${available || '(none)'}`);
|
|
77
|
+
}
|
|
78
|
+
const listRes = (await aisGet('/v1/agents', token));
|
|
79
|
+
const agents = listRes.data?.agents ?? [];
|
|
80
|
+
const matches = agents.filter((ag) => ag.name.toLowerCase() === query.toLowerCase() || ag.id === query);
|
|
81
|
+
if (matches.length === 0) {
|
|
82
|
+
const available = agents.map((ag) => ag.name).join(', ');
|
|
83
|
+
throw new Error(`agent_load: no agent named "${query}" in this tenant. Available: ${available || '(none)'}`);
|
|
84
|
+
}
|
|
85
|
+
if (matches.length > 1) {
|
|
86
|
+
throw new Error(`agent_load: multiple agents match "${query}" (ids: ${matches
|
|
87
|
+
.map((ag) => ag.id)
|
|
88
|
+
.join(', ')}). Use an agent id to disambiguate.`);
|
|
89
|
+
}
|
|
90
|
+
return matches[0];
|
|
91
|
+
}
|
|
65
92
|
/**
|
|
66
93
|
* After authenticating, check if the user already has agents.
|
|
67
94
|
* If so, use the first active one instead of the newly-created provisional agent.
|
|
@@ -107,30 +134,59 @@ async function resolveAgent(token, fallbackAgentId, fallbackTenantId) {
|
|
|
107
134
|
return { agentId: fallbackAgentId, tenantId: fallbackTenantId };
|
|
108
135
|
}
|
|
109
136
|
}
|
|
110
|
-
|
|
137
|
+
/**
|
|
138
|
+
* Bond URL/code surfaced when a tool is called before the user has approved
|
|
139
|
+
* the device flow. Caller catches this and returns a friendly error to the MCP
|
|
140
|
+
* client so the agent can show the URL inline in chat.
|
|
141
|
+
*/
|
|
142
|
+
class BondPendingError extends Error {
|
|
143
|
+
verificationUri;
|
|
144
|
+
userCode;
|
|
145
|
+
bondPending = true;
|
|
146
|
+
constructor(verificationUri, userCode) {
|
|
147
|
+
super(`Memory bond required.\n\n` +
|
|
148
|
+
`Visit: ${verificationUri}\n` +
|
|
149
|
+
`Code: ${userCode}\n\n` +
|
|
150
|
+
`Enter your email and tap Approve, then retry this tool. Takes about 30 seconds.`);
|
|
151
|
+
this.verificationUri = verificationUri;
|
|
152
|
+
this.userCode = userCode;
|
|
153
|
+
this.name = 'BondPendingError';
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
async function startDeviceFlow() {
|
|
111
157
|
stderr('Starting authentication...');
|
|
112
|
-
const authRes = await aisPost('/v1/oauth/device/authorize', {
|
|
158
|
+
const authRes = (await aisPost('/v1/oauth/device/authorize', {
|
|
113
159
|
name: `agent-${homedir().split('/').pop() ?? 'user'}`,
|
|
114
|
-
});
|
|
160
|
+
}));
|
|
115
161
|
if (!authRes.success || !authRes.data) {
|
|
116
162
|
throw new Error(`Authentication failed: ${authRes.error?.message ?? 'Unknown error'}`);
|
|
117
163
|
}
|
|
118
|
-
const { device_code, user_code,
|
|
119
|
-
stderr('');
|
|
120
|
-
stderr('=== Authentication Required ===');
|
|
121
|
-
stderr(`Visit: ${verification_uri_complete}`);
|
|
122
|
-
stderr(`Or go to ${verification_uri} and enter code: ${user_code}`);
|
|
123
|
-
stderr('Waiting for approval...');
|
|
164
|
+
const { device_code, user_code, verification_uri_complete, interval, agent_id, provisional_tenant_id } = authRes.data;
|
|
124
165
|
stderr('');
|
|
125
|
-
|
|
166
|
+
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
167
|
+
stderr(' aismemory — memory bond required');
|
|
168
|
+
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
169
|
+
stderr(` Bond URL : ${verification_uri_complete}`);
|
|
170
|
+
stderr(` Code : ${user_code}`);
|
|
171
|
+
stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
|
|
172
|
+
const poll = pollForToken(device_code, interval, agent_id, provisional_tenant_id);
|
|
173
|
+
return {
|
|
174
|
+
device_code,
|
|
175
|
+
user_code,
|
|
176
|
+
verification_uri_complete,
|
|
177
|
+
agent_id,
|
|
178
|
+
provisional_tenant_id,
|
|
179
|
+
poll,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
async function pollForToken(device_code, interval, agent_id, provisional_tenant_id) {
|
|
126
183
|
const pollInterval = Math.max(interval, 5) * 1000;
|
|
127
184
|
const deadline = Date.now() + 30 * 60 * 1000; // 30 min
|
|
128
185
|
while (Date.now() < deadline) {
|
|
129
186
|
await new Promise((r) => setTimeout(r, pollInterval));
|
|
130
|
-
const pollRes = await aisPost('/v1/oauth/token', { device_code });
|
|
187
|
+
const pollRes = (await aisPost('/v1/oauth/token', { device_code }));
|
|
131
188
|
if (pollRes.access_token) {
|
|
132
189
|
const expiresAt = new Date(Date.now() + (pollRes.expires_in ?? 604800) * 1000).toISOString();
|
|
133
|
-
// Resolve to an existing agent if available
|
|
134
190
|
const { agentId, tenantId } = await resolveAgent(pollRes.access_token, agent_id, provisional_tenant_id);
|
|
135
191
|
const creds = {
|
|
136
192
|
token: pollRes.access_token,
|
|
@@ -229,26 +285,67 @@ const tools = [
|
|
|
229
285
|
];
|
|
230
286
|
// ── MCP Server ──────────────────────────────────────────
|
|
231
287
|
async function main() {
|
|
232
|
-
//
|
|
288
|
+
// Lazy-auth state. We connect the MCP transport before the user has approved
|
|
289
|
+
// the device flow so Claude Code's 30s connection timeout is not blocked on
|
|
290
|
+
// human approval. The first tool call surfaces the bond URL via its result.
|
|
233
291
|
let creds = loadCredentials();
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
292
|
+
let activeFlow = null;
|
|
293
|
+
let postAuthDone = false;
|
|
294
|
+
// Created here so `agent_load` and post-auth setup can reference it via closure.
|
|
295
|
+
const server = new Server({ name: 'aismemory', version: '0.4.0' }, { capabilities: { tools: {}, prompts: {} } });
|
|
296
|
+
/**
|
|
297
|
+
* Wait briefly for the in-flight device-flow poll to complete. If the user
|
|
298
|
+
* has already approved, this returns the fresh credentials. If not, throws
|
|
299
|
+
* BondPendingError so the calling tool returns the bond URL to the agent.
|
|
300
|
+
*/
|
|
301
|
+
async function ensureCredentials(softTimeoutMs = 7000) {
|
|
302
|
+
if (creds)
|
|
303
|
+
return creds;
|
|
304
|
+
if (!activeFlow)
|
|
305
|
+
activeFlow = await startDeviceFlow();
|
|
306
|
+
const sentinel = Symbol('bond-pending');
|
|
307
|
+
const got = await Promise.race([
|
|
308
|
+
activeFlow.poll,
|
|
309
|
+
new Promise((r) => setTimeout(() => r(sentinel), softTimeoutMs)),
|
|
310
|
+
]);
|
|
311
|
+
if (got === sentinel) {
|
|
312
|
+
throw new BondPendingError(activeFlow.verification_uri_complete, activeFlow.user_code);
|
|
313
|
+
}
|
|
314
|
+
creds = got;
|
|
315
|
+
activeFlow = null;
|
|
316
|
+
if (!postAuthDone) {
|
|
317
|
+
postAuthDone = true;
|
|
318
|
+
void runPostAuth(creds);
|
|
319
|
+
}
|
|
320
|
+
return creds;
|
|
246
321
|
}
|
|
247
|
-
|
|
248
|
-
|
|
322
|
+
/** Identity hydration, prompt refresh, and auto-handoff — all post-auth. */
|
|
323
|
+
async function runPostAuth(c) {
|
|
324
|
+
try {
|
|
325
|
+
agentContext = await hydrateIdentity(AIS_URL, c.agentId, c.token);
|
|
326
|
+
if (agentContext) {
|
|
327
|
+
stderr(`Agent loaded: ${agentContext.identity.name} (${agentContext.recentMemories.length} memories, ${agentContext.goals.length} goals)`);
|
|
328
|
+
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
stderr('Agent identity not loaded — tools work, but no identity prompt');
|
|
332
|
+
}
|
|
333
|
+
startRefreshTimer(AIS_URL, c.agentId, c.token, (memories) => {
|
|
334
|
+
if (agentContext) {
|
|
335
|
+
agentContext.recentMemories = memories;
|
|
336
|
+
}
|
|
337
|
+
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
338
|
+
stderr(`Memory refresh: ${memories.length} memories`);
|
|
339
|
+
});
|
|
340
|
+
setupAutoHandoff(AIS_URL, c.agentId, c.token, activityTracker, () => {
|
|
341
|
+
stopRefreshTimer();
|
|
342
|
+
stderr('Session handoff saved');
|
|
343
|
+
});
|
|
344
|
+
}
|
|
345
|
+
catch (e) {
|
|
346
|
+
stderr(`Post-auth setup failed: ${e instanceof Error ? e.message : String(e)}`);
|
|
347
|
+
}
|
|
249
348
|
}
|
|
250
|
-
// Create MCP server
|
|
251
|
-
const server = new Server({ name: 'aismemory', version: '0.2.0' }, { capabilities: { tools: {}, prompts: {} } });
|
|
252
349
|
server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
|
|
253
350
|
server.setRequestHandler(ListPromptsRequestSchema, async () => ({
|
|
254
351
|
prompts: agentContext
|
|
@@ -266,6 +363,10 @@ async function main() {
|
|
|
266
363
|
const a = (args ?? {});
|
|
267
364
|
activityTracker.recordToolUse(name);
|
|
268
365
|
try {
|
|
366
|
+
const c = await ensureCredentials();
|
|
367
|
+
const token = c.token;
|
|
368
|
+
// agentId is mutable across `agent_load` calls within this session.
|
|
369
|
+
let agentId = c.agentId;
|
|
269
370
|
let result;
|
|
270
371
|
switch (name) {
|
|
271
372
|
case 'remember':
|
|
@@ -307,20 +408,12 @@ async function main() {
|
|
|
307
408
|
if (!query) {
|
|
308
409
|
throw new Error('agent_load: query is required');
|
|
309
410
|
}
|
|
310
|
-
const
|
|
311
|
-
const agents = listRes.data?.agents ?? [];
|
|
312
|
-
const matches = agents.filter((ag) => ag.name.toLowerCase() === query.toLowerCase());
|
|
313
|
-
if (matches.length === 0) {
|
|
314
|
-
const available = agents.map((ag) => ag.name).join(', ');
|
|
315
|
-
throw new Error(`agent_load: no agent named "${query}" in this tenant. Available: ${available || '(none)'}`);
|
|
316
|
-
}
|
|
317
|
-
if (matches.length > 1) {
|
|
318
|
-
throw new Error(`agent_load: multiple agents share the name "${query}" (ids: ${matches
|
|
319
|
-
.map((ag) => ag.id)
|
|
320
|
-
.join(', ')}). Use AIS_AGENT_ID to disambiguate.`);
|
|
321
|
-
}
|
|
322
|
-
const target = matches[0];
|
|
411
|
+
const target = await resolveAgentForLoad(token, query);
|
|
323
412
|
agentId = target.id;
|
|
413
|
+
// Persist the switch so subsequent tool calls use the new agent.
|
|
414
|
+
if (creds) {
|
|
415
|
+
creds = { ...creds, agentId };
|
|
416
|
+
}
|
|
324
417
|
agentContext = await hydrateIdentity(AIS_URL, agentId, token);
|
|
325
418
|
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
326
419
|
stderr(`agent_load: switched to "${target.name}" (${target.id})`);
|
|
@@ -346,26 +439,33 @@ async function main() {
|
|
|
346
439
|
};
|
|
347
440
|
}
|
|
348
441
|
catch (error) {
|
|
442
|
+
const message = error instanceof Error ? error.message : 'Unknown error';
|
|
443
|
+
// BondPendingError carries human-readable text that the agent should
|
|
444
|
+
// render verbatim — return as plain text rather than JSON.
|
|
445
|
+
if (error instanceof BondPendingError) {
|
|
446
|
+
return {
|
|
447
|
+
content: [{ type: 'text', text: message }],
|
|
448
|
+
isError: true,
|
|
449
|
+
};
|
|
450
|
+
}
|
|
349
451
|
return {
|
|
350
|
-
content: [{ type: 'text', text: JSON.stringify({ error:
|
|
452
|
+
content: [{ type: 'text', text: JSON.stringify({ error: message }) }],
|
|
351
453
|
isError: true,
|
|
352
454
|
};
|
|
353
455
|
}
|
|
354
456
|
});
|
|
457
|
+
// Connect the transport BEFORE any auth so MCP `initialize` returns in <1s.
|
|
355
458
|
const transport = new StdioServerTransport();
|
|
356
459
|
await server.connect(transport);
|
|
357
|
-
startRefreshTimer(AIS_URL, agentId, token, (memories) => {
|
|
358
|
-
if (agentContext) {
|
|
359
|
-
agentContext.recentMemories = memories;
|
|
360
|
-
}
|
|
361
|
-
server.notification({ method: 'notifications/prompts/list_changed' });
|
|
362
|
-
stderr(`Memory refresh: ${memories.length} memories`);
|
|
363
|
-
});
|
|
364
|
-
setupAutoHandoff(AIS_URL, agentId, token, activityTracker, () => {
|
|
365
|
-
stopRefreshTimer();
|
|
366
|
-
stderr('Session handoff saved');
|
|
367
|
-
});
|
|
368
460
|
stderr(`MCP server running. Tools: ${tools.map((t) => t.name).join(', ')}`);
|
|
461
|
+
if (creds) {
|
|
462
|
+
stderr(`Authenticated as agent ${creds.agentId}`);
|
|
463
|
+
postAuthDone = true;
|
|
464
|
+
void runPostAuth(creds);
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
stderr('No saved credentials. Bond URL will be surfaced on first tool call.');
|
|
468
|
+
}
|
|
369
469
|
}
|
|
370
470
|
main().catch((error) => {
|
|
371
471
|
stderr(`Fatal: ${error instanceof Error ? error.message : String(error)}`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;GAOG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,2CAA2C,CAAC;AACnE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EACL,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,sBAAsB,GAEvB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AACxE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,OAAO,EAAE,MAAM,IAAI,CAAC;AAC7B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGtE,2DAA2D;AAE3D,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,gCAAgC,CAAC;AAC3E,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,YAAY,CAAC,CAAC;AAChD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;AASvD,2DAA2D;AAE3D,SAAS,eAAe;IACtB,IAAI,CAAC;QACH,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;YAAE,OAAO,IAAI,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAgB,CAAC;QAC1E,IAAI,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,EAAE,CAAC;YAC3C,MAAM,CAAC,iDAAiD,CAAC,CAAC;YAC1D,OAAO,IAAI,CAAC;QACd,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,eAAe,CAAC,KAAkB;IACzC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC1C,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5D,CAAC;AAED,2DAA2D;AAE3D,SAAS,MAAM,CAAC,GAAW;IACzB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAC/C,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAY,EAAE,IAAa,EAAE,KAAc;IAChE,MAAM,OAAO,GAA2B,EAAE,cAAc,EAAE,kBAAkB,EAAE,CAAC;IAC/E,IAAI,KAAK;QAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,KAAK,EAAE,CAAC;IACxD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,MAAM,EAAE,MAAM;QACd,OAAO;QACP,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;KAC3B,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,KAAa;IAC/C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,OAAO,GAAG,IAAI,EAAE,EAAE;QAC3C,OAAO,EAAE,EAAE,eAAe,EAAE,UAAU,KAAK,EAAE,EAAE;KAChD,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AA2CD,KAAK,UAAU,mBAAmB,CAAC,KAAa,EAAE,KAAa;IAC7D,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,qBAAqB,kBAAkB,CAAC,KAAK,CAAC,EAAE,EAAE,KAAK,CAAC,CAAyB,CAAC;IACnH,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,UAAU,IAAI,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACpE,OAAO,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC;QAC/E,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,sCAAsC,KAAK,WAAW,GAAG,qCAAqC,CAAC,CAAC;IAC7I,CAAC;IACD,IAAI,UAAU,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,EAAE,CAAC;QAC5C,MAAM,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,+BAA+B,KAAK,gCAAgC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC;IAC1I,CAAC;IAED,MAAM,OAAO,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,KAAK,CAAC,CAAsB,CAAC;IACzE,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,IAAI,EAAE,CAAC;IAC1C,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAC3B,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,EAAE,KAAK,KAAK,CACzE,CAAC;IACF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzD,MAAM,IAAI,KAAK,CACb,+BAA+B,KAAK,gCAAgC,SAAS,IAAI,QAAQ,EAAE,CAC5F,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACb,sCAAsC,KAAK,WAAW,OAAO;aAC1D,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;aAClB,IAAI,CAAC,IAAI,CAAC,qCAAqC,CACnD,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC,CAAC,CAAE,CAAC;AACrB,CAAC;AAED;;;;GAIG;AACH,KAAK,UAAU,YAAY,CAAC,KAAa,EAAE,eAAuB,EAAE,gBAAwB;IAC1F,wCAAwC;IACxC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,kCAAkC,UAAU,EAAE,CAAC,CAAC;QACvD,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC7D,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,YAAY,EAAE,KAAK,CAAsB,CAAC;QACnE,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC;QAE5E,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,8CAA8C,eAAe,EAAE,CAAC,CAAC;YACxE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;QAClE,CAAC;QAED,0CAA0C;QAC1C,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;QAC9C,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;YACjF,IAAI,KAAK,EAAE,CAAC;gBACV,MAAM,CAAC,gBAAgB,KAAK,CAAC,IAAI,4BAA4B,CAAC,CAAC;gBAC/D,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;YAC3D,CAAC;YACD,MAAM,CAAC,4BAA4B,OAAO,2BAA2B,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/G,CAAC;QAED,+BAA+B;QAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,CAAC,gCAAgC,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;QACtE,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,CAAC,YAAY,MAAM,CAAC,MAAM,wDAAwD,CAAC,CAAC;YAC1F,KAAK,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC;gBACvB,MAAM,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,2CAA2C,eAAe,EAAE,CAAC,CAAC;QACrE,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,gBAAgB,EAAE,CAAC;IAClE,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,MAAM,gBAAiB,SAAQ,KAAK;IAEN;IAAyC;IAD5D,WAAW,GAAG,IAAI,CAAC;IAC5B,YAA4B,eAAuB,EAAkB,QAAgB;QACnF,KAAK,CACH,2BAA2B;YACzB,UAAU,eAAe,IAAI;YAC7B,SAAS,QAAQ,MAAM;YACvB,iFAAiF,CACpF,CAAC;QANwB,oBAAe,GAAf,eAAe,CAAQ;QAAkB,aAAQ,GAAR,QAAQ,CAAQ;QAOnF,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF;AAYD,KAAK,UAAU,eAAe;IAC5B,MAAM,CAAC,4BAA4B,CAAC,CAAC;IAErC,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,4BAA4B,EAAE;QAC3D,IAAI,EAAE,SAAS,OAAO,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,MAAM,EAAE;KACtD,CAAC,CAAuB,CAAC;IAE1B,IAAI,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,0BAA0B,OAAO,CAAC,KAAK,EAAE,OAAO,IAAI,eAAe,EAAE,CAAC,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,yBAAyB,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAEtH,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACjE,MAAM,CAAC,oCAAoC,CAAC,CAAC;IAC7C,MAAM,CAAC,wDAAwD,CAAC,CAAC;IACjE,MAAM,CAAC,gBAAgB,yBAAyB,EAAE,CAAC,CAAC;IACpD,MAAM,CAAC,gBAAgB,SAAS,EAAE,CAAC,CAAC;IACpC,MAAM,CAAC,wDAAwD,CAAC,CAAC;IAEjE,MAAM,IAAI,GAAG,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;IAElF,OAAO;QACL,WAAW;QACX,SAAS;QACT,yBAAyB;QACzB,QAAQ;QACR,qBAAqB;QACrB,IAAI;KACL,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CACzB,WAAmB,EACnB,QAAgB,EAChB,QAAgB,EAChB,qBAA6B;IAE7B,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC;IAClD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC,CAAC,SAAS;IAEvD,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC;QAEtD,MAAM,OAAO,GAAG,CAAC,MAAM,OAAO,CAAC,iBAAiB,EAAE,EAAE,WAAW,EAAE,CAAC,CAAsB,CAAC;QAEzF,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC;YACzB,MAAM,SAAS,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YAC7F,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,YAAY,EAAE,QAAQ,EAAE,qBAAqB,CAAC,CAAC;YACxG,MAAM,KAAK,GAAgB;gBACzB,KAAK,EAAE,OAAO,CAAC,YAAY;gBAC3B,OAAO;gBACP,QAAQ;gBACR,SAAS;aACV,CAAC;YACF,eAAe,CAAC,KAAK,CAAC,CAAC;YACvB,MAAM,CAAC,6BAA6B,CAAC,CAAC;YACtC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,OAAO,CAAC,KAAK,KAAK,uBAAuB;YAAE,SAAS;QACxD,IAAI,OAAO,CAAC,KAAK,KAAK,WAAW,EAAE,CAAC;YAClC,MAAM,IAAI,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YAC9C,SAAS;QACX,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;QACvF,IAAI,OAAO,CAAC,KAAK,KAAK,eAAe;YAAE,MAAM,IAAI,KAAK,CAAC,0CAA0C,CAAC,CAAC;IACrG,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;AAC9C,CAAC;AAED,IAAI,YAAY,GAAwB,IAAI,CAAC;AAC7C,MAAM,eAAe,GAAG,IAAI,eAAe,EAAE,CAAC;AAE9C,2DAA2D;AAE3D,MAAM,KAAK,GAAW;IACpB;QACE,IAAI,EAAE,UAAU;QAChB,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACvE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,aAAa,EAAE;gBAClH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,+BAA+B,EAAE;aACrG;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACtB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,4CAA4C;QACzD,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE;gBACtD,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,0BAA0B,EAAE;gBAClE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,WAAW,EAAE,gBAAgB,EAAE;aACtH;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EAAE,kEAAkE;QAC/E,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,8FAA8F;QAC3G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,iGAAiG;QAC9G,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;KAChD;IACD;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,gFAAgF;QAC7F,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBACzF,YAAY,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE,WAAW,EAAE,gCAAgC,EAAE;aAC1G;SACF;KACF;IACD;QACE,IAAI,EAAE,YAAY;QAClB,WAAW,EACT,wKAAwK;YACxK,iMAAiM;QACnM,WAAW,EAAE;YACX,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACV,KAAK,EAAE;oBACL,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,kEAAkE;iBAChF;aACF;YACD,QAAQ,EAAE,CAAC,OAAO,CAAC;SACpB;KACF;CACF,CAAC;AAEF,2DAA2D;AAE3D,KAAK,UAAU,IAAI;IACjB,6EAA6E;IAC7E,4EAA4E;IAC5E,4EAA4E;IAC5E,IAAI,KAAK,GAAuB,eAAe,EAAE,CAAC;IAClD,IAAI,UAAU,GAA4B,IAAI,CAAC;IAC/C,IAAI,YAAY,GAAG,KAAK,CAAC;IAEzB,iFAAiF;IACjF,MAAM,MAAM,GAAG,IAAI,MAAM,CACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,EACvC,EAAE,YAAY,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,CAC7C,CAAC;IAEF;;;;OAIG;IACH,KAAK,UAAU,iBAAiB,CAAC,aAAa,GAAG,IAAI;QACnD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;QACxB,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,MAAM,eAAe,EAAE,CAAC;QAEtD,MAAM,QAAQ,GAAG,MAAM,CAAC,cAAc,CAAC,CAAC;QACxC,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAgC;YAC5D,UAAU,CAAC,IAAI;YACf,IAAI,OAAO,CAAkB,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,CAAC;SAClF,CAAC,CAAC;QAEH,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YACrB,MAAM,IAAI,gBAAgB,CAAC,UAAU,CAAC,yBAAyB,EAAE,UAAU,CAAC,SAAS,CAAC,CAAC;QACzF,CAAC;QAED,KAAK,GAAG,GAAG,CAAC;QACZ,UAAU,GAAG,IAAI,CAAC;QAClB,IAAI,CAAC,YAAY,EAAE,CAAC;YAClB,YAAY,GAAG,IAAI,CAAC;YACpB,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,4EAA4E;IAC5E,KAAK,UAAU,WAAW,CAAC,CAAc;QACvC,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;YAClE,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,CACJ,iBAAiB,YAAY,CAAC,QAAQ,CAAC,IAAI,KAAK,YAAY,CAAC,cAAc,CAAC,MAAM,cAAc,YAAY,CAAC,KAAK,CAAC,MAAM,SAAS,CACnI,CAAC;gBACF,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,MAAM,CAAC,gEAAgE,CAAC,CAAC;YAC3E,CAAC;YAED,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,CAAC,QAAuB,EAAE,EAAE;gBACzE,IAAI,YAAY,EAAE,CAAC;oBACjB,YAAY,CAAC,cAAc,GAAG,QAAQ,CAAC;gBACzC,CAAC;gBACD,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC,CAAC;gBACtE,MAAM,CAAC,mBAAmB,QAAQ,CAAC,MAAM,WAAW,CAAC,CAAC;YACxD,CAAC,CAAC,CAAC;YAEH,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,KAAK,EAAE,eAAe,EAAE,GAAG,EAAE;gBAClE,gBAAgB,EAAE,CAAC;gBACnB,MAAM,CAAC,uBAAuB,CAAC,CAAC;YAClC,CAAC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,MAAM,CAAC,2BAA2B,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAClF,CAAC;IACH,CAAC;IAED,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAE1E,MAAM,CAAC,iBAAiB,CAAC,wBAAwB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC9D,OAAO,EAAE,YAAY;YACnB,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,gBAAgB,EAAE,WAAW,EAAE,qDAAqD,EAAE,CAAC;YAClG,CAAC,CAAC,EAAE;KACP,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,sBAAsB,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC;QAC5D,QAAQ,EAAE,CAAC;gBACT,IAAI,EAAE,MAAe;gBACrB,OAAO,EAAE,EAAE,IAAI,EAAE,MAAe,EAAE,IAAI,EAAE,cAAc,CAAC,YAAY,CAAC,EAAE;aACvE,CAAC;KACH,CAAC,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,CAAC,qBAAqB,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;QAChE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;QACjD,MAAM,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAA4B,CAAC;QAClD,eAAe,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC;QAEpC,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,iBAAiB,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;YACtB,oEAAoE;YACpE,IAAI,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;YAExB,IAAI,MAAe,CAAC;YAEpB,QAAQ,IAAI,EAAE,CAAC;gBACb,KAAK,UAAU;oBACb,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,SAAS,EAAE;wBACrD,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC;wBACrB,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,SAAS;wBAC5B,UAAU,EAAE,CAAC,CAAC,YAAY,CAAC,IAAI,GAAG;qBACnC,EAAE,KAAK,CAAC,CAAC;oBACV,eAAe,CAAC,kBAAkB,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;oBAC/D,MAAM;gBAER,KAAK,QAAQ,CAAC,CAAC,CAAC;oBACd,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;oBACrC,IAAI,CAAC,CAAC,OAAO,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,OAAO,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;oBACxD,IAAI,CAAC,CAAC,MAAM,CAAC;wBAAE,MAAM,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;oBACtD,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,WAAW,MAAM,EAAE,EAAE,KAAK,CAAC,CAAC;oBACvE,MAAM;gBACR,CAAC;gBAED,KAAK,QAAQ;oBACX,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;oBACtD,MAAM;gBAER,KAAK,cAAc;oBACjB,MAAM,GAAG,MAAM,MAAM,CAAC,cAAc,OAAO,eAAe,EAAE,KAAK,CAAC,CAAC;oBACnE,MAAM;gBAER,KAAK,OAAO;oBACV,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,QAAQ,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBACjE,MAAM;gBAER,KAAK,SAAS;oBACZ,MAAM,GAAG,MAAM,OAAO,CAAC,cAAc,OAAO,UAAU,EAAE;wBACtD,OAAO,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,eAAe;wBACxC,YAAY,EAAE,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE;qBACtC,EAAE,KAAK,CAAC,CAAC;oBACV,MAAM;gBAER,KAAK,YAAY,CAAC,CAAC,CAAC;oBAClB,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC9C,IAAI,CAAC,KAAK,EAAE,CAAC;wBACX,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBACnD,CAAC;oBACD,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBACvD,OAAO,GAAG,MAAM,CAAC,EAAE,CAAC;oBACpB,iEAAiE;oBACjE,IAAI,KAAK,EAAE,CAAC;wBACV,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,CAAC;oBAChC,CAAC;oBACD,YAAY,GAAG,MAAM,eAAe,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;oBAC9D,MAAM,CAAC,YAAY,CAAC,EAAE,MAAM,EAAE,oCAAoC,EAAE,CAAC,CAAC;oBACtE,MAAM,CAAC,4BAA4B,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;oBAClE,MAAM,GAAG;wBACP,OAAO,EAAE,IAAI;wBACb,OAAO,EAAE,MAAM,CAAC,EAAE;wBAClB,IAAI,EAAE,MAAM,CAAC,IAAI;wBACjB,GAAG,EAAE,YAAY,EAAE,QAAQ,CAAC,GAAG,IAAI,IAAI;wBACvC,MAAM,EAAE,MAAM,CAAC,MAAM;wBACrB,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,MAAM,IAAI,CAAC;wBACxD,WAAW,EAAE,YAAY,EAAE,KAAK,CAAC,MAAM,IAAI,CAAC;qBAC7C,CAAC;oBACF,MAAM;gBACR,CAAC;gBAED;oBACE,OAAO;wBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC;wBACrF,OAAO,EAAE,IAAI;qBACd,CAAC;YACN,CAAC;YAED,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC;aACnE,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;YACzE,qEAAqE;YACrE,2DAA2D;YAC3D,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACtC,OAAO;oBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;oBAC1C,OAAO,EAAE,IAAI;iBACd,CAAC;YACJ,CAAC;YACD,OAAO;gBACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;gBACrE,OAAO,EAAE,IAAI;aACd,CAAC;QACJ,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,4EAA4E;IAC5E,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAChC,MAAM,CAAC,8BAA8B,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAE5E,IAAI,KAAK,EAAE,CAAC;QACV,MAAM,CAAC,0BAA0B,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,YAAY,GAAG,IAAI,CAAC;QACpB,KAAK,WAAW,CAAC,KAAK,CAAC,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,qEAAqE,CAAC,CAAC;IAChF,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;IAC9B,MAAM,CAAC,UAAU,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { AisMemoryDraft } from './pipeline/types.js';
|
|
2
|
+
export interface MirrorEntry {
|
|
3
|
+
aisMemoryId: string;
|
|
4
|
+
memory: AisMemoryDraft;
|
|
5
|
+
}
|
|
6
|
+
export declare class LocalMirror {
|
|
7
|
+
private readonly home;
|
|
8
|
+
private readonly retentionDays;
|
|
9
|
+
private readonly cacheDir;
|
|
10
|
+
constructor(home?: string, retentionDays?: number);
|
|
11
|
+
append(agentId: string, entries: MirrorEntry[]): void;
|
|
12
|
+
cleanup(agentId: string): void;
|
|
13
|
+
scrub(agentId: string): void;
|
|
14
|
+
private pathFor;
|
|
15
|
+
}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, appendFileSync, readFileSync, writeFileSync, renameSync, unlinkSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import { homedir } from 'node:os';
|
|
4
|
+
export class LocalMirror {
|
|
5
|
+
home;
|
|
6
|
+
retentionDays;
|
|
7
|
+
cacheDir;
|
|
8
|
+
constructor(home = homedir(), retentionDays = 30) {
|
|
9
|
+
this.home = home;
|
|
10
|
+
this.retentionDays = retentionDays;
|
|
11
|
+
this.cacheDir = join(home, '.aismemory', 'cache');
|
|
12
|
+
if (!existsSync(this.cacheDir)) {
|
|
13
|
+
mkdirSync(this.cacheDir, { recursive: true, mode: 0o700 });
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
append(agentId, entries) {
|
|
17
|
+
const filePath = this.pathFor(agentId);
|
|
18
|
+
const lines = entries
|
|
19
|
+
.map((e) => {
|
|
20
|
+
const stored = { ...e, importedAt: e.memory.provenance.importedAt };
|
|
21
|
+
return JSON.stringify(stored);
|
|
22
|
+
})
|
|
23
|
+
.join('\n') + '\n';
|
|
24
|
+
appendFileSync(filePath, lines, { mode: 0o600 });
|
|
25
|
+
}
|
|
26
|
+
cleanup(agentId) {
|
|
27
|
+
const filePath = this.pathFor(agentId);
|
|
28
|
+
if (!existsSync(filePath))
|
|
29
|
+
return;
|
|
30
|
+
const cutoff = Date.now() - this.retentionDays * 24 * 60 * 60 * 1000;
|
|
31
|
+
const lines = readFileSync(filePath, 'utf8')
|
|
32
|
+
.split('\n')
|
|
33
|
+
.filter((l) => l.length > 0);
|
|
34
|
+
const surviving = lines.filter((line) => {
|
|
35
|
+
try {
|
|
36
|
+
const parsed = JSON.parse(line);
|
|
37
|
+
return new Date(parsed.importedAt).getTime() >= cutoff;
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
const tmp = `${filePath}.tmp`;
|
|
44
|
+
writeFileSync(tmp, surviving.join('\n') + (surviving.length > 0 ? '\n' : ''), { mode: 0o600 });
|
|
45
|
+
renameSync(tmp, filePath);
|
|
46
|
+
}
|
|
47
|
+
scrub(agentId) {
|
|
48
|
+
const filePath = this.pathFor(agentId);
|
|
49
|
+
if (existsSync(filePath))
|
|
50
|
+
unlinkSync(filePath);
|
|
51
|
+
}
|
|
52
|
+
pathFor(agentId) {
|
|
53
|
+
return join(this.cacheDir, `${agentId}.jsonl`);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=local-mirror.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"local-mirror.js","sourceRoot":"","sources":["../src/local-mirror.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { AisMemoryDraft } from './types.js';
|
|
2
|
+
export interface DedupeResult {
|
|
3
|
+
keep: AisMemoryDraft[];
|
|
4
|
+
skippedExactDupes: number;
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Exact-dupe filtering by provenance.sourceHash. Near-dupe detection via
|
|
8
|
+
* embeddings happens in the review UI layer, not here — this stage only
|
|
9
|
+
* prevents identical re-imports.
|
|
10
|
+
*/
|
|
11
|
+
export declare function preCommitDedupe(drafts: AisMemoryDraft[], existingHashes: ReadonlySet<string>): DedupeResult;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact-dupe filtering by provenance.sourceHash. Near-dupe detection via
|
|
3
|
+
* embeddings happens in the review UI layer, not here — this stage only
|
|
4
|
+
* prevents identical re-imports.
|
|
5
|
+
*/
|
|
6
|
+
export function preCommitDedupe(drafts, existingHashes) {
|
|
7
|
+
const seenHashes = new Set();
|
|
8
|
+
const keep = [];
|
|
9
|
+
let skipped = 0;
|
|
10
|
+
for (const draft of drafts) {
|
|
11
|
+
const hash = draft.provenance.sourceHash;
|
|
12
|
+
if (existingHashes.has(hash) || seenHashes.has(hash)) {
|
|
13
|
+
skipped += 1;
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
seenHashes.add(hash);
|
|
17
|
+
keep.push(draft);
|
|
18
|
+
}
|
|
19
|
+
return { keep, skippedExactDupes: skipped };
|
|
20
|
+
}
|
|
21
|
+
//# sourceMappingURL=dedupe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dedupe.js","sourceRoot":"","sources":["../../src/pipeline/dedupe.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAC7B,MAAwB,EACxB,cAAmC;IAEnC,MAAM,UAAU,GAAG,IAAI,GAAG,EAAU,CAAC;IACrC,MAAM,IAAI,GAAqB,EAAE,CAAC;IAClC,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC;QACzC,IAAI,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACrD,OAAO,IAAI,CAAC,CAAC;YACb,SAAS;QACX,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACrB,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnB,CAAC;IACD,OAAO,EAAE,IAAI,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC;AAC9C,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { SourceAdapter, FilesystemResult } from '../sources/types.js';
|
|
2
|
+
import type { SyncScope, AisMemoryDraft, SyncResult } from './types.js';
|
|
3
|
+
import type { SyncConfig } from '../config.js';
|
|
4
|
+
import type { TrustLedger } from '../trust-ledger.js';
|
|
5
|
+
import type { LocalMirror } from '../local-mirror.js';
|
|
6
|
+
export interface BulkStoreResult {
|
|
7
|
+
created: Array<{
|
|
8
|
+
index: number;
|
|
9
|
+
id: string;
|
|
10
|
+
}>;
|
|
11
|
+
failed: Array<{
|
|
12
|
+
index: number;
|
|
13
|
+
error: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export type BulkStoreFn = (drafts: AisMemoryDraft[]) => Promise<BulkStoreResult>;
|
|
17
|
+
export type ReviewFn = (drafts: AisMemoryDraft[]) => Promise<AisMemoryDraft[]>;
|
|
18
|
+
export interface IngestionOptions {
|
|
19
|
+
adapter: SourceAdapter;
|
|
20
|
+
rawSourceData: string | FilesystemResult;
|
|
21
|
+
scope: SyncScope;
|
|
22
|
+
agentId: string;
|
|
23
|
+
config: SyncConfig;
|
|
24
|
+
ledger: TrustLedger;
|
|
25
|
+
mirror: LocalMirror;
|
|
26
|
+
existingHashes: ReadonlySet<string>;
|
|
27
|
+
bulkStore: BulkStoreFn;
|
|
28
|
+
review: ReviewFn;
|
|
29
|
+
defaultTrustScore?: number;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Run the full ingestion pipeline for a single source adapter + scope pair.
|
|
33
|
+
*
|
|
34
|
+
* Pipeline order:
|
|
35
|
+
* 1. Parse raw source data via `adapter.parseResponse`.
|
|
36
|
+
* 2. Map to AIS drafts and apply trust tags.
|
|
37
|
+
* 3. Pre-commit deduplicate against `existingHashes`.
|
|
38
|
+
* 4. Offer non-auto-commit batches to `review` for user approval.
|
|
39
|
+
* 5. Bulk-store approved drafts in AIS via `bulkStore`.
|
|
40
|
+
* 6. Advance the trust ledger (`ledger.recordSync`).
|
|
41
|
+
* 7. Append entries to the local mirror.
|
|
42
|
+
*
|
|
43
|
+
* Failure semantics:
|
|
44
|
+
* - If `bulkStore` throws, neither ledger nor mirror is updated — the caller
|
|
45
|
+
* may safely retry the entire run without double-counting.
|
|
46
|
+
* - If `mirror.append` throws after a successful `bulkStore`, the ledger has
|
|
47
|
+
* already been advanced (AIS accepted the memories) and the failure is
|
|
48
|
+
* surfaced as a `warnings` entry rather than an exception so the caller
|
|
49
|
+
* receives a valid `SyncResult`.
|
|
50
|
+
*
|
|
51
|
+
* Zero-import path:
|
|
52
|
+
* - When all candidates are dedupe-skipped or rejected by `review`,
|
|
53
|
+
* `ledger.recordSync` is still called so the `syncCount` advances and the
|
|
54
|
+
* trust ladder progresses toward auto-commit on future syncs.
|
|
55
|
+
*/
|
|
56
|
+
export declare function runIngestion(options: IngestionOptions): Promise<SyncResult>;
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { preCommitDedupe } from './dedupe.js';
|
|
2
|
+
import { applyTrustTags } from './trust-tagger.js';
|
|
3
|
+
/**
|
|
4
|
+
* Run the full ingestion pipeline for a single source adapter + scope pair.
|
|
5
|
+
*
|
|
6
|
+
* Pipeline order:
|
|
7
|
+
* 1. Parse raw source data via `adapter.parseResponse`.
|
|
8
|
+
* 2. Map to AIS drafts and apply trust tags.
|
|
9
|
+
* 3. Pre-commit deduplicate against `existingHashes`.
|
|
10
|
+
* 4. Offer non-auto-commit batches to `review` for user approval.
|
|
11
|
+
* 5. Bulk-store approved drafts in AIS via `bulkStore`.
|
|
12
|
+
* 6. Advance the trust ledger (`ledger.recordSync`).
|
|
13
|
+
* 7. Append entries to the local mirror.
|
|
14
|
+
*
|
|
15
|
+
* Failure semantics:
|
|
16
|
+
* - If `bulkStore` throws, neither ledger nor mirror is updated — the caller
|
|
17
|
+
* may safely retry the entire run without double-counting.
|
|
18
|
+
* - If `mirror.append` throws after a successful `bulkStore`, the ledger has
|
|
19
|
+
* already been advanced (AIS accepted the memories) and the failure is
|
|
20
|
+
* surfaced as a `warnings` entry rather than an exception so the caller
|
|
21
|
+
* receives a valid `SyncResult`.
|
|
22
|
+
*
|
|
23
|
+
* Zero-import path:
|
|
24
|
+
* - When all candidates are dedupe-skipped or rejected by `review`,
|
|
25
|
+
* `ledger.recordSync` is still called so the `syncCount` advances and the
|
|
26
|
+
* trust ladder progresses toward auto-commit on future syncs.
|
|
27
|
+
*/
|
|
28
|
+
export async function runIngestion(options) {
|
|
29
|
+
const { adapter, rawSourceData, scope, agentId, config, ledger, mirror, existingHashes, bulkStore, review, } = options;
|
|
30
|
+
const defaultTrustScore = options.defaultTrustScore ?? 0.5;
|
|
31
|
+
const parsed = adapter.parseResponse(rawSourceData);
|
|
32
|
+
const candidateDrafts = parsed.memories.map((src) => adapter.mapToAis(src, scope, agentId));
|
|
33
|
+
const taggedDrafts = applyTrustTags(candidateDrafts, { defaultTrustScore });
|
|
34
|
+
const { keep: afterDedupe, skippedExactDupes } = preCommitDedupe(taggedDrafts, existingHashes);
|
|
35
|
+
const scopeKey = scopeToKey(scope);
|
|
36
|
+
const shouldAutoCommit = config.autoCommit(adapter.id) || ledger.isTrusted(agentId, adapter.id, scopeKey);
|
|
37
|
+
const approved = shouldAutoCommit ? afterDedupe : await review(afterDedupe);
|
|
38
|
+
const skippedByUser = afterDedupe.length - approved.length;
|
|
39
|
+
if (approved.length === 0) {
|
|
40
|
+
ledger.recordSync(agentId, adapter.id, scopeKey);
|
|
41
|
+
return {
|
|
42
|
+
imported: 0,
|
|
43
|
+
skippedExactDupes,
|
|
44
|
+
skippedByUser,
|
|
45
|
+
warnings: parsed.warnings,
|
|
46
|
+
memoryIds: [],
|
|
47
|
+
failed: [],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const storeResult = await bulkStore(approved);
|
|
51
|
+
// Advance the trust ledger FIRST — if AIS accepted the memories, the
|
|
52
|
+
// trust ladder must reflect that regardless of local-mirror success.
|
|
53
|
+
ledger.recordSync(agentId, adapter.id, scopeKey);
|
|
54
|
+
const mirrorEntries = storeResult.created.map((c) => ({
|
|
55
|
+
aisMemoryId: c.id,
|
|
56
|
+
memory: approved[c.index],
|
|
57
|
+
}));
|
|
58
|
+
const mirrorWarnings = [];
|
|
59
|
+
try {
|
|
60
|
+
mirror.append(agentId, mirrorEntries);
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
64
|
+
mirrorWarnings.push(`local mirror append failed: ${msg}`);
|
|
65
|
+
}
|
|
66
|
+
return {
|
|
67
|
+
imported: storeResult.created.length,
|
|
68
|
+
skippedExactDupes,
|
|
69
|
+
skippedByUser,
|
|
70
|
+
warnings: [...parsed.warnings, ...mirrorWarnings],
|
|
71
|
+
memoryIds: storeResult.created.map((c) => c.id),
|
|
72
|
+
failed: storeResult.failed,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
function scopeToKey(scope) {
|
|
76
|
+
// Stable multi-field encoding prevents collisions when optional fields
|
|
77
|
+
// are absent. Pipe separator is safe because none of the component
|
|
78
|
+
// values may contain it in practice (enforced by call sites).
|
|
79
|
+
return [
|
|
80
|
+
scope.kind,
|
|
81
|
+
scope.goalId ?? '',
|
|
82
|
+
scope.projectPath ?? '',
|
|
83
|
+
scope.label,
|
|
84
|
+
].join('|');
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=ingestion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ingestion.js","sourceRoot":"","sources":["../../src/pipeline/ingestion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { SyncConfig } from '../config.js';
|
|
2
|
+
import type { SyncScope } from './types.js';
|
|
3
|
+
export interface ActiveGoal {
|
|
4
|
+
id: string;
|
|
5
|
+
description: string;
|
|
6
|
+
}
|
|
7
|
+
export interface ScopeResolverOptions {
|
|
8
|
+
config: SyncConfig;
|
|
9
|
+
projectPath: string | null;
|
|
10
|
+
activeGoal: ActiveGoal | null;
|
|
11
|
+
sessionTopic: string | null;
|
|
12
|
+
confirmer: (proposed: SyncScope) => Promise<SyncScope>;
|
|
13
|
+
saveAsDefault?: boolean;
|
|
14
|
+
}
|
|
15
|
+
export declare function resolveScope(options: ScopeResolverOptions): Promise<SyncScope>;
|