@iwo-szapar/data-mcp 0.1.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 (213) hide show
  1. package/dist/adapter/factory.d.ts +9 -0
  2. package/dist/adapter/factory.d.ts.map +1 -0
  3. package/dist/adapter/factory.js +23 -0
  4. package/dist/adapter/factory.js.map +1 -0
  5. package/dist/adapter/pocketbase.d.ts +37 -0
  6. package/dist/adapter/pocketbase.d.ts.map +1 -0
  7. package/dist/adapter/pocketbase.js +350 -0
  8. package/dist/adapter/pocketbase.js.map +1 -0
  9. package/dist/adapter/schema-map.d.ts +45 -0
  10. package/dist/adapter/schema-map.d.ts.map +1 -0
  11. package/dist/adapter/schema-map.js +75 -0
  12. package/dist/adapter/schema-map.js.map +1 -0
  13. package/dist/adapter/supabase.d.ts +32 -0
  14. package/dist/adapter/supabase.d.ts.map +1 -0
  15. package/dist/adapter/supabase.js +294 -0
  16. package/dist/adapter/supabase.js.map +1 -0
  17. package/dist/adapter/types.d.ts +67 -0
  18. package/dist/adapter/types.d.ts.map +1 -0
  19. package/dist/adapter/types.js +9 -0
  20. package/dist/adapter/types.js.map +1 -0
  21. package/dist/config.d.ts +31 -0
  22. package/dist/config.d.ts.map +1 -0
  23. package/dist/config.js +62 -0
  24. package/dist/config.js.map +1 -0
  25. package/dist/errors/adapter-error.d.ts +12 -0
  26. package/dist/errors/adapter-error.d.ts.map +1 -0
  27. package/dist/errors/adapter-error.js +15 -0
  28. package/dist/errors/adapter-error.js.map +1 -0
  29. package/dist/index.d.ts +9 -0
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +27 -0
  32. package/dist/index.js.map +1 -0
  33. package/dist/search/alias-expansion.d.ts +53 -0
  34. package/dist/search/alias-expansion.d.ts.map +1 -0
  35. package/dist/search/alias-expansion.js +131 -0
  36. package/dist/search/alias-expansion.js.map +1 -0
  37. package/dist/server.d.ts +9 -0
  38. package/dist/server.d.ts.map +1 -0
  39. package/dist/server.js +40 -0
  40. package/dist/server.js.map +1 -0
  41. package/dist/tools/business/blog-create.d.ts +9 -0
  42. package/dist/tools/business/blog-create.d.ts.map +1 -0
  43. package/dist/tools/business/blog-create.js +53 -0
  44. package/dist/tools/business/blog-create.js.map +1 -0
  45. package/dist/tools/business/blog-delete.d.ts +9 -0
  46. package/dist/tools/business/blog-delete.d.ts.map +1 -0
  47. package/dist/tools/business/blog-delete.js +29 -0
  48. package/dist/tools/business/blog-delete.js.map +1 -0
  49. package/dist/tools/business/blog-list.d.ts +9 -0
  50. package/dist/tools/business/blog-list.d.ts.map +1 -0
  51. package/dist/tools/business/blog-list.js +37 -0
  52. package/dist/tools/business/blog-list.js.map +1 -0
  53. package/dist/tools/business/blog-update.d.ts +9 -0
  54. package/dist/tools/business/blog-update.d.ts.map +1 -0
  55. package/dist/tools/business/blog-update.js +66 -0
  56. package/dist/tools/business/blog-update.js.map +1 -0
  57. package/dist/tools/business/content-queue-add.d.ts +9 -0
  58. package/dist/tools/business/content-queue-add.d.ts.map +1 -0
  59. package/dist/tools/business/content-queue-add.js +40 -0
  60. package/dist/tools/business/content-queue-add.js.map +1 -0
  61. package/dist/tools/business/content-queue-list.d.ts +9 -0
  62. package/dist/tools/business/content-queue-list.d.ts.map +1 -0
  63. package/dist/tools/business/content-queue-list.js +41 -0
  64. package/dist/tools/business/content-queue-list.js.map +1 -0
  65. package/dist/tools/business/email-queue-add.d.ts +9 -0
  66. package/dist/tools/business/email-queue-add.d.ts.map +1 -0
  67. package/dist/tools/business/email-queue-add.js +47 -0
  68. package/dist/tools/business/email-queue-add.js.map +1 -0
  69. package/dist/tools/business/prospect-create.d.ts +9 -0
  70. package/dist/tools/business/prospect-create.d.ts.map +1 -0
  71. package/dist/tools/business/prospect-create.js +50 -0
  72. package/dist/tools/business/prospect-create.js.map +1 -0
  73. package/dist/tools/business/prospect-list.d.ts +9 -0
  74. package/dist/tools/business/prospect-list.d.ts.map +1 -0
  75. package/dist/tools/business/prospect-list.js +37 -0
  76. package/dist/tools/business/prospect-list.js.map +1 -0
  77. package/dist/tools/business/prospect-search.d.ts +9 -0
  78. package/dist/tools/business/prospect-search.d.ts.map +1 -0
  79. package/dist/tools/business/prospect-search.js +29 -0
  80. package/dist/tools/business/prospect-search.js.map +1 -0
  81. package/dist/tools/business/prospect-update.d.ts +9 -0
  82. package/dist/tools/business/prospect-update.d.ts.map +1 -0
  83. package/dist/tools/business/prospect-update.js +68 -0
  84. package/dist/tools/business/prospect-update.js.map +1 -0
  85. package/dist/tools/memory/brain-decay.d.ts +11 -0
  86. package/dist/tools/memory/brain-decay.d.ts.map +1 -0
  87. package/dist/tools/memory/brain-decay.js +58 -0
  88. package/dist/tools/memory/brain-decay.js.map +1 -0
  89. package/dist/tools/memory/brain-stats.d.ts +11 -0
  90. package/dist/tools/memory/brain-stats.d.ts.map +1 -0
  91. package/dist/tools/memory/brain-stats.js +63 -0
  92. package/dist/tools/memory/brain-stats.js.map +1 -0
  93. package/dist/tools/memory/contact-create.d.ts +9 -0
  94. package/dist/tools/memory/contact-create.d.ts.map +1 -0
  95. package/dist/tools/memory/contact-create.js +42 -0
  96. package/dist/tools/memory/contact-create.js.map +1 -0
  97. package/dist/tools/memory/contact-list.d.ts +9 -0
  98. package/dist/tools/memory/contact-list.d.ts.map +1 -0
  99. package/dist/tools/memory/contact-list.js +30 -0
  100. package/dist/tools/memory/contact-list.js.map +1 -0
  101. package/dist/tools/memory/contact-search.d.ts +9 -0
  102. package/dist/tools/memory/contact-search.d.ts.map +1 -0
  103. package/dist/tools/memory/contact-search.js +29 -0
  104. package/dist/tools/memory/contact-search.js.map +1 -0
  105. package/dist/tools/memory/contact-update.d.ts +9 -0
  106. package/dist/tools/memory/contact-update.d.ts.map +1 -0
  107. package/dist/tools/memory/contact-update.js +59 -0
  108. package/dist/tools/memory/contact-update.js.map +1 -0
  109. package/dist/tools/memory/goal-create.d.ts +9 -0
  110. package/dist/tools/memory/goal-create.d.ts.map +1 -0
  111. package/dist/tools/memory/goal-create.js +40 -0
  112. package/dist/tools/memory/goal-create.js.map +1 -0
  113. package/dist/tools/memory/goal-list.d.ts +9 -0
  114. package/dist/tools/memory/goal-list.d.ts.map +1 -0
  115. package/dist/tools/memory/goal-list.js +41 -0
  116. package/dist/tools/memory/goal-list.js.map +1 -0
  117. package/dist/tools/memory/goal-update.d.ts +9 -0
  118. package/dist/tools/memory/goal-update.d.ts.map +1 -0
  119. package/dist/tools/memory/goal-update.js +51 -0
  120. package/dist/tools/memory/goal-update.js.map +1 -0
  121. package/dist/tools/memory/knowledge-decide.d.ts +10 -0
  122. package/dist/tools/memory/knowledge-decide.d.ts.map +1 -0
  123. package/dist/tools/memory/knowledge-decide.js +39 -0
  124. package/dist/tools/memory/knowledge-decide.js.map +1 -0
  125. package/dist/tools/memory/knowledge-delete.d.ts +10 -0
  126. package/dist/tools/memory/knowledge-delete.d.ts.map +1 -0
  127. package/dist/tools/memory/knowledge-delete.js +33 -0
  128. package/dist/tools/memory/knowledge-delete.js.map +1 -0
  129. package/dist/tools/memory/knowledge-learn.d.ts +10 -0
  130. package/dist/tools/memory/knowledge-learn.d.ts.map +1 -0
  131. package/dist/tools/memory/knowledge-learn.js +39 -0
  132. package/dist/tools/memory/knowledge-learn.js.map +1 -0
  133. package/dist/tools/memory/knowledge-list.d.ts +9 -0
  134. package/dist/tools/memory/knowledge-list.d.ts.map +1 -0
  135. package/dist/tools/memory/knowledge-list.js +43 -0
  136. package/dist/tools/memory/knowledge-list.js.map +1 -0
  137. package/dist/tools/memory/knowledge-recall.d.ts +11 -0
  138. package/dist/tools/memory/knowledge-recall.d.ts.map +1 -0
  139. package/dist/tools/memory/knowledge-recall.js +79 -0
  140. package/dist/tools/memory/knowledge-recall.js.map +1 -0
  141. package/dist/tools/memory/knowledge-store.d.ts +10 -0
  142. package/dist/tools/memory/knowledge-store.d.ts.map +1 -0
  143. package/dist/tools/memory/knowledge-store.js +56 -0
  144. package/dist/tools/memory/knowledge-store.js.map +1 -0
  145. package/dist/tools/memory/knowledge-update.d.ts +10 -0
  146. package/dist/tools/memory/knowledge-update.d.ts.map +1 -0
  147. package/dist/tools/memory/knowledge-update.js +50 -0
  148. package/dist/tools/memory/knowledge-update.js.map +1 -0
  149. package/dist/tools/memory/knowledge-validate.d.ts +10 -0
  150. package/dist/tools/memory/knowledge-validate.d.ts.map +1 -0
  151. package/dist/tools/memory/knowledge-validate.js +40 -0
  152. package/dist/tools/memory/knowledge-validate.js.map +1 -0
  153. package/dist/tools/memory/session-list.d.ts +9 -0
  154. package/dist/tools/memory/session-list.d.ts.map +1 -0
  155. package/dist/tools/memory/session-list.js +30 -0
  156. package/dist/tools/memory/session-list.js.map +1 -0
  157. package/dist/tools/memory/session-log.d.ts +9 -0
  158. package/dist/tools/memory/session-log.d.ts.map +1 -0
  159. package/dist/tools/memory/session-log.js +56 -0
  160. package/dist/tools/memory/session-log.js.map +1 -0
  161. package/dist/tools/memory/task-create.d.ts +9 -0
  162. package/dist/tools/memory/task-create.d.ts.map +1 -0
  163. package/dist/tools/memory/task-create.js +38 -0
  164. package/dist/tools/memory/task-create.js.map +1 -0
  165. package/dist/tools/memory/task-list.d.ts +9 -0
  166. package/dist/tools/memory/task-list.d.ts.map +1 -0
  167. package/dist/tools/memory/task-list.js +41 -0
  168. package/dist/tools/memory/task-list.js.map +1 -0
  169. package/dist/tools/memory/task-update.d.ts +9 -0
  170. package/dist/tools/memory/task-update.d.ts.map +1 -0
  171. package/dist/tools/memory/task-update.js +50 -0
  172. package/dist/tools/memory/task-update.js.map +1 -0
  173. package/dist/tools/register.d.ts +7 -0
  174. package/dist/tools/register.d.ts.map +1 -0
  175. package/dist/tools/register.js +84 -0
  176. package/dist/tools/register.js.map +1 -0
  177. package/dist/tools/setup/setup-migrate.d.ts +10 -0
  178. package/dist/tools/setup/setup-migrate.d.ts.map +1 -0
  179. package/dist/tools/setup/setup-migrate.js +73 -0
  180. package/dist/tools/setup/setup-migrate.js.map +1 -0
  181. package/dist/tools/setup/setup-seed.d.ts +9 -0
  182. package/dist/tools/setup/setup-seed.d.ts.map +1 -0
  183. package/dist/tools/setup/setup-seed.js +133 -0
  184. package/dist/tools/setup/setup-seed.js.map +1 -0
  185. package/dist/tools/setup/setup-status.d.ts +9 -0
  186. package/dist/tools/setup/setup-status.d.ts.map +1 -0
  187. package/dist/tools/setup/setup-status.js +76 -0
  188. package/dist/tools/setup/setup-status.js.map +1 -0
  189. package/dist/tools/shared.d.ts +56 -0
  190. package/dist/tools/shared.d.ts.map +1 -0
  191. package/dist/tools/shared.js +93 -0
  192. package/dist/tools/shared.js.map +1 -0
  193. package/dist/types/records.d.ts +163 -0
  194. package/dist/types/records.d.ts.map +1 -0
  195. package/dist/types/records.js +8 -0
  196. package/dist/types/records.js.map +1 -0
  197. package/migrations/pocketbase/001_core_schema.js +72 -0
  198. package/migrations/pocketbase/002_goals_tasks.js +49 -0
  199. package/migrations/pocketbase/003_contacts.js +29 -0
  200. package/migrations/pocketbase/004_entity_aliases.js +40 -0
  201. package/migrations/pocketbase/005_prospects.js +33 -0
  202. package/migrations/pocketbase/006_business.js +80 -0
  203. package/migrations/pocketbase/007_newsletter_affiliates.js +50 -0
  204. package/migrations/supabase/001_core_schema.sql +78 -0
  205. package/migrations/supabase/002_goals_tasks.sql +38 -0
  206. package/migrations/supabase/003_contacts.sql +27 -0
  207. package/migrations/supabase/004_entity_aliases.sql +22 -0
  208. package/migrations/supabase/005_prospects.sql +31 -0
  209. package/migrations/supabase/006_business.sql +68 -0
  210. package/migrations/supabase/007_seed_aliases.sql +69 -0
  211. package/migrations/supabase/008_newsletter_affiliates.sql +39 -0
  212. package/package.json +48 -0
  213. package/seed/entity-aliases.json +57 -0
@@ -0,0 +1,79 @@
1
+ /**
2
+ * Tool: knowledge_recall
3
+ *
4
+ * Full-text search across knowledge and decisions.
5
+ * Uses alias expansion to broaden queries.
6
+ * Empty query returns most recent items.
7
+ */
8
+ import { z } from 'zod';
9
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
10
+ import { expandQueryWithAliases } from '../../search/alias-expansion.js';
11
+ export function registerKnowledgeRecall(server, adapter) {
12
+ server.tool('knowledge_recall', 'Search your persistent memory. Full-text search across knowledge items and decisions. Empty query returns most recent items. Supports alias expansion (e.g., "payment" also finds "stripe").', {
13
+ query: z.string().max(500).optional().describe('Search query (full-text search). Empty returns recent items.'),
14
+ type: z.enum(['fact', 'pattern', 'insight', 'lesson', 'reference']).optional().describe('Filter by knowledge type'),
15
+ limit: z.number().int().min(1).max(50).optional().describe('Max results (default 10)'),
16
+ }, { readOnlyHint: true }, withGracefulDegradation('knowledge', adapter, async (params) => {
17
+ try {
18
+ const resultLimit = params.limit ?? 10;
19
+ // Empty query: return most recent items
20
+ if (!params.query || params.query.trim() === '') {
21
+ const filter = params.type
22
+ ? [[{ field: 'type', op: 'eq', value: params.type }]]
23
+ : undefined;
24
+ const result = await adapter.list('knowledge', {
25
+ filter,
26
+ sort: [{ field: 'created_at', direction: 'desc' }],
27
+ page: { limit: resultLimit, offset: 0 },
28
+ });
29
+ return makeToolResponse({
30
+ results: result.items,
31
+ total: result.items.length,
32
+ query: null,
33
+ message: 'Showing most recent items.',
34
+ });
35
+ }
36
+ const searchQuery = params.query.trim();
37
+ // Expand query with aliases
38
+ const expandedTerms = await expandQueryWithAliases(adapter, searchQuery);
39
+ const expandedQuery = expandedTerms.join(' ');
40
+ // Search knowledge
41
+ const typeFilter = params.type
42
+ ? [[{ field: 'type', op: 'eq', value: params.type }]]
43
+ : undefined;
44
+ const knowledgeResults = await adapter.textSearch('knowledge', expandedQuery, {
45
+ fields: ['title', 'content', 'summary'],
46
+ filter: typeFilter,
47
+ limit: resultLimit,
48
+ });
49
+ // Search decisions (if table exists)
50
+ let decisionResults = [];
51
+ try {
52
+ const decisionsExist = await adapter.collectionExists('decisions');
53
+ if (decisionsExist) {
54
+ decisionResults = await adapter.textSearch('decisions', expandedQuery, {
55
+ fields: ['title', 'context', 'chosen_option'],
56
+ limit: 5,
57
+ });
58
+ }
59
+ }
60
+ catch {
61
+ // Decisions table might not exist — degrade silently
62
+ }
63
+ const results = [
64
+ ...knowledgeResults.map((k) => ({ ...k, _source: 'knowledge' })),
65
+ ...decisionResults.map((d) => ({ ...d, _source: 'decision' })),
66
+ ];
67
+ return makeToolResponse({
68
+ results,
69
+ total: results.length,
70
+ query: searchQuery,
71
+ expanded_terms: expandedTerms.length > searchQuery.split(/\s+/).length ? expandedTerms : undefined,
72
+ });
73
+ }
74
+ catch (error) {
75
+ return handleAdapterError(error, 'knowledge_recall');
76
+ }
77
+ }));
78
+ }
79
+ //# sourceMappingURL=knowledge-recall.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-recall.js","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-recall.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: knowledge_store
3
+ *
4
+ * Stores a knowledge item with dedup by (type, title).
5
+ * Auto-generates summary from content.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import type { DataAdapter } from '../../adapter/types.js';
9
+ export declare function registerKnowledgeStore(server: McpServer, adapter: DataAdapter): void;
10
+ //# sourceMappingURL=knowledge-store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAqDpF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Tool: knowledge_store
3
+ *
4
+ * Stores a knowledge item with dedup by (type, title).
5
+ * Auto-generates summary from content.
6
+ */
7
+ import { z } from 'zod';
8
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation, generateSummary } from '../shared.js';
9
+ export function registerKnowledgeStore(server, adapter) {
10
+ server.tool('knowledge_store', 'Store a knowledge item in your persistent memory. Supports facts, patterns, insights, lessons, and references. Deduplicates by type + title.', {
11
+ type: z.enum(['fact', 'pattern', 'insight', 'lesson', 'reference']).describe('Type of knowledge'),
12
+ title: z.string().min(1).max(500).describe('Title of the knowledge item'),
13
+ content: z.string().min(1).max(10000).describe('Content of the knowledge item'),
14
+ tags: z.array(z.string().max(100)).max(20).optional().describe('Tags for categorization'),
15
+ source: z.string().max(500).optional().describe('Source of the knowledge (URL, book, conversation, etc.)'),
16
+ }, withGracefulDegradation('knowledge', adapter, async (params) => {
17
+ try {
18
+ // Dedup: check for existing item with same type + title
19
+ const existing = await adapter.list('knowledge', {
20
+ filter: [[
21
+ { field: 'type', op: 'eq', value: params.type },
22
+ { field: 'title', op: 'eq', value: params.title.trim() },
23
+ ]],
24
+ page: { limit: 1, offset: 0 },
25
+ });
26
+ if (existing.items.length > 0) {
27
+ const item = existing.items[0];
28
+ return makeToolResponse({
29
+ stored: true,
30
+ deduplicated: true,
31
+ item: { id: item.id, type: item.type, title: item.title, created_at: item.created_at },
32
+ message: `Already exists: "${item.title}" (id: ${item.id}). Use knowledge_update to modify.`,
33
+ });
34
+ }
35
+ const record = await adapter.create('knowledge', {
36
+ type: params.type,
37
+ title: params.title.trim(),
38
+ content: params.content,
39
+ summary: generateSummary(params.content),
40
+ tags: params.tags ?? [],
41
+ source: params.source ?? null,
42
+ confidence: 0.8,
43
+ last_validated_at: new Date().toISOString(),
44
+ });
45
+ return makeToolResponse({
46
+ stored: true,
47
+ item: { id: record.id, type: record.type, title: record.title, created_at: record.created_at },
48
+ message: `Stored ${params.type}: "${params.title}"`,
49
+ });
50
+ }
51
+ catch (error) {
52
+ return handleAdapterError(error, 'knowledge_store');
53
+ }
54
+ }));
55
+ }
56
+ //# sourceMappingURL=knowledge-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-store.js","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: knowledge_update
3
+ *
4
+ * Update an existing knowledge item by ID.
5
+ * Regenerates summary if content changes.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import type { DataAdapter } from '../../adapter/types.js';
9
+ export declare function registerKnowledgeUpdate(server: McpServer, adapter: DataAdapter): void;
10
+ //# sourceMappingURL=knowledge-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-update.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA4CrF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tool: knowledge_update
3
+ *
4
+ * Update an existing knowledge item by ID.
5
+ * Regenerates summary if content changes.
6
+ */
7
+ import { z } from 'zod';
8
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation, generateSummary } from '../shared.js';
9
+ export function registerKnowledgeUpdate(server, adapter) {
10
+ server.tool('knowledge_update', 'Update an existing knowledge item. Regenerates summary if content changes.', {
11
+ id: z.string().min(1).describe('ID of the knowledge item to update'),
12
+ title: z.string().min(1).max(500).optional().describe('New title'),
13
+ content: z.string().min(1).max(10000).optional().describe('New content'),
14
+ tags: z.array(z.string().max(100)).max(20).optional().describe('New tags'),
15
+ source: z.string().max(500).optional().describe('New source'),
16
+ confidence: z.number().min(0).max(1).optional().describe('New confidence score (0.0-1.0)'),
17
+ }, withGracefulDegradation('knowledge', adapter, async (params) => {
18
+ try {
19
+ const updates = {};
20
+ if (params.title !== undefined)
21
+ updates.title = params.title.trim();
22
+ if (params.content !== undefined) {
23
+ updates.content = params.content;
24
+ updates.summary = generateSummary(params.content);
25
+ }
26
+ if (params.tags !== undefined)
27
+ updates.tags = params.tags;
28
+ if (params.source !== undefined)
29
+ updates.source = params.source;
30
+ if (params.confidence !== undefined)
31
+ updates.confidence = params.confidence;
32
+ if (Object.keys(updates).length === 0) {
33
+ return makeToolResponse({
34
+ updated: false,
35
+ message: 'No fields to update. Provide at least one field to change.',
36
+ });
37
+ }
38
+ const record = await adapter.update('knowledge', params.id, updates);
39
+ return makeToolResponse({
40
+ updated: true,
41
+ item: { id: record.id, type: record.type, title: record.title, updated_at: record.updated_at },
42
+ message: `Updated knowledge item: "${record.title}"`,
43
+ });
44
+ }
45
+ catch (error) {
46
+ return handleAdapterError(error, 'knowledge_update');
47
+ }
48
+ }));
49
+ }
50
+ //# sourceMappingURL=knowledge-update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-update.js","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-update.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Tool: knowledge_validate
3
+ *
4
+ * Batch update last_validated_at for knowledge items by IDs.
5
+ * Resets the decay clock — marks items as still relevant.
6
+ */
7
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
8
+ import type { DataAdapter } from '../../adapter/types.js';
9
+ export declare function registerKnowledgeValidate(server: McpServer, adapter: DataAdapter): void;
10
+ //# sourceMappingURL=knowledge-validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-validate.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAG1D,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAqCvF"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Tool: knowledge_validate
3
+ *
4
+ * Batch update last_validated_at for knowledge items by IDs.
5
+ * Resets the decay clock — marks items as still relevant.
6
+ */
7
+ import { z } from 'zod';
8
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
9
+ export function registerKnowledgeValidate(server, adapter) {
10
+ server.tool('knowledge_validate', 'Mark knowledge items as still relevant. Resets the decay clock. Pass an array of IDs to validate in batch.', {
11
+ ids: z.array(z.string().min(1)).min(1).max(50).describe('IDs of knowledge items to validate'),
12
+ }, withGracefulDegradation('knowledge', adapter, async (params) => {
13
+ try {
14
+ const now = new Date().toISOString();
15
+ const validated = [];
16
+ const notFound = [];
17
+ // Parallelize updates for performance (up to 50 concurrent)
18
+ const results = await Promise.allSettled(params.ids.map((id) => adapter.update('knowledge', id, { last_validated_at: now })));
19
+ for (let i = 0; i < results.length; i++) {
20
+ if (results[i].status === 'fulfilled') {
21
+ validated.push(params.ids[i]);
22
+ }
23
+ else {
24
+ notFound.push(params.ids[i]);
25
+ }
26
+ }
27
+ return makeToolResponse({
28
+ validated: validated.length,
29
+ not_found: notFound.length,
30
+ validated_ids: validated,
31
+ not_found_ids: notFound.length > 0 ? notFound : undefined,
32
+ message: `Validated ${validated.length} of ${params.ids.length} items.`,
33
+ });
34
+ }
35
+ catch (error) {
36
+ return handleAdapterError(error, 'knowledge_validate');
37
+ }
38
+ }));
39
+ }
40
+ //# sourceMappingURL=knowledge-validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge-validate.js","sourceRoot":"","sources":["../../../src/tools/memory/knowledge-validate.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE7F,MAAM,UAAU,yBAAyB,CAAC,MAAiB,EAAE,OAAoB;IAC/E,MAAM,CAAC,IAAI,CACT,oBAAoB,EACpB,4GAA4G,EAC5G;QACE,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,CAAC,oCAAoC,CAAC;KAC9F,EACD,uBAAuB,CAAC,WAAW,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC7D,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;YACrC,MAAM,SAAS,GAAa,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAa,EAAE,CAAC;YAE9B,4DAA4D;YAC5D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CACtC,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,iBAAiB,EAAE,GAAG,EAAE,CAAC,CAAC,CACpF,CAAC;YACF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACxC,IAAI,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,KAAK,WAAW,EAAE,CAAC;oBACtC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAChC,CAAC;qBAAM,CAAC;oBACN,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC/B,CAAC;YACH,CAAC;YAED,OAAO,gBAAgB,CAAC;gBACtB,SAAS,EAAE,SAAS,CAAC,MAAM;gBAC3B,SAAS,EAAE,QAAQ,CAAC,MAAM;gBAC1B,aAAa,EAAE,SAAS;gBACxB,aAAa,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;gBACzD,OAAO,EAAE,aAAa,SAAS,CAAC,MAAM,OAAO,MAAM,CAAC,GAAG,CAAC,MAAM,SAAS;aACxE,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,KAAK,EAAE,oBAAoB,CAAC,CAAC;QACzD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool: session_list
3
+ *
4
+ * List logged sessions with pagination.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import type { DataAdapter } from '../../adapter/types.js';
8
+ export declare function registerSessionList(server: McpServer, adapter: DataAdapter): void;
9
+ //# sourceMappingURL=session-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-list.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/session-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA2BjF"}
@@ -0,0 +1,30 @@
1
+ /**
2
+ * Tool: session_list
3
+ *
4
+ * List logged sessions with pagination.
5
+ */
6
+ import { z } from 'zod';
7
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
8
+ export function registerSessionList(server, adapter) {
9
+ server.tool('session_list', 'List logged work sessions. Most recent sessions first.', {
10
+ limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20)'),
11
+ offset: z.number().int().min(0).optional().describe('Offset for pagination (default 0)'),
12
+ }, { readOnlyHint: true }, withGracefulDegradation('sessions', adapter, async (params) => {
13
+ try {
14
+ const result = await adapter.list('sessions', {
15
+ sort: [{ field: 'created_at', direction: 'desc' }],
16
+ page: { limit: params.limit ?? 20, offset: params.offset ?? 0 },
17
+ });
18
+ return makeToolResponse({
19
+ items: result.items,
20
+ total: result.totalItems,
21
+ page: result.page,
22
+ per_page: result.perPage,
23
+ });
24
+ }
25
+ catch (error) {
26
+ return handleAdapterError(error, 'session_list');
27
+ }
28
+ }));
29
+ }
30
+ //# sourceMappingURL=session-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-list.js","sourceRoot":"","sources":["../../../src/tools/memory/session-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE7F,MAAM,UAAU,mBAAmB,CAAC,MAAiB,EAAE,OAAoB;IACzE,MAAM,CAAC,IAAI,CACT,cAAc,EACd,wDAAwD,EACxD;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACzF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,uBAAuB,CAAC,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QAC5D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAgB,UAAU,EAAE;gBAC3D,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBAClD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;aAChE,CAAC,CAAC;YAEH,OAAO,gBAAgB,CAAC;gBACtB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,UAAU;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;QACnD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool: session_log
3
+ *
4
+ * Log a completed work session with metadata.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import type { DataAdapter } from '../../adapter/types.js';
8
+ export declare function registerSessionLog(server: McpServer, adapter: DataAdapter): void;
9
+ //# sourceMappingURL=session-log.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-log.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/session-log.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAoDhF"}
@@ -0,0 +1,56 @@
1
+ /**
2
+ * Tool: session_log
3
+ *
4
+ * Log a completed work session with metadata.
5
+ */
6
+ import { z } from 'zod';
7
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
8
+ export function registerSessionLog(server, adapter) {
9
+ server.tool('session_log', 'Log a completed work session. Records what was done, skills used, files changed, and decisions made.', {
10
+ title: z.string().min(1).max(500).describe('Session title'),
11
+ summary: z.string().min(1).max(10000).describe('Summary of what was accomplished'),
12
+ skills_used: z.array(z.string().max(100)).optional().describe('Skills/tools used during the session'),
13
+ files_changed: z.array(z.string().max(500)).optional().describe('Files that were created or modified'),
14
+ decisions_made: z.array(z.object({
15
+ title: z.string().max(500),
16
+ chosen: z.string().max(500),
17
+ })).optional().describe('Decisions made during the session'),
18
+ duration_minutes: z.number().int().min(0).optional().describe('Duration of the session in minutes'),
19
+ task_id: z.string().max(100).optional().describe('Related task ID'),
20
+ branch: z.string().max(200).optional().describe('Git branch name'),
21
+ patterns_learned: z.array(z.object({
22
+ pattern: z.string().max(500),
23
+ domain: z.string().max(200),
24
+ })).optional().describe('Patterns learned during the session'),
25
+ knowledge_created: z.number().int().min(0).optional().describe('Number of knowledge items created'),
26
+ knowledge_updated: z.number().int().min(0).optional().describe('Number of knowledge items updated'),
27
+ metadata: z.record(z.unknown()).optional().describe('Additional metadata'),
28
+ }, withGracefulDegradation('sessions', adapter, async (params) => {
29
+ try {
30
+ const record = await adapter.create('sessions', {
31
+ title: params.title.trim(),
32
+ summary: params.summary,
33
+ session_date: new Date().toISOString().split('T')[0],
34
+ skills_used: params.skills_used ?? [],
35
+ files_changed: params.files_changed ?? [],
36
+ decisions_made: params.decisions_made ?? [],
37
+ duration_minutes: params.duration_minutes ?? null,
38
+ task_id: params.task_id ?? null,
39
+ branch: params.branch ?? null,
40
+ patterns_learned: params.patterns_learned ?? [],
41
+ knowledge_created: params.knowledge_created ?? 0,
42
+ knowledge_updated: params.knowledge_updated ?? 0,
43
+ metadata: params.metadata ?? null,
44
+ });
45
+ return makeToolResponse({
46
+ logged: true,
47
+ item: { id: record.id, title: record.title, session_date: record.session_date, created_at: record.created_at },
48
+ message: `Session logged: "${params.title}"`,
49
+ });
50
+ }
51
+ catch (error) {
52
+ return handleAdapterError(error, 'session_log');
53
+ }
54
+ }));
55
+ }
56
+ //# sourceMappingURL=session-log.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-log.js","sourceRoot":"","sources":["../../../src/tools/memory/session-log.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool: task_create
3
+ *
4
+ * Create a task. Status defaults to 'todo'.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import type { DataAdapter } from '../../adapter/types.js';
8
+ export declare function registerTaskCreate(server: McpServer, adapter: DataAdapter): void;
9
+ //# sourceMappingURL=task-create.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-create.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/task-create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAkChF"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Tool: task_create
3
+ *
4
+ * Create a task. Status defaults to 'todo'.
5
+ */
6
+ import { z } from 'zod';
7
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
8
+ export function registerTaskCreate(server, adapter) {
9
+ server.tool('task_create', 'Create a task with title, description, priority, and optional due date. Status defaults to todo.', {
10
+ title: z.string().min(1).max(500).describe('Task title'),
11
+ description: z.string().max(5000).optional().describe('Task description'),
12
+ priority: z.enum(['low', 'medium', 'high', 'urgent']).optional().describe('Priority level (default: medium)'),
13
+ due_date: z.string().max(50).optional().describe('Due date (ISO format)'),
14
+ tags: z.array(z.string().max(100)).max(20).optional().describe('Tags for categorization'),
15
+ goal_id: z.string().min(1).optional().describe('Related goal ID'),
16
+ }, withGracefulDegradation('tasks', adapter, async (params) => {
17
+ try {
18
+ const record = await adapter.create('tasks', {
19
+ title: params.title.trim(),
20
+ description: params.description ?? null,
21
+ status: 'todo',
22
+ priority: params.priority ?? 'medium',
23
+ due_date: params.due_date ?? null,
24
+ tags: params.tags ?? [],
25
+ goal_id: params.goal_id ?? null,
26
+ });
27
+ return makeToolResponse({
28
+ created: true,
29
+ item: { id: record.id, title: record.title, status: record.status, priority: record.priority, created_at: record.created_at },
30
+ message: `Task created: "${params.title}"`,
31
+ });
32
+ }
33
+ catch (error) {
34
+ return handleAdapterError(error, 'task_create');
35
+ }
36
+ }));
37
+ }
38
+ //# sourceMappingURL=task-create.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-create.js","sourceRoot":"","sources":["../../../src/tools/memory/task-create.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE7F,MAAM,UAAU,kBAAkB,CAAC,MAAiB,EAAE,OAAoB;IACxE,MAAM,CAAC,IAAI,CACT,aAAa,EACb,kGAAkG,EAClG;QACE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,YAAY,CAAC;QACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACzE,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;QAC7G,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;QACzE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,yBAAyB,CAAC;QACzF,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;KAClE,EACD,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,MAAM,CAAa,OAAO,EAAE;gBACvD,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;gBAC1B,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,IAAI;gBACvC,MAAM,EAAE,MAAM;gBACd,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,QAAQ;gBACrC,QAAQ,EAAE,MAAM,CAAC,QAAQ,IAAI,IAAI;gBACjC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,EAAE;gBACvB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,IAAI;aAChC,CAAC,CAAC;YAEH,OAAO,gBAAgB,CAAC;gBACtB,OAAO,EAAE,IAAI;gBACb,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,UAAU,EAAE;gBAC7H,OAAO,EAAE,kBAAkB,MAAM,CAAC,KAAK,GAAG;aAC3C,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;QAClD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool: task_list
3
+ *
4
+ * List tasks with optional status and priority filters.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import type { DataAdapter } from '../../adapter/types.js';
8
+ export declare function registerTaskList(server: McpServer, adapter: DataAdapter): void;
9
+ //# sourceMappingURL=task-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-list.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/task-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAgB,MAAM,wBAAwB,CAAC;AAIxE,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CAwC9E"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Tool: task_list
3
+ *
4
+ * List tasks with optional status and priority filters.
5
+ */
6
+ import { z } from 'zod';
7
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
8
+ export function registerTaskList(server, adapter) {
9
+ server.tool('task_list', 'List tasks with optional status and priority filters.', {
10
+ status: z.enum(['todo', 'in_progress', 'done', 'cancelled']).optional().describe('Filter by status'),
11
+ priority: z.enum(['low', 'medium', 'high', 'urgent']).optional().describe('Filter by priority'),
12
+ limit: z.number().int().min(1).max(100).optional().describe('Max results (default 20)'),
13
+ offset: z.number().int().min(0).optional().describe('Offset for pagination (default 0)'),
14
+ }, { readOnlyHint: true }, withGracefulDegradation('tasks', adapter, async (params) => {
15
+ try {
16
+ const clauses = [];
17
+ if (params.status) {
18
+ clauses.push({ field: 'status', op: 'eq', value: params.status });
19
+ }
20
+ if (params.priority) {
21
+ clauses.push({ field: 'priority', op: 'eq', value: params.priority });
22
+ }
23
+ const filter = clauses.length > 0 ? [clauses] : undefined;
24
+ const result = await adapter.list('tasks', {
25
+ filter,
26
+ sort: [{ field: 'created_at', direction: 'desc' }],
27
+ page: { limit: params.limit ?? 20, offset: params.offset ?? 0 },
28
+ });
29
+ return makeToolResponse({
30
+ items: result.items,
31
+ total: result.totalItems,
32
+ page: result.page,
33
+ per_page: result.perPage,
34
+ });
35
+ }
36
+ catch (error) {
37
+ return handleAdapterError(error, 'task_list');
38
+ }
39
+ }));
40
+ }
41
+ //# sourceMappingURL=task-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-list.js","sourceRoot":"","sources":["../../../src/tools/memory/task-list.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAC;AAE7F,MAAM,UAAU,gBAAgB,CAAC,MAAiB,EAAE,OAAoB;IACtE,MAAM,CAAC,IAAI,CACT,WAAW,EACX,uDAAuD,EACvD;QACE,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kBAAkB,CAAC;QACpG,QAAQ,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oBAAoB,CAAC;QAC/F,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;KACzF,EACD,EAAE,YAAY,EAAE,IAAI,EAAE,EACtB,uBAAuB,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;QACzD,IAAI,CAAC;YACH,MAAM,OAAO,GAAmB,EAAE,CAAC;YACnC,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAClB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YACpE,CAAC;YACD,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;YACxE,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;YAE1D,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAa,OAAO,EAAE;gBACrD,MAAM;gBACN,IAAI,EAAE,CAAC,EAAE,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;gBAClD,IAAI,EAAE,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,CAAC,EAAE;aAChE,CAAC,CAAC;YAEH,OAAO,gBAAgB,CAAC;gBACtB,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,KAAK,EAAE,MAAM,CAAC,UAAU;gBACxB,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,QAAQ,EAAE,MAAM,CAAC,OAAO;aACzB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,kBAAkB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Tool: task_update
3
+ *
4
+ * Update a task's status, priority, or other fields.
5
+ */
6
+ import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
7
+ import type { DataAdapter } from '../../adapter/types.js';
8
+ export declare function registerTaskUpdate(server: McpServer, adapter: DataAdapter): void;
9
+ //# sourceMappingURL=task-update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task-update.d.ts","sourceRoot":"","sources":["../../../src/tools/memory/task-update.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAEzE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAI1D,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,WAAW,GAAG,IAAI,CA0ChF"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * Tool: task_update
3
+ *
4
+ * Update a task's status, priority, or other fields.
5
+ */
6
+ import { z } from 'zod';
7
+ import { makeToolResponse, handleAdapterError, withGracefulDegradation } from '../shared.js';
8
+ export function registerTaskUpdate(server, adapter) {
9
+ server.tool('task_update', 'Update a task. Change status, priority, description, or due date.', {
10
+ id: z.string().min(1).describe('ID of the task to update'),
11
+ title: z.string().min(1).max(500).optional().describe('New title'),
12
+ description: z.string().max(5000).optional().describe('New description'),
13
+ status: z.enum(['todo', 'in_progress', 'done', 'cancelled']).optional().describe('New status'),
14
+ priority: z.enum(['low', 'medium', 'high', 'urgent']).optional().describe('New priority'),
15
+ due_date: z.string().max(50).optional().describe('New due date (ISO format)'),
16
+ tags: z.array(z.string().max(100)).max(20).optional().describe('New tags'),
17
+ }, withGracefulDegradation('tasks', adapter, async (params) => {
18
+ try {
19
+ const updates = {};
20
+ if (params.title !== undefined)
21
+ updates.title = params.title.trim();
22
+ if (params.description !== undefined)
23
+ updates.description = params.description;
24
+ if (params.status !== undefined)
25
+ updates.status = params.status;
26
+ if (params.priority !== undefined)
27
+ updates.priority = params.priority;
28
+ if (params.due_date !== undefined)
29
+ updates.due_date = params.due_date;
30
+ if (params.tags !== undefined)
31
+ updates.tags = params.tags;
32
+ if (Object.keys(updates).length === 0) {
33
+ return makeToolResponse({
34
+ updated: false,
35
+ message: 'No fields to update. Provide at least one field to change.',
36
+ });
37
+ }
38
+ const record = await adapter.update('tasks', params.id, updates);
39
+ return makeToolResponse({
40
+ updated: true,
41
+ item: { id: record.id, title: record.title, status: record.status, priority: record.priority, updated_at: record.updated_at },
42
+ message: `Task updated: "${record.title}"`,
43
+ });
44
+ }
45
+ catch (error) {
46
+ return handleAdapterError(error, 'task_update');
47
+ }
48
+ }));
49
+ }
50
+ //# sourceMappingURL=task-update.js.map