@hasna/mementos 0.3.4 → 0.3.6

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/cli/index.js CHANGED
@@ -3526,8 +3526,7 @@ program2.command("save <key> <value>").description("Save a memory (create or ups
3526
3526
  if (globalOpts.json) {
3527
3527
  outputJson(memory);
3528
3528
  } else {
3529
- console.log(chalk.green("Memory saved:"));
3530
- console.log(formatMemoryDetail(memory));
3529
+ console.log(chalk.green(`Saved: ${memory.key} (${memory.id.slice(0, 8)})`));
3531
3530
  }
3532
3531
  } catch (e) {
3533
3532
  handleError(e);
@@ -3669,8 +3668,7 @@ program2.command("update <id>").description("Update a memory by ID").option("--v
3669
3668
  if (globalOpts.json) {
3670
3669
  outputJson(updated);
3671
3670
  } else {
3672
- console.log(chalk.green("Memory updated:"));
3673
- console.log(formatMemoryDetail(updated));
3671
+ console.log(chalk.green(`Updated: ${updated.key} (${updated.id.slice(0, 8)})`));
3674
3672
  }
3675
3673
  } catch (e) {
3676
3674
  handleError(e);
package/dist/mcp/index.js CHANGED
@@ -4937,19 +4937,19 @@ function formatMemory(m) {
4937
4937
  `);
4938
4938
  }
4939
4939
  server.tool("memory_save", "Save/upsert a memory. scope: global=all agents, shared=project, private=single agent.", {
4940
- key: exports_external.string().describe("Unique key for the memory"),
4941
- value: exports_external.string().describe("Memory content/value"),
4942
- scope: exports_external.enum(["global", "shared", "private"]).optional().describe("Memory scope (default: private)"),
4943
- category: exports_external.enum(["preference", "fact", "knowledge", "history"]).optional().describe("Memory category (default: knowledge)"),
4944
- importance: exports_external.coerce.number().min(1).max(10).optional().describe("Importance 1-10 (default: 5)"),
4945
- tags: exports_external.array(exports_external.string()).optional().describe("Tags for categorization"),
4946
- summary: exports_external.string().optional().describe("Brief summary of the memory"),
4947
- agent_id: exports_external.string().optional().describe("Agent ID (for scoping)"),
4948
- project_id: exports_external.string().optional().describe("Project ID (for scoping)"),
4949
- session_id: exports_external.string().optional().describe("Session ID (for scoping)"),
4950
- ttl_ms: exports_external.coerce.number().optional().describe("Time-to-live in milliseconds"),
4951
- source: exports_external.enum(["user", "agent", "system", "auto", "imported"]).optional().describe("Source of the memory"),
4952
- metadata: exports_external.record(exports_external.unknown()).optional().describe("Arbitrary metadata")
4940
+ key: exports_external.string(),
4941
+ value: exports_external.string(),
4942
+ scope: exports_external.enum(["global", "shared", "private"]).optional(),
4943
+ category: exports_external.enum(["preference", "fact", "knowledge", "history"]).optional(),
4944
+ importance: exports_external.coerce.number().min(1).max(10).optional(),
4945
+ tags: exports_external.array(exports_external.string()).optional(),
4946
+ summary: exports_external.string().optional(),
4947
+ agent_id: exports_external.string().optional(),
4948
+ project_id: exports_external.string().optional(),
4949
+ session_id: exports_external.string().optional(),
4950
+ ttl_ms: exports_external.coerce.number().optional(),
4951
+ source: exports_external.enum(["user", "agent", "system", "auto", "imported"]).optional(),
4952
+ metadata: exports_external.record(exports_external.unknown()).optional()
4953
4953
  }, async (args) => {
4954
4954
  try {
4955
4955
  ensureAutoProject();
@@ -4960,7 +4960,7 @@ server.tool("memory_save", "Save/upsert a memory. scope: global=all agents, shar
4960
4960
  }
4961
4961
  });
4962
4962
  server.tool("memory_recall", "Recall a memory by key. Returns the best matching active memory.", {
4963
- key: exports_external.string().describe("Memory key to recall"),
4963
+ key: exports_external.string(),
4964
4964
  scope: exports_external.enum(["global", "shared", "private"]).optional(),
4965
4965
  agent_id: exports_external.string().optional(),
4966
4966
  project_id: exports_external.string().optional(),
@@ -5006,10 +5006,10 @@ server.tool("memory_list", "List memories. Default: compact lines. full=true for
5006
5006
  project_id: exports_external.string().optional(),
5007
5007
  session_id: exports_external.string().optional(),
5008
5008
  status: exports_external.enum(["active", "archived", "expired"]).optional(),
5009
- limit: exports_external.coerce.number().optional().describe("Max results (default: 10)"),
5009
+ limit: exports_external.coerce.number().optional(),
5010
5010
  offset: exports_external.coerce.number().optional(),
5011
- full: exports_external.boolean().optional().describe("Return full Memory objects as JSON instead of compact lines"),
5012
- fields: exports_external.array(exports_external.string()).optional().describe("Filter fields in full mode: e.g. ['key','value','importance']")
5011
+ full: exports_external.boolean().optional(),
5012
+ fields: exports_external.array(exports_external.string()).optional()
5013
5013
  }, async (args) => {
5014
5014
  try {
5015
5015
  const { full, fields, ...filterArgs } = args;
@@ -5043,7 +5043,7 @@ ${lines.join(`
5043
5043
  }
5044
5044
  });
5045
5045
  server.tool("memory_update", "Update a memory's metadata (value, importance, tags, etc.)", {
5046
- id: exports_external.string().describe("Memory ID (full or partial)"),
5046
+ id: exports_external.string(),
5047
5047
  value: exports_external.string().optional(),
5048
5048
  category: exports_external.enum(["preference", "fact", "knowledge", "history"]).optional(),
5049
5049
  scope: exports_external.enum(["global", "shared", "private"]).optional(),
@@ -5054,7 +5054,7 @@ server.tool("memory_update", "Update a memory's metadata (value, importance, tag
5054
5054
  status: exports_external.enum(["active", "archived", "expired"]).optional(),
5055
5055
  metadata: exports_external.record(exports_external.unknown()).optional(),
5056
5056
  expires_at: exports_external.string().nullable().optional(),
5057
- version: exports_external.coerce.number().describe("Current version (for optimistic locking)")
5057
+ version: exports_external.coerce.number()
5058
5058
  }, async (args) => {
5059
5059
  try {
5060
5060
  const id = resolveId(args.id);
@@ -5067,8 +5067,8 @@ ${formatMemory(memory)}` }] };
5067
5067
  }
5068
5068
  });
5069
5069
  server.tool("memory_forget", "Delete a memory by ID or key", {
5070
- id: exports_external.string().optional().describe("Memory ID (full or partial)"),
5071
- key: exports_external.string().optional().describe("Memory key"),
5070
+ id: exports_external.string().optional(),
5071
+ key: exports_external.string().optional(),
5072
5072
  scope: exports_external.enum(["global", "shared", "private"]).optional(),
5073
5073
  agent_id: exports_external.string().optional(),
5074
5074
  project_id: exports_external.string().optional()
@@ -5093,13 +5093,13 @@ server.tool("memory_forget", "Delete a memory by ID or key", {
5093
5093
  }
5094
5094
  });
5095
5095
  server.tool("memory_search", "Search memories by keyword across key, value, summary, and tags", {
5096
- query: exports_external.string().describe("Search query"),
5096
+ query: exports_external.string(),
5097
5097
  scope: exports_external.enum(["global", "shared", "private"]).optional(),
5098
5098
  category: exports_external.enum(["preference", "fact", "knowledge", "history"]).optional(),
5099
5099
  tags: exports_external.array(exports_external.string()).optional(),
5100
5100
  agent_id: exports_external.string().optional(),
5101
5101
  project_id: exports_external.string().optional(),
5102
- limit: exports_external.coerce.number().optional().describe("Max results (default: 20)")
5102
+ limit: exports_external.coerce.number().optional()
5103
5103
  }, async (args) => {
5104
5104
  try {
5105
5105
  const filter = {
@@ -5195,8 +5195,8 @@ server.tool("memory_import", "Import memories from JSON array", {
5195
5195
  agent_id: exports_external.string().optional(),
5196
5196
  project_id: exports_external.string().optional(),
5197
5197
  metadata: exports_external.record(exports_external.unknown()).optional()
5198
- })).describe("Array of memories to import"),
5199
- overwrite: exports_external.boolean().optional().describe("Overwrite existing (default: true, uses merge dedup)")
5198
+ })),
5199
+ overwrite: exports_external.boolean().optional()
5200
5200
  }, async (args) => {
5201
5201
  try {
5202
5202
  let imported = 0;
@@ -5211,13 +5211,13 @@ server.tool("memory_import", "Import memories from JSON array", {
5211
5211
  }
5212
5212
  });
5213
5213
  server.tool("memory_inject", "Get memory context for system prompt injection. Selects by scope, importance, recency.", {
5214
- agent_id: exports_external.string().optional().describe("Agent ID for scope filtering"),
5215
- project_id: exports_external.string().optional().describe("Project ID for scope filtering"),
5216
- session_id: exports_external.string().optional().describe("Session ID for scope filtering"),
5217
- max_tokens: exports_external.coerce.number().optional().describe("Token budget (default: 500)"),
5214
+ agent_id: exports_external.string().optional(),
5215
+ project_id: exports_external.string().optional(),
5216
+ session_id: exports_external.string().optional(),
5217
+ max_tokens: exports_external.coerce.number().optional(),
5218
5218
  categories: exports_external.array(exports_external.enum(["preference", "fact", "knowledge", "history"])).optional(),
5219
- min_importance: exports_external.coerce.number().optional().describe("Min importance 1-10 (default: 3)"),
5220
- raw: exports_external.boolean().optional().describe("Return plain lines only, no headers or tags")
5219
+ min_importance: exports_external.coerce.number().optional(),
5220
+ raw: exports_external.boolean().optional()
5221
5221
  }, async (args) => {
5222
5222
  try {
5223
5223
  const maxTokens = args.max_tokens || 500;
@@ -5292,9 +5292,9 @@ ${lines.join(`
5292
5292
  }
5293
5293
  });
5294
5294
  server.tool("register_agent", "Register an agent. Idempotent \u2014 same name returns existing agent.", {
5295
- name: exports_external.string().describe("Agent name"),
5296
- description: exports_external.string().optional().describe("Agent description"),
5297
- role: exports_external.string().optional().describe("Agent role")
5295
+ name: exports_external.string(),
5296
+ description: exports_external.string().optional(),
5297
+ role: exports_external.string().optional()
5298
5298
  }, async (args) => {
5299
5299
  try {
5300
5300
  const agent = registerAgent(args.name, args.description, args.role);
@@ -5328,7 +5328,7 @@ ${lines.join(`
5328
5328
  }
5329
5329
  });
5330
5330
  server.tool("get_agent", "Get agent details by ID or name", {
5331
- id: exports_external.string().describe("Agent ID or name")
5331
+ id: exports_external.string()
5332
5332
  }, async (args) => {
5333
5333
  try {
5334
5334
  const agent = getAgent(args.id);
@@ -5352,11 +5352,11 @@ Last seen: ${agent.last_seen_at}`
5352
5352
  }
5353
5353
  });
5354
5354
  server.tool("update_agent", "Update agent name, description, role, or metadata.", {
5355
- id: exports_external.string().describe("Agent ID or name"),
5356
- name: exports_external.string().optional().describe("New agent name"),
5357
- description: exports_external.string().optional().describe("New description"),
5358
- role: exports_external.string().optional().describe("New role"),
5359
- metadata: exports_external.record(exports_external.unknown()).optional().describe("Updated metadata")
5355
+ id: exports_external.string(),
5356
+ name: exports_external.string().optional(),
5357
+ description: exports_external.string().optional(),
5358
+ role: exports_external.string().optional(),
5359
+ metadata: exports_external.record(exports_external.unknown()).optional()
5360
5360
  }, async (args) => {
5361
5361
  try {
5362
5362
  const { id, ...updates } = args;
@@ -5381,8 +5381,8 @@ Last seen: ${agent.last_seen_at}`
5381
5381
  }
5382
5382
  });
5383
5383
  server.tool("register_project", "Register a project for memory scoping", {
5384
- name: exports_external.string().describe("Project name"),
5385
- path: exports_external.string().describe("Absolute path to project"),
5384
+ name: exports_external.string(),
5385
+ path: exports_external.string(),
5386
5386
  description: exports_external.string().optional(),
5387
5387
  memory_prefix: exports_external.string().optional()
5388
5388
  }, async (args) => {
@@ -5417,7 +5417,7 @@ ${lines.join(`
5417
5417
  }
5418
5418
  });
5419
5419
  server.tool("bulk_forget", "Delete multiple memories by IDs", {
5420
- ids: exports_external.array(exports_external.string()).describe("Memory IDs to delete")
5420
+ ids: exports_external.array(exports_external.string())
5421
5421
  }, async (args) => {
5422
5422
  try {
5423
5423
  const resolvedIds = args.ids.map((id) => resolveId(id));
@@ -5428,7 +5428,7 @@ server.tool("bulk_forget", "Delete multiple memories by IDs", {
5428
5428
  }
5429
5429
  });
5430
5430
  server.tool("bulk_update", "Update multiple memories with the same changes", {
5431
- ids: exports_external.array(exports_external.string()).describe("Memory IDs to update"),
5431
+ ids: exports_external.array(exports_external.string()),
5432
5432
  importance: exports_external.coerce.number().min(1).max(10).optional(),
5433
5433
  tags: exports_external.array(exports_external.string()).optional(),
5434
5434
  pinned: exports_external.boolean().optional(),
@@ -5462,8 +5462,8 @@ server.tool("clean_expired", "Remove expired memories from the database", {}, as
5462
5462
  server.tool("memory_context", "Get memories relevant to current context, filtered by scope/importance/recency.", {
5463
5463
  agent_id: exports_external.string().optional(),
5464
5464
  project_id: exports_external.string().optional(),
5465
- scope: exports_external.enum(["global", "shared", "private"]).optional().describe("Limit to specific scope"),
5466
- limit: exports_external.coerce.number().optional().describe("Max memories (default: 30)")
5465
+ scope: exports_external.enum(["global", "shared", "private"]).optional(),
5466
+ limit: exports_external.coerce.number().optional()
5467
5467
  }, async (args) => {
5468
5468
  try {
5469
5469
  const filter = {
@@ -5509,7 +5509,7 @@ var TOOL_REGISTRY = [
5509
5509
  { name: "describe_tools", description: "Get full schemas for specific tools by name.", category: "meta" }
5510
5510
  ];
5511
5511
  server.tool("search_tools", "Search available tools by name or keyword. Returns names only.", {
5512
- query: exports_external.string().describe("Search term to match against tool names and descriptions"),
5512
+ query: exports_external.string(),
5513
5513
  category: exports_external.enum(["memory", "agent", "project", "bulk", "utility", "meta"]).optional()
5514
5514
  }, async (args) => {
5515
5515
  const q = args.query.toLowerCase();
@@ -5520,7 +5520,7 @@ server.tool("search_tools", "Search available tools by name or keyword. Returns
5520
5520
  `) }] };
5521
5521
  });
5522
5522
  server.tool("describe_tools", "Get full schemas for specific tools by name.", {
5523
- names: exports_external.array(exports_external.string()).describe("Tool names to describe")
5523
+ names: exports_external.array(exports_external.string())
5524
5524
  }, async (args) => {
5525
5525
  const found = TOOL_REGISTRY.filter((t) => args.names.includes(t.name));
5526
5526
  if (found.length === 0)
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/mementos",
3
- "version": "0.3.4",
3
+ "version": "0.3.6",
4
4
  "description": "Universal memory system for AI agents - CLI + MCP server + library API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",