hippocampus-mcp 1.0.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 (70) hide show
  1. package/README.md +284 -0
  2. package/dist/aws/credentials-provider.d.ts +20 -0
  3. package/dist/aws/credentials-provider.d.ts.map +1 -0
  4. package/dist/aws/credentials-provider.js +107 -0
  5. package/dist/aws/credentials-provider.js.map +1 -0
  6. package/dist/config/environment.d.ts +12 -0
  7. package/dist/config/environment.d.ts.map +1 -0
  8. package/dist/config/environment.js +42 -0
  9. package/dist/config/environment.js.map +1 -0
  10. package/dist/config/index.d.ts +2 -0
  11. package/dist/config/index.d.ts.map +1 -0
  12. package/dist/config/index.js +2 -0
  13. package/dist/config/index.js.map +1 -0
  14. package/dist/data/dynamodb-client.d.ts +25 -0
  15. package/dist/data/dynamodb-client.d.ts.map +1 -0
  16. package/dist/data/dynamodb-client.js +107 -0
  17. package/dist/data/dynamodb-client.js.map +1 -0
  18. package/dist/data/entity-manager.d.ts +31 -0
  19. package/dist/data/entity-manager.d.ts.map +1 -0
  20. package/dist/data/entity-manager.js +330 -0
  21. package/dist/data/entity-manager.js.map +1 -0
  22. package/dist/data/models.d.ts +67 -0
  23. package/dist/data/models.d.ts.map +1 -0
  24. package/dist/data/models.js +19 -0
  25. package/dist/data/models.js.map +1 -0
  26. package/dist/data/preference-manager.d.ts +11 -0
  27. package/dist/data/preference-manager.d.ts.map +1 -0
  28. package/dist/data/preference-manager.js +47 -0
  29. package/dist/data/preference-manager.js.map +1 -0
  30. package/dist/data/search-engine.d.ts +19 -0
  31. package/dist/data/search-engine.d.ts.map +1 -0
  32. package/dist/data/search-engine.js +164 -0
  33. package/dist/data/search-engine.js.map +1 -0
  34. package/dist/index.d.ts +3 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +105 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/mcp/resource-registry.d.ts +18 -0
  39. package/dist/mcp/resource-registry.d.ts.map +1 -0
  40. package/dist/mcp/resource-registry.js +140 -0
  41. package/dist/mcp/resource-registry.js.map +1 -0
  42. package/dist/mcp/tool-handler.d.ts +37 -0
  43. package/dist/mcp/tool-handler.d.ts.map +1 -0
  44. package/dist/mcp/tool-handler.js +221 -0
  45. package/dist/mcp/tool-handler.js.map +1 -0
  46. package/dist/mcp/tool-registry.d.ts +6 -0
  47. package/dist/mcp/tool-registry.d.ts.map +1 -0
  48. package/dist/mcp/tool-registry.js +619 -0
  49. package/dist/mcp/tool-registry.js.map +1 -0
  50. package/dist/protocol/jsonrpc-handler.d.ts +36 -0
  51. package/dist/protocol/jsonrpc-handler.d.ts.map +1 -0
  52. package/dist/protocol/jsonrpc-handler.js +143 -0
  53. package/dist/protocol/jsonrpc-handler.js.map +1 -0
  54. package/dist/protocol/stdio-handler.d.ts +20 -0
  55. package/dist/protocol/stdio-handler.d.ts.map +1 -0
  56. package/dist/protocol/stdio-handler.js +100 -0
  57. package/dist/protocol/stdio-handler.js.map +1 -0
  58. package/dist/protocol/types.d.ts +38 -0
  59. package/dist/protocol/types.d.ts.map +1 -0
  60. package/dist/protocol/types.js +11 -0
  61. package/dist/protocol/types.js.map +1 -0
  62. package/dist/utils/errors.d.ts +2 -0
  63. package/dist/utils/errors.d.ts.map +1 -0
  64. package/dist/utils/errors.js +2 -0
  65. package/dist/utils/errors.js.map +1 -0
  66. package/dist/utils/logger.d.ts +2 -0
  67. package/dist/utils/logger.d.ts.map +1 -0
  68. package/dist/utils/logger.js +2 -0
  69. package/dist/utils/logger.js.map +1 -0
  70. package/package.json +81 -0
@@ -0,0 +1,31 @@
1
+ import { DynamoDBClientWrapper } from './dynamodb-client.js';
2
+ import { Person, Event, Task, Place, Note } from './models.js';
3
+ export type EntityType = 'person' | 'event' | 'task' | 'place' | 'note';
4
+ export type ManagedEntity = Person | Event | Task | Place | Note;
5
+ export declare const SUGGESTED_NOTE_CATEGORIES: readonly ["work_log", "personal_journal", "meeting_notes", "ideas", "reference"];
6
+ export declare class EntityManager {
7
+ private readonly client;
8
+ constructor(client: DynamoDBClientWrapper);
9
+ addPerson(data: Omit<Person, 'entity_type' | 'id' | 'created_at' | 'updated_at'>): Promise<Person>;
10
+ getPerson(personId?: string, personName?: string): Promise<Person | null>;
11
+ updatePerson(personId: string, fields: Partial<Omit<Person, 'entity_type' | 'id' | 'created_at' | 'updated_at'>>): Promise<Person>;
12
+ searchPeople(query: string): Promise<Person[]>;
13
+ addEvent(data: Omit<Event, 'entity_type' | 'id' | 'created_at' | 'updated_at'>): Promise<Event>;
14
+ getEvent(eventId: string): Promise<Event | null>;
15
+ listEvents(startDate?: string, endDate?: string): Promise<Event[]>;
16
+ updateEvent(eventId: string, fields: Partial<Omit<Event, 'entity_type' | 'id' | 'created_at' | 'updated_at'>>): Promise<Event>;
17
+ addTask(data: Omit<Task, 'entity_type' | 'id' | 'created_at' | 'updated_at'>): Promise<Task>;
18
+ getTask(taskId: string): Promise<Task | null>;
19
+ listTasks(status?: string, priority?: string): Promise<Task[]>;
20
+ updateTask(taskId: string, fields: Partial<Omit<Task, 'entity_type' | 'id' | 'created_at' | 'updated_at'>>): Promise<Task>;
21
+ addPlace(data: Omit<Place, 'entity_type' | 'id' | 'created_at' | 'updated_at'>): Promise<Place>;
22
+ getPlace(placeId?: string, placeName?: string): Promise<Place | null>;
23
+ searchPlaces(query: string): Promise<Place[]>;
24
+ updatePlace(placeId: string, fields: Partial<Omit<Place, 'entity_type' | 'id' | 'created_at' | 'updated_at'>>): Promise<Place>;
25
+ addNote(data: Omit<Note, 'entity_type' | 'id' | 'created_at' | 'updated_at'>): Promise<Note>;
26
+ getNote(noteId: string): Promise<Note | null>;
27
+ listNotes(category?: string, tags?: string[]): Promise<Note[]>;
28
+ updateNote(noteId: string, fields: Partial<Omit<Note, 'entity_type' | 'id' | 'created_at' | 'updated_at'>>): Promise<Note>;
29
+ }
30
+ export declare function createEntityManager(client: DynamoDBClientWrapper): EntityManager;
31
+ //# sourceMappingURL=entity-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-manager.d.ts","sourceRoot":"","sources":["../../src/data/entity-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,330 @@
1
+ import { v4 as uuidv4 } from 'uuid';
2
+ export const SUGGESTED_NOTE_CATEGORIES = [
3
+ 'work_log',
4
+ 'personal_journal',
5
+ 'meeting_notes',
6
+ 'ideas',
7
+ 'reference',
8
+ ];
9
+ export class EntityManager {
10
+ client;
11
+ constructor(client) {
12
+ this.client = client;
13
+ }
14
+ async addPerson(data) {
15
+ const now = new Date().toISOString();
16
+ const person = {
17
+ entity_type: 'person',
18
+ id: uuidv4(),
19
+ created_at: now,
20
+ updated_at: now,
21
+ ...data,
22
+ };
23
+ await this.client.putItem(person);
24
+ return person;
25
+ }
26
+ async getPerson(personId, personName) {
27
+ if (personId) {
28
+ const result = await this.client.getItem({
29
+ entity_type: 'person',
30
+ id: personId,
31
+ });
32
+ return result.Item ? result.Item : null;
33
+ }
34
+ if (personName) {
35
+ const result = await this.client.query({
36
+ KeyConditionExpression: 'entity_type = :entity_type',
37
+ FilterExpression: '#name = :name',
38
+ ExpressionAttributeNames: {
39
+ '#name': 'name',
40
+ },
41
+ ExpressionAttributeValues: {
42
+ ':entity_type': 'person',
43
+ ':name': personName,
44
+ },
45
+ });
46
+ return result.Items && result.Items.length > 0 ? result.Items[0] : null;
47
+ }
48
+ return null;
49
+ }
50
+ async updatePerson(personId, fields) {
51
+ const existing = await this.getPerson(personId);
52
+ if (!existing) {
53
+ throw new Error(`Person with id ${personId} not found`);
54
+ }
55
+ const updated = {
56
+ ...existing,
57
+ ...fields,
58
+ updated_at: new Date().toISOString(),
59
+ };
60
+ await this.client.putItem(updated);
61
+ return updated;
62
+ }
63
+ async searchPeople(query) {
64
+ const result = await this.client.query({
65
+ KeyConditionExpression: 'entity_type = :entity_type',
66
+ FilterExpression: 'contains(#name, :query) OR contains(notes, :query) OR contains(relationship, :query)',
67
+ ExpressionAttributeNames: {
68
+ '#name': 'name',
69
+ },
70
+ ExpressionAttributeValues: {
71
+ ':entity_type': 'person',
72
+ ':query': query,
73
+ },
74
+ });
75
+ return (result.Items || []);
76
+ }
77
+ async addEvent(data) {
78
+ const now = new Date().toISOString();
79
+ const event = {
80
+ entity_type: 'event',
81
+ id: uuidv4(),
82
+ created_at: now,
83
+ updated_at: now,
84
+ ...data,
85
+ };
86
+ await this.client.putItem(event);
87
+ return event;
88
+ }
89
+ async getEvent(eventId) {
90
+ const result = await this.client.getItem({
91
+ entity_type: 'event',
92
+ id: eventId,
93
+ });
94
+ return result.Item ? result.Item : null;
95
+ }
96
+ async listEvents(startDate, endDate) {
97
+ let filterExpression;
98
+ const expressionAttributeValues = {
99
+ ':entity_type': 'event',
100
+ };
101
+ if (startDate && endDate) {
102
+ filterExpression = '#date BETWEEN :start_date AND :end_date';
103
+ expressionAttributeValues[':start_date'] = startDate;
104
+ expressionAttributeValues[':end_date'] = endDate;
105
+ }
106
+ else if (startDate) {
107
+ filterExpression = '#date >= :start_date';
108
+ expressionAttributeValues[':start_date'] = startDate;
109
+ }
110
+ else if (endDate) {
111
+ filterExpression = '#date <= :end_date';
112
+ expressionAttributeValues[':end_date'] = endDate;
113
+ }
114
+ const result = await this.client.query({
115
+ KeyConditionExpression: 'entity_type = :entity_type',
116
+ FilterExpression: filterExpression,
117
+ ExpressionAttributeNames: filterExpression ? { '#date': 'date' } : undefined,
118
+ ExpressionAttributeValues: expressionAttributeValues,
119
+ });
120
+ return (result.Items || []);
121
+ }
122
+ async updateEvent(eventId, fields) {
123
+ const existing = await this.getEvent(eventId);
124
+ if (!existing) {
125
+ throw new Error(`Event with id ${eventId} not found`);
126
+ }
127
+ const updated = {
128
+ ...existing,
129
+ ...fields,
130
+ updated_at: new Date().toISOString(),
131
+ };
132
+ await this.client.putItem(updated);
133
+ return updated;
134
+ }
135
+ async addTask(data) {
136
+ const now = new Date().toISOString();
137
+ const task = {
138
+ entity_type: 'task',
139
+ id: uuidv4(),
140
+ created_at: now,
141
+ updated_at: now,
142
+ ...data,
143
+ status: data.status || 'todo',
144
+ };
145
+ await this.client.putItem(task);
146
+ return task;
147
+ }
148
+ async getTask(taskId) {
149
+ const result = await this.client.getItem({
150
+ entity_type: 'task',
151
+ id: taskId,
152
+ });
153
+ return result.Item ? result.Item : null;
154
+ }
155
+ async listTasks(status, priority) {
156
+ const filterExpressions = [];
157
+ const expressionAttributeValues = {
158
+ ':entity_type': 'task',
159
+ };
160
+ if (status) {
161
+ filterExpressions.push('#status = :status');
162
+ expressionAttributeValues[':status'] = status;
163
+ }
164
+ if (priority) {
165
+ filterExpressions.push('priority = :priority');
166
+ expressionAttributeValues[':priority'] = priority;
167
+ }
168
+ const result = await this.client.query({
169
+ KeyConditionExpression: 'entity_type = :entity_type',
170
+ FilterExpression: filterExpressions.length > 0 ? filterExpressions.join(' AND ') : undefined,
171
+ ExpressionAttributeNames: status ? { '#status': 'status' } : undefined,
172
+ ExpressionAttributeValues: expressionAttributeValues,
173
+ });
174
+ return (result.Items || []);
175
+ }
176
+ async updateTask(taskId, fields) {
177
+ const existing = await this.getTask(taskId);
178
+ if (!existing) {
179
+ throw new Error(`Task with id ${taskId} not found`);
180
+ }
181
+ const updated = {
182
+ ...existing,
183
+ ...fields,
184
+ updated_at: new Date().toISOString(),
185
+ };
186
+ await this.client.putItem(updated);
187
+ return updated;
188
+ }
189
+ async addPlace(data) {
190
+ const now = new Date().toISOString();
191
+ const place = {
192
+ entity_type: 'place',
193
+ id: uuidv4(),
194
+ created_at: now,
195
+ updated_at: now,
196
+ ...data,
197
+ };
198
+ await this.client.putItem(place);
199
+ return place;
200
+ }
201
+ async getPlace(placeId, placeName) {
202
+ if (placeId) {
203
+ const result = await this.client.getItem({
204
+ entity_type: 'place',
205
+ id: placeId,
206
+ });
207
+ return result.Item ? result.Item : null;
208
+ }
209
+ if (placeName) {
210
+ const result = await this.client.query({
211
+ KeyConditionExpression: 'entity_type = :entity_type',
212
+ FilterExpression: '#name = :name',
213
+ ExpressionAttributeNames: {
214
+ '#name': 'name',
215
+ },
216
+ ExpressionAttributeValues: {
217
+ ':entity_type': 'place',
218
+ ':name': placeName,
219
+ },
220
+ });
221
+ return result.Items && result.Items.length > 0 ? result.Items[0] : null;
222
+ }
223
+ return null;
224
+ }
225
+ async searchPlaces(query) {
226
+ const result = await this.client.query({
227
+ KeyConditionExpression: 'entity_type = :entity_type',
228
+ FilterExpression: 'contains(#name, :query) OR contains(address, :query) OR contains(notes, :query) OR contains(#type, :query)',
229
+ ExpressionAttributeNames: {
230
+ '#name': 'name',
231
+ '#type': 'type',
232
+ },
233
+ ExpressionAttributeValues: {
234
+ ':entity_type': 'place',
235
+ ':query': query,
236
+ },
237
+ });
238
+ return (result.Items || []);
239
+ }
240
+ async updatePlace(placeId, fields) {
241
+ const existing = await this.getPlace(placeId);
242
+ if (!existing) {
243
+ throw new Error(`Place with id ${placeId} not found`);
244
+ }
245
+ const updated = {
246
+ ...existing,
247
+ ...fields,
248
+ updated_at: new Date().toISOString(),
249
+ };
250
+ await this.client.putItem(updated);
251
+ return updated;
252
+ }
253
+ async addNote(data) {
254
+ if (data.category && !SUGGESTED_NOTE_CATEGORIES.includes(data.category)) {
255
+ console.error(JSON.stringify({
256
+ level: 'INFO',
257
+ message: 'Using custom note category',
258
+ category: data.category,
259
+ suggested_categories: SUGGESTED_NOTE_CATEGORIES,
260
+ }));
261
+ }
262
+ const now = new Date().toISOString();
263
+ const note = {
264
+ entity_type: 'note',
265
+ id: uuidv4(),
266
+ created_at: now,
267
+ updated_at: now,
268
+ ...data,
269
+ };
270
+ await this.client.putItem(note);
271
+ return note;
272
+ }
273
+ async getNote(noteId) {
274
+ const result = await this.client.getItem({
275
+ entity_type: 'note',
276
+ id: noteId,
277
+ });
278
+ return result.Item ? result.Item : null;
279
+ }
280
+ async listNotes(category, tags) {
281
+ const filterExpressions = [];
282
+ const expressionAttributeValues = {
283
+ ':entity_type': 'note',
284
+ };
285
+ if (category) {
286
+ filterExpressions.push('category = :category');
287
+ expressionAttributeValues[':category'] = category;
288
+ }
289
+ if (tags && tags.length > 0) {
290
+ const tagConditions = tags.map((tag, index) => {
291
+ const placeholder = `:tag${index}`;
292
+ expressionAttributeValues[placeholder] = tag;
293
+ return `contains(tags, ${placeholder})`;
294
+ });
295
+ filterExpressions.push(`(${tagConditions.join(' OR ')})`);
296
+ }
297
+ const result = await this.client.query({
298
+ KeyConditionExpression: 'entity_type = :entity_type',
299
+ FilterExpression: filterExpressions.length > 0 ? filterExpressions.join(' AND ') : undefined,
300
+ ExpressionAttributeValues: expressionAttributeValues,
301
+ });
302
+ return (result.Items || []);
303
+ }
304
+ async updateNote(noteId, fields) {
305
+ const existing = await this.getNote(noteId);
306
+ if (!existing) {
307
+ throw new Error(`Note with id ${noteId} not found`);
308
+ }
309
+ if (fields.category && !SUGGESTED_NOTE_CATEGORIES.includes(fields.category)) {
310
+ console.error(JSON.stringify({
311
+ level: 'INFO',
312
+ message: 'Updating note to custom category',
313
+ note_id: noteId,
314
+ category: fields.category,
315
+ suggested_categories: SUGGESTED_NOTE_CATEGORIES,
316
+ }));
317
+ }
318
+ const updated = {
319
+ ...existing,
320
+ ...fields,
321
+ updated_at: new Date().toISOString(),
322
+ };
323
+ await this.client.putItem(updated);
324
+ return updated;
325
+ }
326
+ }
327
+ export function createEntityManager(client) {
328
+ return new EntityManager(client);
329
+ }
330
+ //# sourceMappingURL=entity-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"entity-manager.js","sourceRoot":"","sources":["../../src/data/entity-manager.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,67 @@
1
+ interface BaseEntity {
2
+ entity_type: string;
3
+ id: string;
4
+ created_at: string;
5
+ updated_at: string;
6
+ }
7
+ export interface Preference extends BaseEntity {
8
+ entity_type: "preference";
9
+ id: string;
10
+ value: string;
11
+ }
12
+ export interface Person extends BaseEntity {
13
+ entity_type: "person";
14
+ id: string;
15
+ name: string;
16
+ relationship?: string;
17
+ notes?: string;
18
+ contact_info?: Record<string, string>;
19
+ last_interaction?: string;
20
+ }
21
+ export interface Event extends BaseEntity {
22
+ entity_type: "event";
23
+ id: string;
24
+ title: string;
25
+ date: string;
26
+ location?: string;
27
+ attendees?: string[];
28
+ notes?: string;
29
+ }
30
+ export interface Task extends BaseEntity {
31
+ entity_type: "task";
32
+ id: string;
33
+ title: string;
34
+ description?: string;
35
+ priority?: "low" | "medium" | "high";
36
+ due_date?: string;
37
+ status: "todo" | "in_progress" | "done";
38
+ }
39
+ export interface Place extends BaseEntity {
40
+ entity_type: "place";
41
+ id: string;
42
+ name: string;
43
+ address?: string;
44
+ type?: string;
45
+ notes?: string;
46
+ coordinates?: {
47
+ latitude: number;
48
+ longitude: number;
49
+ };
50
+ }
51
+ export interface Note extends BaseEntity {
52
+ entity_type: "note";
53
+ id: string;
54
+ title: string;
55
+ content: string;
56
+ category?: string;
57
+ tags?: string[];
58
+ }
59
+ export type Entity = Preference | Person | Event | Task | Place | Note;
60
+ export declare function isPreference(entity: Entity): entity is Preference;
61
+ export declare function isPerson(entity: Entity): entity is Person;
62
+ export declare function isEvent(entity: Entity): entity is Event;
63
+ export declare function isTask(entity: Entity): entity is Task;
64
+ export declare function isPlace(entity: Entity): entity is Place;
65
+ export declare function isNote(entity: Entity): entity is Note;
66
+ export {};
67
+ //# sourceMappingURL=models.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/data/models.ts"],"names":[],"mappings":"AAaA,UAAU,UAAU;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,UAAW,SAAQ,UAAU;IAC5C,WAAW,EAAE,YAAY,CAAC;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;CACf;AAMD,MAAM,WAAW,MAAO,SAAQ,UAAU;IACxC,WAAW,EAAE,QAAQ,CAAC;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAMD,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAMD,MAAM,WAAW,IAAK,SAAQ,UAAU;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC;CACzC;AAMD,MAAM,WAAW,KAAM,SAAQ,UAAU;IACvC,WAAW,EAAE,OAAO,CAAC;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE;QACZ,QAAQ,EAAE,MAAM,CAAC;QACjB,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AASD,MAAM,WAAW,IAAK,SAAQ,UAAU;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAKD,MAAM,MAAM,MAAM,GAAG,UAAU,GAAG,MAAM,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,GAAG,IAAI,CAAC;AAKvE,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,UAAU,CAEjE;AAKD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,MAAM,CAEzD;AAKD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,KAAK,CAEvD;AAKD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,IAAI,CAErD;AAKD,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,KAAK,CAEvD;AAKD,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,IAAI,IAAI,CAErD"}
@@ -0,0 +1,19 @@
1
+ export function isPreference(entity) {
2
+ return entity.entity_type === "preference";
3
+ }
4
+ export function isPerson(entity) {
5
+ return entity.entity_type === "person";
6
+ }
7
+ export function isEvent(entity) {
8
+ return entity.entity_type === "event";
9
+ }
10
+ export function isTask(entity) {
11
+ return entity.entity_type === "task";
12
+ }
13
+ export function isPlace(entity) {
14
+ return entity.entity_type === "place";
15
+ }
16
+ export function isNote(entity) {
17
+ return entity.entity_type === "note";
18
+ }
19
+ //# sourceMappingURL=models.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/data/models.ts"],"names":[],"mappings":"AAiHA,MAAM,UAAU,YAAY,CAAC,MAAc;IACzC,OAAO,MAAM,CAAC,WAAW,KAAK,YAAY,CAAC;AAC7C,CAAC;AAKD,MAAM,UAAU,QAAQ,CAAC,MAAc;IACrC,OAAO,MAAM,CAAC,WAAW,KAAK,QAAQ,CAAC;AACzC,CAAC;AAKD,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC;AACxC,CAAC;AAKD,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC;AACvC,CAAC;AAKD,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAO,MAAM,CAAC,WAAW,KAAK,OAAO,CAAC;AACxC,CAAC;AAKD,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC;AACvC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { DynamoDBClientWrapper } from './dynamodb-client.js';
2
+ import { Preference } from './models.js';
3
+ export declare class PreferenceManager {
4
+ private readonly client;
5
+ constructor(client: DynamoDBClientWrapper);
6
+ getPreference(preferenceKey: string): Promise<Preference | null>;
7
+ setPreference(preferenceKey: string, preferenceValue: string): Promise<Preference>;
8
+ listPreferences(): Promise<Preference[]>;
9
+ }
10
+ export declare function createPreferenceManager(client: DynamoDBClientWrapper): PreferenceManager;
11
+ //# sourceMappingURL=preference-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference-manager.d.ts","sourceRoot":"","sources":["../../src/data/preference-manager.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAKzC,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;gBAOnC,MAAM,EAAE,qBAAqB;IAYnC,aAAa,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC;IA6BhE,aAAa,CAAC,aAAa,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IA0BlF,eAAe,IAAI,OAAO,CAAC,UAAU,EAAE,CAAC;CAU/C;AAQD,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,qBAAqB,GAAG,iBAAiB,CAExF"}
@@ -0,0 +1,47 @@
1
+ export class PreferenceManager {
2
+ client;
3
+ constructor(client) {
4
+ this.client = client;
5
+ }
6
+ async getPreference(preferenceKey) {
7
+ try {
8
+ const result = await this.client.getItem({
9
+ entity_type: 'preference',
10
+ id: preferenceKey,
11
+ });
12
+ if (!result.Item) {
13
+ return null;
14
+ }
15
+ return result.Item;
16
+ }
17
+ catch (error) {
18
+ return null;
19
+ }
20
+ }
21
+ async setPreference(preferenceKey, preferenceValue) {
22
+ const now = new Date().toISOString();
23
+ const existing = await this.getPreference(preferenceKey);
24
+ const preference = {
25
+ entity_type: 'preference',
26
+ id: preferenceKey,
27
+ value: preferenceValue,
28
+ created_at: existing?.created_at || now,
29
+ updated_at: now,
30
+ };
31
+ await this.client.putItem(preference);
32
+ return preference;
33
+ }
34
+ async listPreferences() {
35
+ const result = await this.client.query({
36
+ KeyConditionExpression: 'entity_type = :entity_type',
37
+ ExpressionAttributeValues: {
38
+ ':entity_type': 'preference',
39
+ },
40
+ });
41
+ return (result.Items || []);
42
+ }
43
+ }
44
+ export function createPreferenceManager(client) {
45
+ return new PreferenceManager(client);
46
+ }
47
+ //# sourceMappingURL=preference-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preference-manager.js","sourceRoot":"","sources":["../../src/data/preference-manager.ts"],"names":[],"mappings":"AAeA,MAAM,OAAO,iBAAiB;IACX,MAAM,CAAwB;IAO/C,YAAY,MAA6B;QACvC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAUD,KAAK,CAAC,aAAa,CAAC,aAAqB;QACvC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC;gBACvC,WAAW,EAAE,YAAY;gBACzB,EAAE,EAAE,aAAa;aAClB,CAAC,CAAC;YAEH,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;gBAEjB,OAAO,IAAI,CAAC;YACd,CAAC;YAED,OAAO,MAAM,CAAC,IAAkB,CAAC;QACnC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAGf,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAWD,KAAK,CAAC,aAAa,CAAC,aAAqB,EAAE,eAAuB;QAChE,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;QAGrC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAe;YAC7B,WAAW,EAAE,YAAY;YACzB,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,eAAe;YACtB,UAAU,EAAE,QAAQ,EAAE,UAAU,IAAI,GAAG;YACvC,UAAU,EAAE,GAAG;SAChB,CAAC;QAEF,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAEtC,OAAO,UAAU,CAAC;IACpB,CAAC;IASD,KAAK,CAAC,eAAe;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC;YACrC,sBAAsB,EAAE,4BAA4B;YACpD,yBAAyB,EAAE;gBACzB,cAAc,EAAE,YAAY;aAC7B;SACF,CAAC,CAAC;QAEH,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAiB,CAAC;IAC9C,CAAC;CACF;AAQD,MAAM,UAAU,uBAAuB,CAAC,MAA6B;IACnE,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { DynamoDBClientWrapper } from './dynamodb-client.js';
2
+ import { Entity } from './models.js';
3
+ export interface SearchResult {
4
+ entity_type: string;
5
+ id: string;
6
+ relevance_score: number;
7
+ preview: string;
8
+ data: Entity;
9
+ }
10
+ export type SearchableEntityType = 'preference' | 'person' | 'event' | 'task' | 'place' | 'note';
11
+ export declare class SearchEngine {
12
+ private readonly client;
13
+ constructor(client: DynamoDBClientWrapper);
14
+ searchAll(query: string, entityType?: SearchableEntityType, limit?: number): Promise<SearchResult[]>;
15
+ private calculateRelevanceScore;
16
+ private generatePreview;
17
+ }
18
+ export declare function createSearchEngine(client: DynamoDBClientWrapper): SearchEngine;
19
+ //# sourceMappingURL=search-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-engine.d.ts","sourceRoot":"","sources":["../../src/data/search-engine.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAgD,MAAM,aAAa,CAAC;AAKnF,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,EAAE,EAAE,MAAM,CAAC;IACX,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAKD,MAAM,MAAM,oBAAoB,GAAG,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,CAAC;AAKjG,qBAAa,YAAY;IACvB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAwB;gBAOnC,MAAM,EAAE,qBAAqB;IAcnC,SAAS,CACb,KAAK,EAAE,MAAM,EACb,UAAU,CAAC,EAAE,oBAAoB,EACjC,KAAK,GAAE,MAAW,GACjB,OAAO,CAAC,YAAY,EAAE,CAAC;IAiE1B,OAAO,CAAC,uBAAuB;IA6G/B,OAAO,CAAC,eAAe;CA0DxB;AAQD,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,YAAY,CAE9E"}