@prmichaelsen/remember-mcp 3.14.15 → 3.14.17

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.
@@ -914,7 +914,9 @@ var CONTENT_TYPES = [
914
914
  "ghost",
915
915
  "comment",
916
916
  // Profile
917
- "profile"
917
+ "profile",
918
+ // Agent
919
+ "agent"
918
920
  ];
919
921
  var CONTENT_TYPE_METADATA = {
920
922
  // Core Types
@@ -1230,6 +1232,25 @@ var CONTENT_TYPE_METADATA = {
1230
1232
  category: "cross_user",
1231
1233
  description: "User profile published to the profiles space for people discovery",
1232
1234
  examples: ["User bio", "About me", "Profile introduction"]
1235
+ },
1236
+ // Agent
1237
+ agent: {
1238
+ name: "agent",
1239
+ category: "system",
1240
+ description: "Agent working memory \u2014 observations, preferences, session notes, project tracking",
1241
+ examples: [
1242
+ "User responds well to concise, bulleted answers",
1243
+ "User prefers seeing full code context rather than snippets",
1244
+ 'When user says "fix it", they mean fix and commit without asking',
1245
+ "User is a senior engineer working primarily in TypeScript",
1246
+ "User timezone is US Central, typically active 9am-11pm",
1247
+ "User is building agentbase.me \u2014 an AI integration platform on Cloudflare Workers",
1248
+ "Auth system redesign planned for Q2 \u2014 user wants JWT replaced with session cookies",
1249
+ "User tracking 3 active projects: agentbase.me, remember-core, agentbase-mobile",
1250
+ "Milestone M36 (Notifications) nearly complete \u2014 4 tasks remaining as of March 2026",
1251
+ "Follow up March 10: revisit subscription tier pricing discussion"
1252
+ ],
1253
+ common_fields: ["observations", "preferences", "summaries", "follow_ups"]
1233
1254
  }
1234
1255
  };
1235
1256
  function isValidContentType(type) {
@@ -1515,11 +1536,23 @@ function buildCombinedSearchFilters(collection, filters) {
1515
1536
  function buildDocTypeFilters(collection, docType, filters) {
1516
1537
  const filterList = [];
1517
1538
  filterList.push(collection.filter.byProperty("doc_type").equal(docType));
1518
- if (docType === "memory" && filters?.types && filters.types.length > 0) {
1519
- if (filters.types.length === 1) {
1520
- filterList.push(collection.filter.byProperty("content_type").equal(filters.types[0]));
1539
+ if (docType === "memory") {
1540
+ const DEFAULT_EXCLUDED_TYPES = ["agent"];
1541
+ if (filters?.types && filters.types.length > 0) {
1542
+ if (filters.types.length === 1) {
1543
+ filterList.push(collection.filter.byProperty("content_type").equal(filters.types[0]));
1544
+ } else {
1545
+ filterList.push(collection.filter.byProperty("content_type").containsAny(filters.types));
1546
+ }
1521
1547
  } else {
1522
- filterList.push(collection.filter.byProperty("content_type").containsAny(filters.types));
1548
+ for (const excludedType of DEFAULT_EXCLUDED_TYPES) {
1549
+ filterList.push(collection.filter.byProperty("content_type").notEqual(excludedType));
1550
+ }
1551
+ }
1552
+ if (filters?.exclude_types && filters.exclude_types.length > 0) {
1553
+ for (const excludedType of filters.exclude_types) {
1554
+ filterList.push(collection.filter.byProperty("content_type").notEqual(excludedType));
1555
+ }
1523
1556
  }
1524
1557
  }
1525
1558
  if (filters?.weight_min !== void 0) {
@@ -2018,6 +2051,7 @@ var MemoryService = class {
2018
2051
  parent_id: input.parent_id ?? null,
2019
2052
  thread_root_id: input.thread_root_id ?? null,
2020
2053
  moderation_flags: input.moderation_flags ?? [],
2054
+ follow_up_at: input.follow_up_at || null,
2021
2055
  space_ids: [],
2022
2056
  group_ids: []
2023
2057
  };
@@ -2402,6 +2436,31 @@ var RelationshipService = class {
2402
2436
  this.logger.error(`Failed to update relationship_count for ${memoryId}:`, { error: error?.message || String(error) });
2403
2437
  }
2404
2438
  }
2439
+ // ── Get by ID ────────────────────────────────────────────────────────
2440
+ async getById(relationshipId) {
2441
+ const result = await this.collection.query.fetchObjectById(relationshipId, {
2442
+ returnProperties: [
2443
+ "user_id",
2444
+ "related_memory_ids",
2445
+ "relationship_type",
2446
+ "observation",
2447
+ "strength",
2448
+ "confidence",
2449
+ "source",
2450
+ "tags",
2451
+ "created_at",
2452
+ "updated_at",
2453
+ "version"
2454
+ ]
2455
+ });
2456
+ if (!result) {
2457
+ return { found: false };
2458
+ }
2459
+ return {
2460
+ found: true,
2461
+ relationship: { id: relationshipId, ...result.properties }
2462
+ };
2463
+ }
2405
2464
  // ── Create ──────────────────────────────────────────────────────────
2406
2465
  async create(input) {
2407
2466
  if (input.memory_ids.length < 2) {
@@ -2719,6 +2778,8 @@ var COMMON_MEMORY_PROPERTIES = [
2719
2778
  { name: "parent_id", dataType: configure.dataType.TEXT },
2720
2779
  { name: "thread_root_id", dataType: configure.dataType.TEXT },
2721
2780
  { name: "moderation_flags", dataType: configure.dataType.TEXT_ARRAY },
2781
+ // Agent follow-up tracking
2782
+ { name: "follow_up_at", dataType: configure.dataType.DATE },
2722
2783
  // Soft delete
2723
2784
  { name: "deleted_at", dataType: configure.dataType.DATE },
2724
2785
  { name: "deleted_by", dataType: configure.dataType.TEXT },
@@ -3547,6 +3608,9 @@ var SpaceService = class {
3547
3608
  }
3548
3609
  };
3549
3610
 
3611
+ // node_modules/@prmichaelsen/remember-core/dist/services/job.service.js
3612
+ var JOBS_COLLECTION = `${BASE}.jobs`;
3613
+
3550
3614
  // node_modules/@prmichaelsen/remember-core/dist/services/rem.state.js
3551
3615
  var REM_STATE_COLLECTION = `${BASE}.rem_state`;
3552
3616
 
package/dist/server.js CHANGED
@@ -918,7 +918,9 @@ var CONTENT_TYPES = [
918
918
  "ghost",
919
919
  "comment",
920
920
  // Profile
921
- "profile"
921
+ "profile",
922
+ // Agent
923
+ "agent"
922
924
  ];
923
925
  var CONTENT_TYPE_METADATA = {
924
926
  // Core Types
@@ -1234,6 +1236,25 @@ var CONTENT_TYPE_METADATA = {
1234
1236
  category: "cross_user",
1235
1237
  description: "User profile published to the profiles space for people discovery",
1236
1238
  examples: ["User bio", "About me", "Profile introduction"]
1239
+ },
1240
+ // Agent
1241
+ agent: {
1242
+ name: "agent",
1243
+ category: "system",
1244
+ description: "Agent working memory \u2014 observations, preferences, session notes, project tracking",
1245
+ examples: [
1246
+ "User responds well to concise, bulleted answers",
1247
+ "User prefers seeing full code context rather than snippets",
1248
+ 'When user says "fix it", they mean fix and commit without asking',
1249
+ "User is a senior engineer working primarily in TypeScript",
1250
+ "User timezone is US Central, typically active 9am-11pm",
1251
+ "User is building agentbase.me \u2014 an AI integration platform on Cloudflare Workers",
1252
+ "Auth system redesign planned for Q2 \u2014 user wants JWT replaced with session cookies",
1253
+ "User tracking 3 active projects: agentbase.me, remember-core, agentbase-mobile",
1254
+ "Milestone M36 (Notifications) nearly complete \u2014 4 tasks remaining as of March 2026",
1255
+ "Follow up March 10: revisit subscription tier pricing discussion"
1256
+ ],
1257
+ common_fields: ["observations", "preferences", "summaries", "follow_ups"]
1237
1258
  }
1238
1259
  };
1239
1260
  function isValidContentType(type) {
@@ -1519,11 +1540,23 @@ function buildCombinedSearchFilters(collection, filters) {
1519
1540
  function buildDocTypeFilters(collection, docType, filters) {
1520
1541
  const filterList = [];
1521
1542
  filterList.push(collection.filter.byProperty("doc_type").equal(docType));
1522
- if (docType === "memory" && filters?.types && filters.types.length > 0) {
1523
- if (filters.types.length === 1) {
1524
- filterList.push(collection.filter.byProperty("content_type").equal(filters.types[0]));
1543
+ if (docType === "memory") {
1544
+ const DEFAULT_EXCLUDED_TYPES = ["agent"];
1545
+ if (filters?.types && filters.types.length > 0) {
1546
+ if (filters.types.length === 1) {
1547
+ filterList.push(collection.filter.byProperty("content_type").equal(filters.types[0]));
1548
+ } else {
1549
+ filterList.push(collection.filter.byProperty("content_type").containsAny(filters.types));
1550
+ }
1525
1551
  } else {
1526
- filterList.push(collection.filter.byProperty("content_type").containsAny(filters.types));
1552
+ for (const excludedType of DEFAULT_EXCLUDED_TYPES) {
1553
+ filterList.push(collection.filter.byProperty("content_type").notEqual(excludedType));
1554
+ }
1555
+ }
1556
+ if (filters?.exclude_types && filters.exclude_types.length > 0) {
1557
+ for (const excludedType of filters.exclude_types) {
1558
+ filterList.push(collection.filter.byProperty("content_type").notEqual(excludedType));
1559
+ }
1527
1560
  }
1528
1561
  }
1529
1562
  if (filters?.weight_min !== void 0) {
@@ -2022,6 +2055,7 @@ var MemoryService = class {
2022
2055
  parent_id: input.parent_id ?? null,
2023
2056
  thread_root_id: input.thread_root_id ?? null,
2024
2057
  moderation_flags: input.moderation_flags ?? [],
2058
+ follow_up_at: input.follow_up_at || null,
2025
2059
  space_ids: [],
2026
2060
  group_ids: []
2027
2061
  };
@@ -2406,6 +2440,31 @@ var RelationshipService = class {
2406
2440
  this.logger.error(`Failed to update relationship_count for ${memoryId}:`, { error: error?.message || String(error) });
2407
2441
  }
2408
2442
  }
2443
+ // ── Get by ID ────────────────────────────────────────────────────────
2444
+ async getById(relationshipId) {
2445
+ const result = await this.collection.query.fetchObjectById(relationshipId, {
2446
+ returnProperties: [
2447
+ "user_id",
2448
+ "related_memory_ids",
2449
+ "relationship_type",
2450
+ "observation",
2451
+ "strength",
2452
+ "confidence",
2453
+ "source",
2454
+ "tags",
2455
+ "created_at",
2456
+ "updated_at",
2457
+ "version"
2458
+ ]
2459
+ });
2460
+ if (!result) {
2461
+ return { found: false };
2462
+ }
2463
+ return {
2464
+ found: true,
2465
+ relationship: { id: relationshipId, ...result.properties }
2466
+ };
2467
+ }
2409
2468
  // ── Create ──────────────────────────────────────────────────────────
2410
2469
  async create(input) {
2411
2470
  if (input.memory_ids.length < 2) {
@@ -2723,6 +2782,8 @@ var COMMON_MEMORY_PROPERTIES = [
2723
2782
  { name: "parent_id", dataType: configure.dataType.TEXT },
2724
2783
  { name: "thread_root_id", dataType: configure.dataType.TEXT },
2725
2784
  { name: "moderation_flags", dataType: configure.dataType.TEXT_ARRAY },
2785
+ // Agent follow-up tracking
2786
+ { name: "follow_up_at", dataType: configure.dataType.DATE },
2726
2787
  // Soft delete
2727
2788
  { name: "deleted_at", dataType: configure.dataType.DATE },
2728
2789
  { name: "deleted_by", dataType: configure.dataType.TEXT },
@@ -3551,6 +3612,9 @@ var SpaceService = class {
3551
3612
  }
3552
3613
  };
3553
3614
 
3615
+ // node_modules/@prmichaelsen/remember-core/dist/services/job.service.js
3616
+ var JOBS_COLLECTION = `${BASE}.jobs`;
3617
+
3554
3618
  // node_modules/@prmichaelsen/remember-core/dist/services/rem.state.js
3555
3619
  var REM_STATE_COLLECTION = `${BASE}.rem_state`;
3556
3620
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prmichaelsen/remember-mcp",
3
- "version": "3.14.15",
3
+ "version": "3.14.17",
4
4
  "description": "Multi-tenant memory system MCP server with vector search and relationships",
5
5
  "main": "dist/server.js",
6
6
  "type": "module",
@@ -50,7 +50,7 @@
50
50
  "@modelcontextprotocol/sdk": "^1.0.4",
51
51
  "@prmichaelsen/firebase-admin-sdk-v8": "^2.2.0",
52
52
  "@prmichaelsen/mcp-auth": "^7.0.4",
53
- "@prmichaelsen/remember-core": "^0.24.2",
53
+ "@prmichaelsen/remember-core": "^0.27.0",
54
54
  "dotenv": "^16.4.5",
55
55
  "uuid": "^13.0.0",
56
56
  "weaviate-client": "^3.2.0"