@j0hanz/memory-mcp 1.5.0 → 1.6.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 (119) hide show
  1. package/dist/completions/index.d.ts +1 -0
  2. package/dist/completions/index.d.ts.map +1 -0
  3. package/dist/db/index.d.ts +1 -0
  4. package/dist/db/index.d.ts.map +1 -0
  5. package/dist/db/index.js +10 -8
  6. package/dist/db/typed.d.ts +1 -0
  7. package/dist/db/typed.d.ts.map +1 -0
  8. package/dist/index.d.ts +1 -0
  9. package/dist/index.d.ts.map +1 -0
  10. package/dist/lib/errors.d.ts +1 -0
  11. package/dist/lib/errors.d.ts.map +1 -0
  12. package/dist/lib/hash.d.ts +1 -0
  13. package/dist/lib/hash.d.ts.map +1 -0
  14. package/dist/lib/instructions.d.ts +1 -0
  15. package/dist/lib/instructions.d.ts.map +1 -0
  16. package/dist/lib/json-schema.d.ts +1 -0
  17. package/dist/lib/json-schema.d.ts.map +1 -0
  18. package/dist/lib/mcp-utils.d.ts +1 -0
  19. package/dist/lib/mcp-utils.d.ts.map +1 -0
  20. package/dist/lib/pagination.d.ts +1 -0
  21. package/dist/lib/pagination.d.ts.map +1 -0
  22. package/dist/lib/search-cursor.d.ts +1 -0
  23. package/dist/lib/search-cursor.d.ts.map +1 -0
  24. package/dist/lib/search.d.ts +1 -0
  25. package/dist/lib/search.d.ts.map +1 -0
  26. package/dist/lib/search.js +31 -23
  27. package/dist/lib/sql.d.ts +1 -0
  28. package/dist/lib/sql.d.ts.map +1 -0
  29. package/dist/lib/tool-contracts.d.ts +1 -0
  30. package/dist/lib/tool-contracts.d.ts.map +1 -0
  31. package/dist/lib/tool-contracts.js +65 -93
  32. package/dist/lib/tool-execution.d.ts +13 -0
  33. package/dist/lib/tool-execution.d.ts.map +1 -0
  34. package/dist/lib/tool-execution.js +28 -0
  35. package/dist/lib/tool-response.d.ts +1 -0
  36. package/dist/lib/tool-response.d.ts.map +1 -0
  37. package/dist/lib/types.d.ts +1 -0
  38. package/dist/lib/types.d.ts.map +1 -0
  39. package/dist/prompts/index.d.ts +1 -0
  40. package/dist/prompts/index.d.ts.map +1 -0
  41. package/dist/prompts/index.js +12 -8
  42. package/dist/resources/index.d.ts +1 -0
  43. package/dist/resources/index.d.ts.map +1 -0
  44. package/dist/resources/index.js +65 -38
  45. package/dist/resources/instructions.d.ts +1 -0
  46. package/dist/resources/instructions.d.ts.map +1 -0
  47. package/dist/resources/instructions.js +44 -37
  48. package/dist/resources/server-config.d.ts +1 -0
  49. package/dist/resources/server-config.d.ts.map +1 -0
  50. package/dist/resources/server-config.js +33 -22
  51. package/dist/resources/tool-catalog.d.ts +1 -0
  52. package/dist/resources/tool-catalog.d.ts.map +1 -0
  53. package/dist/resources/tool-catalog.js +10 -5
  54. package/dist/resources/tool-info.d.ts +1 -0
  55. package/dist/resources/tool-info.d.ts.map +1 -0
  56. package/dist/resources/tool-info.js +17 -8
  57. package/dist/resources/workflows.d.ts +1 -0
  58. package/dist/resources/workflows.d.ts.map +1 -0
  59. package/dist/resources/workflows.js +69 -40
  60. package/dist/schemas/index.d.ts +1 -0
  61. package/dist/schemas/index.d.ts.map +1 -0
  62. package/dist/schemas/inputs.d.ts +1 -0
  63. package/dist/schemas/inputs.d.ts.map +1 -0
  64. package/dist/schemas/inputs.js +14 -10
  65. package/dist/schemas/outputs.d.ts +7 -6
  66. package/dist/schemas/outputs.d.ts.map +1 -0
  67. package/dist/schemas/outputs.js +7 -6
  68. package/dist/server.d.ts +1 -0
  69. package/dist/server.d.ts.map +1 -0
  70. package/dist/server.js +11 -4
  71. package/dist/tools/create-relationship.d.ts +1 -0
  72. package/dist/tools/create-relationship.d.ts.map +1 -0
  73. package/dist/tools/create-relationship.js +14 -19
  74. package/dist/tools/delete-memories.d.ts +1 -0
  75. package/dist/tools/delete-memories.d.ts.map +1 -0
  76. package/dist/tools/delete-memories.js +27 -37
  77. package/dist/tools/delete-memory.d.ts +1 -0
  78. package/dist/tools/delete-memory.d.ts.map +1 -0
  79. package/dist/tools/delete-memory.js +9 -15
  80. package/dist/tools/delete-relationship.d.ts +1 -0
  81. package/dist/tools/delete-relationship.d.ts.map +1 -0
  82. package/dist/tools/delete-relationship.js +7 -12
  83. package/dist/tools/get-memory.d.ts +1 -0
  84. package/dist/tools/get-memory.d.ts.map +1 -0
  85. package/dist/tools/get-memory.js +9 -14
  86. package/dist/tools/get-relationships.d.ts +1 -0
  87. package/dist/tools/get-relationships.d.ts.map +1 -0
  88. package/dist/tools/get-relationships.js +12 -17
  89. package/dist/tools/index.d.ts +1 -0
  90. package/dist/tools/index.d.ts.map +1 -0
  91. package/dist/tools/memory-stats.d.ts +1 -0
  92. package/dist/tools/memory-stats.d.ts.map +1 -0
  93. package/dist/tools/memory-stats.js +22 -28
  94. package/dist/tools/progress.d.ts +1 -0
  95. package/dist/tools/progress.d.ts.map +1 -0
  96. package/dist/tools/progress.js +30 -23
  97. package/dist/tools/recall.d.ts +1 -0
  98. package/dist/tools/recall.d.ts.map +1 -0
  99. package/dist/tools/recall.js +77 -48
  100. package/dist/tools/register-contract.d.ts +1 -0
  101. package/dist/tools/register-contract.d.ts.map +1 -0
  102. package/dist/tools/result.d.ts +1 -0
  103. package/dist/tools/result.d.ts.map +1 -0
  104. package/dist/tools/retrieve-context.d.ts +1 -0
  105. package/dist/tools/retrieve-context.d.ts.map +1 -0
  106. package/dist/tools/retrieve-context.js +47 -33
  107. package/dist/tools/search-memories.d.ts +1 -0
  108. package/dist/tools/search-memories.d.ts.map +1 -0
  109. package/dist/tools/search-memories.js +24 -30
  110. package/dist/tools/store-memories.d.ts +1 -0
  111. package/dist/tools/store-memories.d.ts.map +1 -0
  112. package/dist/tools/store-memories.js +32 -42
  113. package/dist/tools/store-memory.d.ts +1 -0
  114. package/dist/tools/store-memory.d.ts.map +1 -0
  115. package/dist/tools/store-memory.js +12 -18
  116. package/dist/tools/update-memory.d.ts +1 -0
  117. package/dist/tools/update-memory.d.ts.map +1 -0
  118. package/dist/tools/update-memory.js +41 -46
  119. package/package.json +1 -1
@@ -1,7 +1,8 @@
1
- import { E_CONFLICT, E_NOT_FOUND, E_UNKNOWN, getErrorMessage, rethrowMcpError, } from '../lib/errors.js';
1
+ import { E_CONFLICT, E_NOT_FOUND } from '../lib/errors.js';
2
2
  import { computeMemoryHash } from '../lib/hash.js';
3
3
  import { logToolEvent, notifyMemoryResourceUpdated } from '../lib/mcp-utils.js';
4
4
  import { SELECT_MEMORY_BY_HASH_SQL, SELECT_MEMORY_HASH_SQL, } from '../lib/sql.js';
5
+ import { executeToolSafely } from '../lib/tool-execution.js';
5
6
  import { createErrorResponse, createToolResponse, } from '../lib/tool-response.js';
6
7
  import { parseTags } from '../lib/types.js';
7
8
  import { UpdateMemoryInputSchema } from '../schemas/inputs.js';
@@ -19,57 +20,51 @@ async function notifyUpdatedMemoryResources(server, oldHash, newHash) {
19
20
  await Promise.allSettled(notifications);
20
21
  }
21
22
  export function registerUpdateMemory(server, db) {
22
- registerToolWithContract(server, 'update_memory', UpdateMemoryInputSchema, UpdateResultSchema, wrapToolHandler(async (params) => {
23
- try {
24
- // All reads and the write are inside a single IMMEDIATE transaction
25
- // to prevent TOCTOU between existence/collision checks and UPDATE.
26
- const txResult = db.transaction(() => {
27
- const existing = db
28
- .prepareOnce(SELECT_MEMORY_BY_HASH_SQL)
29
- .get(params.hash);
30
- if (!existing) {
23
+ registerToolWithContract(server, 'update_memory', UpdateMemoryInputSchema, UpdateResultSchema, wrapToolHandler(async (params) => executeToolSafely(async () => {
24
+ // All reads and the write are inside a single IMMEDIATE transaction
25
+ // to prevent TOCTOU between existence/collision checks and UPDATE.
26
+ const txResult = db.transaction(() => {
27
+ const existing = db
28
+ .prepareOnce(SELECT_MEMORY_BY_HASH_SQL)
29
+ .get(params.hash);
30
+ if (!existing) {
31
+ return {
32
+ ok: false,
33
+ code: E_NOT_FOUND,
34
+ message: `Memory not found: ${params.hash}`,
35
+ };
36
+ }
37
+ const newTags = params.tags ?? parseTags(existing.tags);
38
+ const newHash = computeMemoryHash(params.content, newTags);
39
+ if (newHash !== params.hash) {
40
+ const collision = db
41
+ .prepareOnce(SELECT_MEMORY_HASH_SQL)
42
+ .get(newHash);
43
+ if (collision) {
31
44
  return {
32
45
  ok: false,
33
- code: E_NOT_FOUND,
34
- message: `Memory not found: ${params.hash}`,
46
+ code: E_CONFLICT,
47
+ message: `Memory already exists for target content/tags: ${newHash}`,
35
48
  };
36
49
  }
37
- const newTags = params.tags ?? parseTags(existing.tags);
38
- const newHash = computeMemoryHash(params.content, newTags);
39
- if (newHash !== params.hash) {
40
- const collision = db
41
- .prepareOnce(SELECT_MEMORY_HASH_SQL)
42
- .get(newHash);
43
- if (collision) {
44
- return {
45
- ok: false,
46
- code: E_CONFLICT,
47
- message: `Memory already exists for target content/tags: ${newHash}`,
48
- };
49
- }
50
- }
51
- const now = new Date().toISOString();
52
- db.prepareOnce(UPDATE_MEMORY_SQL).run(newHash, params.content, JSON.stringify(newTags), now, params.hash);
53
- return { ok: true, oldHash: params.hash, newHash };
54
- });
55
- if (!txResult.ok) {
56
- return createErrorResponse(txResult.code, txResult.message);
57
50
  }
58
- await logToolEvent(server, 'update', {
59
- oldHash: txResult.oldHash,
60
- newHash: txResult.newHash,
61
- });
62
- await notifyUpdatedMemoryResources(server, txResult.oldHash, txResult.newHash);
63
- return createToolResponse({
64
- old_hash: txResult.oldHash,
65
- new_hash: txResult.newHash,
66
- });
67
- }
68
- catch (err) {
69
- rethrowMcpError(err);
70
- return createErrorResponse(E_UNKNOWN, getErrorMessage(err));
51
+ const now = new Date().toISOString();
52
+ db.prepareOnce(UPDATE_MEMORY_SQL).run(newHash, params.content, JSON.stringify(newTags), now, params.hash);
53
+ return { ok: true, oldHash: params.hash, newHash };
54
+ });
55
+ if (!txResult.ok) {
56
+ return createErrorResponse(txResult.code, txResult.message);
71
57
  }
72
- }, {
58
+ await logToolEvent(server, 'update', {
59
+ oldHash: txResult.oldHash,
60
+ newHash: txResult.newHash,
61
+ });
62
+ await notifyUpdatedMemoryResources(server, txResult.oldHash, txResult.newHash);
63
+ return createToolResponse({
64
+ old_hash: txResult.oldHash,
65
+ new_hash: txResult.newHash,
66
+ });
67
+ }), {
73
68
  progressMessage: (params) => `⊜ update_memory: ${params.hash.slice(0, 12)}... [replace content]`,
74
69
  }));
75
70
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@j0hanz/memory-mcp",
3
- "version": "1.5.0",
3
+ "version": "1.6.0",
4
4
  "mcpName": "io.github.j0hanz/memory-mcp",
5
5
  "author": "Johanz",
6
6
  "license": "MIT",