aismemory 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (100) hide show
  1. package/README.md +1 -0
  2. package/dist/__tests__/auto-handoff.test.d.ts +1 -0
  3. package/dist/__tests__/auto-handoff.test.js +72 -0
  4. package/dist/__tests__/auto-handoff.test.js.map +1 -0
  5. package/dist/__tests__/cli-review.test.d.ts +1 -0
  6. package/dist/__tests__/cli-review.test.js +26 -0
  7. package/dist/__tests__/cli-review.test.js.map +1 -0
  8. package/dist/__tests__/config.test.d.ts +1 -0
  9. package/dist/__tests__/config.test.js +54 -0
  10. package/dist/__tests__/config.test.js.map +1 -0
  11. package/dist/__tests__/hydration.test.d.ts +1 -0
  12. package/dist/__tests__/hydration.test.js +111 -0
  13. package/dist/__tests__/hydration.test.js.map +1 -0
  14. package/dist/__tests__/integration.test.d.ts +1 -0
  15. package/dist/__tests__/integration.test.js +36 -0
  16. package/dist/__tests__/integration.test.js.map +1 -0
  17. package/dist/__tests__/local-claude-source.test.d.ts +1 -0
  18. package/dist/__tests__/local-claude-source.test.js +97 -0
  19. package/dist/__tests__/local-claude-source.test.js.map +1 -0
  20. package/dist/__tests__/local-mirror.test.d.ts +1 -0
  21. package/dist/__tests__/local-mirror.test.js +95 -0
  22. package/dist/__tests__/local-mirror.test.js.map +1 -0
  23. package/dist/__tests__/pipeline-ingestion.test.d.ts +1 -0
  24. package/dist/__tests__/pipeline-ingestion.test.js +161 -0
  25. package/dist/__tests__/pipeline-ingestion.test.js.map +1 -0
  26. package/dist/__tests__/pipeline-scope-resolver.test.d.ts +1 -0
  27. package/dist/__tests__/pipeline-scope-resolver.test.js +51 -0
  28. package/dist/__tests__/pipeline-scope-resolver.test.js.map +1 -0
  29. package/dist/__tests__/pipeline-trust-tagger.test.d.ts +1 -0
  30. package/dist/__tests__/pipeline-trust-tagger.test.js +24 -0
  31. package/dist/__tests__/pipeline-trust-tagger.test.js.map +1 -0
  32. package/dist/__tests__/prompt-resource.test.d.ts +1 -0
  33. package/dist/__tests__/prompt-resource.test.js +218 -0
  34. package/dist/__tests__/prompt-resource.test.js.map +1 -0
  35. package/dist/__tests__/read-claude-memory-tree.test.d.ts +1 -0
  36. package/dist/__tests__/read-claude-memory-tree.test.js +37 -0
  37. package/dist/__tests__/read-claude-memory-tree.test.js.map +1 -0
  38. package/dist/__tests__/refresh.test.d.ts +1 -0
  39. package/dist/__tests__/refresh.test.js +73 -0
  40. package/dist/__tests__/refresh.test.js.map +1 -0
  41. package/dist/__tests__/trust-ledger.test.d.ts +1 -0
  42. package/dist/__tests__/trust-ledger.test.js +55 -0
  43. package/dist/__tests__/trust-ledger.test.js.map +1 -0
  44. package/dist/auto-handoff.d.ts +15 -0
  45. package/dist/auto-handoff.js +53 -0
  46. package/dist/auto-handoff.js.map +1 -0
  47. package/dist/cli/read-claude-memory-tree.d.ts +7 -0
  48. package/dist/cli/read-claude-memory-tree.js +65 -0
  49. package/dist/cli/read-claude-memory-tree.js.map +1 -0
  50. package/dist/cli/sync-memory.d.ts +2 -0
  51. package/dist/cli/sync-memory.js +155 -0
  52. package/dist/cli/sync-memory.js.map +1 -0
  53. package/dist/config.d.ts +11 -0
  54. package/dist/config.js +51 -0
  55. package/dist/config.js.map +1 -0
  56. package/dist/hydration.d.ts +2 -0
  57. package/dist/hydration.js +62 -0
  58. package/dist/hydration.js.map +1 -0
  59. package/dist/index.js +173 -11
  60. package/dist/index.js.map +1 -1
  61. package/dist/local-mirror.d.ts +15 -0
  62. package/dist/local-mirror.js +56 -0
  63. package/dist/local-mirror.js.map +1 -0
  64. package/dist/pipeline/dedupe.d.ts +11 -0
  65. package/dist/pipeline/dedupe.js +21 -0
  66. package/dist/pipeline/dedupe.js.map +1 -0
  67. package/dist/pipeline/ingestion.d.ts +56 -0
  68. package/dist/pipeline/ingestion.js +86 -0
  69. package/dist/pipeline/ingestion.js.map +1 -0
  70. package/dist/pipeline/scope-resolver.d.ts +15 -0
  71. package/dist/pipeline/scope-resolver.js +28 -0
  72. package/dist/pipeline/scope-resolver.js.map +1 -0
  73. package/dist/pipeline/trust-tagger.d.ts +10 -0
  74. package/dist/pipeline/trust-tagger.js +12 -0
  75. package/dist/pipeline/trust-tagger.js.map +1 -0
  76. package/dist/pipeline/types.d.ts +41 -0
  77. package/dist/pipeline/types.js +6 -0
  78. package/dist/pipeline/types.js.map +1 -0
  79. package/dist/prompt-resource.d.ts +2 -0
  80. package/dist/prompt-resource.js +77 -0
  81. package/dist/prompt-resource.js.map +1 -0
  82. package/dist/refresh.d.ts +3 -0
  83. package/dist/refresh.js +25 -0
  84. package/dist/refresh.js.map +1 -0
  85. package/dist/review/cli-review.d.ts +10 -0
  86. package/dist/review/cli-review.js +47 -0
  87. package/dist/review/cli-review.js.map +1 -0
  88. package/dist/sources/local-claude.d.ts +11 -0
  89. package/dist/sources/local-claude.js +137 -0
  90. package/dist/sources/local-claude.js.map +1 -0
  91. package/dist/sources/types.d.ts +53 -0
  92. package/dist/sources/types.js +9 -0
  93. package/dist/sources/types.js.map +1 -0
  94. package/dist/trust-ledger.d.ts +8 -0
  95. package/dist/trust-ledger.js +61 -0
  96. package/dist/trust-ledger.js.map +1 -0
  97. package/dist/types.d.ts +45 -0
  98. package/dist/types.js +2 -0
  99. package/dist/types.js.map +1 -0
  100. package/package.json +5 -3
package/dist/index.js CHANGED
@@ -9,10 +9,14 @@
9
9
  */
10
10
  import { Server } from '@modelcontextprotocol/sdk/server/index.js';
11
11
  import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
12
- import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
12
+ import { CallToolRequestSchema, GetPromptRequestSchema, ListPromptsRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
13
13
  import { readFileSync, writeFileSync, mkdirSync, existsSync } from 'fs';
14
14
  import { join } from 'path';
15
15
  import { homedir } from 'os';
16
+ import { hydrateIdentity } from './hydration.js';
17
+ import { assemblePrompt } from './prompt-resource.js';
18
+ import { startRefreshTimer, stopRefreshTimer } from './refresh.js';
19
+ import { ActivityTracker, setupAutoHandoff } from './auto-handoff.js';
16
20
  // ── Config ──────────────────────────────────────────────
17
21
  const AIS_URL = process.env['AIS_URL'] ?? 'https://ais.agentsandswarms.ai';
18
22
  const CREDS_DIR = join(homedir(), '.aismemory');
@@ -58,6 +62,78 @@ async function aisGet(path, token) {
58
62
  });
59
63
  return res.json();
60
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
+ }
92
+ /**
93
+ * After authenticating, check if the user already has agents.
94
+ * If so, use the first active one instead of the newly-created provisional agent.
95
+ * User can override with AIS_AGENT_ID or AIS_AGENT_NAME env vars.
96
+ */
97
+ async function resolveAgent(token, fallbackAgentId, fallbackTenantId) {
98
+ // Explicit env var overrides everything
99
+ const envAgentId = process.env['AIS_AGENT_ID'];
100
+ if (envAgentId) {
101
+ stderr(`Using agent from AIS_AGENT_ID: ${envAgentId}`);
102
+ return { agentId: envAgentId, tenantId: fallbackTenantId };
103
+ }
104
+ try {
105
+ const res = await aisGet('/v1/agents', token);
106
+ const agents = res.data?.agents?.filter((a) => a.status === 'active') ?? [];
107
+ if (agents.length === 0) {
108
+ stderr(`No existing agents found. Using new agent: ${fallbackAgentId}`);
109
+ return { agentId: fallbackAgentId, tenantId: fallbackTenantId };
110
+ }
111
+ // Check for name match via AIS_AGENT_NAME
112
+ const envName = process.env['AIS_AGENT_NAME'];
113
+ if (envName) {
114
+ const match = agents.find((a) => a.name.toLowerCase() === envName.toLowerCase());
115
+ if (match) {
116
+ stderr(`Using agent "${match.name}" (matched AIS_AGENT_NAME)`);
117
+ return { agentId: match.id, tenantId: fallbackTenantId };
118
+ }
119
+ stderr(`Warning: AIS_AGENT_NAME="${envName}" not found. Available: ${agents.map((a) => a.name).join(', ')}`);
120
+ }
121
+ // Use the first existing agent
122
+ const chosen = agents[0];
123
+ stderr(`Connected to existing agent "${chosen.name}" (${chosen.id})`);
124
+ if (agents.length > 1) {
125
+ stderr(`You have ${agents.length} agents. Set AIS_AGENT_NAME to choose a different one:`);
126
+ for (const a of agents) {
127
+ stderr(` - ${a.name}`);
128
+ }
129
+ }
130
+ return { agentId: chosen.id, tenantId: fallbackTenantId };
131
+ }
132
+ catch {
133
+ stderr(`Could not list agents. Using new agent: ${fallbackAgentId}`);
134
+ return { agentId: fallbackAgentId, tenantId: fallbackTenantId };
135
+ }
136
+ }
61
137
  async function authenticate() {
62
138
  stderr('Starting authentication...');
63
139
  const authRes = await aisPost('/v1/oauth/device/authorize', {
@@ -66,13 +142,26 @@ async function authenticate() {
66
142
  if (!authRes.success || !authRes.data) {
67
143
  throw new Error(`Authentication failed: ${authRes.error?.message ?? 'Unknown error'}`);
68
144
  }
69
- const { device_code, user_code, verification_uri, verification_uri_complete, interval, agent_id, provisional_tenant_id } = authRes.data;
145
+ const { device_code, user_code, verification_uri_complete, interval, agent_id, provisional_tenant_id } = authRes.data;
146
+ stderr('');
147
+ stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
148
+ stderr(' aismemory — memory bond required');
149
+ stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
70
150
  stderr('');
71
- stderr('=== Authentication Required ===');
72
- stderr(`Visit: ${verification_uri_complete}`);
73
- stderr(`Or go to ${verification_uri} and enter code: ${user_code}`);
74
- stderr('Waiting for approval...');
151
+ stderr(` Bond URL : ${verification_uri_complete}`);
152
+ stderr(` Code : ${user_code}`);
75
153
  stderr('');
154
+ stderr('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');
155
+ stderr('');
156
+ stderr('[ AGENT INSTRUCTION ]');
157
+ stderr('Share the bond URL with the user in the chat — do NOT ask');
158
+ stderr('them to look in their terminal or config files.');
159
+ stderr('');
160
+ stderr('Suggested message to send the user:');
161
+ stderr(` "To connect your memory, please click: ${verification_uri_complete}"`);
162
+ stderr(' "It takes about 30 seconds — enter your email and tap Approve."');
163
+ stderr('');
164
+ stderr('Waiting for user approval...');
76
165
  // Poll for token
77
166
  const pollInterval = Math.max(interval, 5) * 1000;
78
167
  const deadline = Date.now() + 30 * 60 * 1000; // 30 min
@@ -81,10 +170,12 @@ async function authenticate() {
81
170
  const pollRes = await aisPost('/v1/oauth/token', { device_code });
82
171
  if (pollRes.access_token) {
83
172
  const expiresAt = new Date(Date.now() + (pollRes.expires_in ?? 604800) * 1000).toISOString();
173
+ // Resolve to an existing agent if available
174
+ const { agentId, tenantId } = await resolveAgent(pollRes.access_token, agent_id, provisional_tenant_id);
84
175
  const creds = {
85
176
  token: pollRes.access_token,
86
- agentId: agent_id,
87
- tenantId: provisional_tenant_id,
177
+ agentId,
178
+ tenantId,
88
179
  expiresAt,
89
180
  };
90
181
  saveCredentials(creds);
@@ -104,6 +195,8 @@ async function authenticate() {
104
195
  }
105
196
  throw new Error('Authentication timed out');
106
197
  }
198
+ let agentContext = null;
199
+ const activityTracker = new ActivityTracker();
107
200
  // ── MCP Tool definitions ────────────────────────────────
108
201
  const tools = [
109
202
  {
@@ -158,6 +251,21 @@ const tools = [
158
251
  },
159
252
  },
160
253
  },
254
+ {
255
+ name: 'agent_load',
256
+ description: 'Load an AIS agent by name for the rest of the session — switches the active agent so subsequent calls to remember, recall, whoami, full_context use the loaded agent. ' +
257
+ 'CALL THIS when the user says "get me <name>", "bring me <name>", "load <name>", "/agent <name>", or "switch to <name>" — those idioms mean "load that agent\'s context and adopt its identity."',
258
+ inputSchema: {
259
+ type: 'object',
260
+ properties: {
261
+ query: {
262
+ type: 'string',
263
+ description: 'Agent name to look up (e.g., "Corbot", "Data", "code-assistant")',
264
+ },
265
+ },
266
+ required: ['query'],
267
+ },
268
+ },
161
269
  ];
162
270
  // ── MCP Server ──────────────────────────────────────────
163
271
  async function main() {
@@ -169,13 +277,34 @@ async function main() {
169
277
  else {
170
278
  stderr(`Authenticated as agent ${creds.agentId}`);
171
279
  }
172
- const { token, agentId } = creds;
280
+ const { token } = creds;
281
+ // Mutable so `agent_load` can switch the session to a different agent.
282
+ let agentId = creds.agentId;
283
+ agentContext = await hydrateIdentity(AIS_URL, agentId, token);
284
+ if (agentContext) {
285
+ stderr(`Agent loaded: ${agentContext.identity.name} (${agentContext.recentMemories.length} memories, ${agentContext.goals.length} goals)`);
286
+ }
287
+ else {
288
+ stderr('Agent identity not loaded — tools work, but no identity prompt');
289
+ }
173
290
  // Create MCP server
174
- const server = new Server({ name: 'aismemory', version: '0.1.0' }, { capabilities: { tools: {} } });
291
+ const server = new Server({ name: 'aismemory', version: '0.2.0' }, { capabilities: { tools: {}, prompts: {} } });
175
292
  server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools }));
293
+ server.setRequestHandler(ListPromptsRequestSchema, async () => ({
294
+ prompts: agentContext
295
+ ? [{ name: 'agent-identity', description: 'Active AIS agent identity, personality, and context' }]
296
+ : [],
297
+ }));
298
+ server.setRequestHandler(GetPromptRequestSchema, async () => ({
299
+ messages: [{
300
+ role: 'user',
301
+ content: { type: 'text', text: assemblePrompt(agentContext) },
302
+ }],
303
+ }));
176
304
  server.setRequestHandler(CallToolRequestSchema, async (request) => {
177
305
  const { name, arguments: args } = request.params;
178
306
  const a = (args ?? {});
307
+ activityTracker.recordToolUse(name);
179
308
  try {
180
309
  let result;
181
310
  switch (name) {
@@ -185,6 +314,7 @@ async function main() {
185
314
  type: a['type'] ?? 'context',
186
315
  importance: a['importance'] ?? 0.5,
187
316
  }, token);
317
+ activityTracker.recordMemoryStored(String(a['content'] ?? ''));
188
318
  break;
189
319
  case 'recall': {
190
320
  const params = new URLSearchParams();
@@ -212,6 +342,27 @@ async function main() {
212
342
  keyLearnings: a['keyLearnings'] ?? [],
213
343
  }, token);
214
344
  break;
345
+ case 'agent_load': {
346
+ const query = String(a['query'] ?? '').trim();
347
+ if (!query) {
348
+ throw new Error('agent_load: query is required');
349
+ }
350
+ const target = await resolveAgentForLoad(token, query);
351
+ agentId = target.id;
352
+ agentContext = await hydrateIdentity(AIS_URL, agentId, token);
353
+ server.notification({ method: 'notifications/prompts/list_changed' });
354
+ stderr(`agent_load: switched to "${target.name}" (${target.id})`);
355
+ result = {
356
+ success: true,
357
+ agentId: target.id,
358
+ name: target.name,
359
+ did: agentContext?.identity.did ?? null,
360
+ status: target.status,
361
+ memoriesLoaded: agentContext?.recentMemories.length ?? 0,
362
+ goalsLoaded: agentContext?.goals.length ?? 0,
363
+ };
364
+ break;
365
+ }
215
366
  default:
216
367
  return {
217
368
  content: [{ type: 'text', text: JSON.stringify({ error: `Unknown tool: ${name}` }) }],
@@ -231,7 +382,18 @@ async function main() {
231
382
  });
232
383
  const transport = new StdioServerTransport();
233
384
  await server.connect(transport);
234
- stderr('MCP server running. Tools: remember, recall, whoami, full_context, dream, handoff');
385
+ startRefreshTimer(AIS_URL, agentId, token, (memories) => {
386
+ if (agentContext) {
387
+ agentContext.recentMemories = memories;
388
+ }
389
+ server.notification({ method: 'notifications/prompts/list_changed' });
390
+ stderr(`Memory refresh: ${memories.length} memories`);
391
+ });
392
+ setupAutoHandoff(AIS_URL, agentId, token, activityTracker, () => {
393
+ stopRefreshTimer();
394
+ stderr('Session handoff saved');
395
+ });
396
+ stderr(`MCP server running. Tools: ${tools.map((t) => t.name).join(', ')}`);
235
397
  }
236
398
  main().catch((error) => {
237
399
  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":"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"}
@@ -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>;
@@ -0,0 +1,28 @@
1
+ export async function resolveScope(options) {
2
+ const { config, projectPath, activeGoal, sessionTopic, confirmer, saveAsDefault = false } = options;
3
+ if (projectPath) {
4
+ const saved = config.scopePreference(projectPath);
5
+ if (saved)
6
+ return saved;
7
+ }
8
+ let proposed;
9
+ if (activeGoal) {
10
+ proposed = { kind: 'goal', label: activeGoal.description, goalId: activeGoal.id };
11
+ }
12
+ else if (projectPath) {
13
+ const label = projectPath.split('/').filter(Boolean).pop() ?? 'project';
14
+ proposed = { kind: 'project', label, projectPath };
15
+ }
16
+ else if (sessionTopic) {
17
+ proposed = { kind: 'session', label: sessionTopic, topicSummary: sessionTopic };
18
+ }
19
+ else {
20
+ proposed = { kind: 'user-named', label: 'untitled' };
21
+ }
22
+ const confirmed = await confirmer(proposed);
23
+ if (saveAsDefault && projectPath) {
24
+ config.saveScopePreference(projectPath, confirmed);
25
+ }
26
+ return confirmed;
27
+ }
28
+ //# sourceMappingURL=scope-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope-resolver.js","sourceRoot":"","sources":["../../src/pipeline/scope-resolver.ts"],"names":[],"mappings":"AAiBA,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAA6B;IAC9D,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,EAAE,SAAS,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEpG,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,KAAK,GAAG,MAAM,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAClD,IAAI,KAAK;YAAE,OAAO,KAAK,CAAC;IAC1B,CAAC;IAED,IAAI,QAAmB,CAAC;IACxB,IAAI,UAAU,EAAE,CAAC;QACf,QAAQ,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC;IACpF,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,IAAI,SAAS,CAAC;QACxE,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;IACrD,CAAC;SAAM,IAAI,YAAY,EAAE,CAAC;QACxB,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,CAAC;IAClF,CAAC;SAAM,CAAC;QACN,QAAQ,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IACvD,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,SAAS,CAAC,QAAQ,CAAC,CAAC;IAE5C,IAAI,aAAa,IAAI,WAAW,EAAE,CAAC;QACjC,MAAM,CAAC,mBAAmB,CAAC,WAAW,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import type { AisMemoryDraft } from './types.js';
2
+ export interface TrustTagOptions {
3
+ defaultTrustScore: number;
4
+ }
5
+ /**
6
+ * Fills in default trust scores for drafts left at 0 by the adapter.
7
+ * Adapters may optionally pre-set trust (e.g., if they have provider-level
8
+ * confidence signals). This stage is a safety net, not a mandatory rewrite.
9
+ */
10
+ export declare function applyTrustTags(drafts: AisMemoryDraft[], options: TrustTagOptions): AisMemoryDraft[];