context-mem 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 (208) hide show
  1. package/.context-mem.json.example +22 -0
  2. package/LICENSE +21 -0
  3. package/README.md +213 -0
  4. package/dist/cli/commands/dashboard.d.ts +2 -0
  5. package/dist/cli/commands/dashboard.d.ts.map +1 -0
  6. package/dist/cli/commands/dashboard.js +55 -0
  7. package/dist/cli/commands/dashboard.js.map +1 -0
  8. package/dist/cli/commands/doctor.d.ts +2 -0
  9. package/dist/cli/commands/doctor.d.ts.map +1 -0
  10. package/dist/cli/commands/doctor.js +49 -0
  11. package/dist/cli/commands/doctor.js.map +1 -0
  12. package/dist/cli/commands/init.d.ts +2 -0
  13. package/dist/cli/commands/init.d.ts.map +1 -0
  14. package/dist/cli/commands/init.js +43 -0
  15. package/dist/cli/commands/init.js.map +1 -0
  16. package/dist/cli/commands/serve.d.ts +2 -0
  17. package/dist/cli/commands/serve.d.ts.map +1 -0
  18. package/dist/cli/commands/serve.js +47 -0
  19. package/dist/cli/commands/serve.js.map +1 -0
  20. package/dist/cli/commands/status.d.ts +2 -0
  21. package/dist/cli/commands/status.d.ts.map +1 -0
  22. package/dist/cli/commands/status.js +29 -0
  23. package/dist/cli/commands/status.js.map +1 -0
  24. package/dist/cli/index.d.ts +3 -0
  25. package/dist/cli/index.d.ts.map +1 -0
  26. package/dist/cli/index.js +39 -0
  27. package/dist/cli/index.js.map +1 -0
  28. package/dist/core/budget.d.ts +11 -0
  29. package/dist/core/budget.d.ts.map +1 -0
  30. package/dist/core/budget.js +60 -0
  31. package/dist/core/budget.js.map +1 -0
  32. package/dist/core/config.d.ts +4 -0
  33. package/dist/core/config.d.ts.map +1 -0
  34. package/dist/core/config.js +41 -0
  35. package/dist/core/config.js.map +1 -0
  36. package/dist/core/events.d.ts +19 -0
  37. package/dist/core/events.d.ts.map +1 -0
  38. package/dist/core/events.js +101 -0
  39. package/dist/core/events.js.map +1 -0
  40. package/dist/core/kernel.d.ts +46 -0
  41. package/dist/core/kernel.d.ts.map +1 -0
  42. package/dist/core/kernel.js +228 -0
  43. package/dist/core/kernel.js.map +1 -0
  44. package/dist/core/lifecycle.d.ts +19 -0
  45. package/dist/core/lifecycle.d.ts.map +1 -0
  46. package/dist/core/lifecycle.js +35 -0
  47. package/dist/core/lifecycle.js.map +1 -0
  48. package/dist/core/observe-queue.d.ts +18 -0
  49. package/dist/core/observe-queue.d.ts.map +1 -0
  50. package/dist/core/observe-queue.js +56 -0
  51. package/dist/core/observe-queue.js.map +1 -0
  52. package/dist/core/pipeline.d.ts +15 -0
  53. package/dist/core/pipeline.d.ts.map +1 -0
  54. package/dist/core/pipeline.js +114 -0
  55. package/dist/core/pipeline.js.map +1 -0
  56. package/dist/core/plugin-registry.d.ts +13 -0
  57. package/dist/core/plugin-registry.d.ts.map +1 -0
  58. package/dist/core/plugin-registry.js +67 -0
  59. package/dist/core/plugin-registry.js.map +1 -0
  60. package/dist/core/session.d.ts +14 -0
  61. package/dist/core/session.d.ts.map +1 -0
  62. package/dist/core/session.js +95 -0
  63. package/dist/core/session.js.map +1 -0
  64. package/dist/core/truncation.d.ts +11 -0
  65. package/dist/core/truncation.d.ts.map +1 -0
  66. package/dist/core/truncation.js +143 -0
  67. package/dist/core/truncation.js.map +1 -0
  68. package/dist/core/types.d.ts +230 -0
  69. package/dist/core/types.d.ts.map +1 -0
  70. package/dist/core/types.js +50 -0
  71. package/dist/core/types.js.map +1 -0
  72. package/dist/core/utils.d.ts +4 -0
  73. package/dist/core/utils.d.ts.map +1 -0
  74. package/dist/core/utils.js +57 -0
  75. package/dist/core/utils.js.map +1 -0
  76. package/dist/index.d.ts +12 -0
  77. package/dist/index.d.ts.map +1 -0
  78. package/dist/index.js +27 -0
  79. package/dist/index.js.map +1 -0
  80. package/dist/mcp-server/server.d.ts +5 -0
  81. package/dist/mcp-server/server.d.ts.map +1 -0
  82. package/dist/mcp-server/server.js +101 -0
  83. package/dist/mcp-server/server.js.map +1 -0
  84. package/dist/mcp-server/tools.d.ts +201 -0
  85. package/dist/mcp-server/tools.d.ts.map +1 -0
  86. package/dist/mcp-server/tools.js +618 -0
  87. package/dist/mcp-server/tools.js.map +1 -0
  88. package/dist/plugins/knowledge/knowledge-base.d.ts +23 -0
  89. package/dist/plugins/knowledge/knowledge-base.d.ts.map +1 -0
  90. package/dist/plugins/knowledge/knowledge-base.js +165 -0
  91. package/dist/plugins/knowledge/knowledge-base.js.map +1 -0
  92. package/dist/plugins/platforms/claude-code.d.ts +14 -0
  93. package/dist/plugins/platforms/claude-code.d.ts.map +1 -0
  94. package/dist/plugins/platforms/claude-code.js +52 -0
  95. package/dist/plugins/platforms/claude-code.js.map +1 -0
  96. package/dist/plugins/privacy/privacy-engine.d.ts +18 -0
  97. package/dist/plugins/privacy/privacy-engine.d.ts.map +1 -0
  98. package/dist/plugins/privacy/privacy-engine.js +72 -0
  99. package/dist/plugins/privacy/privacy-engine.js.map +1 -0
  100. package/dist/plugins/runtimes/javascript.d.ts +13 -0
  101. package/dist/plugins/runtimes/javascript.d.ts.map +1 -0
  102. package/dist/plugins/runtimes/javascript.js +102 -0
  103. package/dist/plugins/runtimes/javascript.js.map +1 -0
  104. package/dist/plugins/runtimes/python.d.ts +14 -0
  105. package/dist/plugins/runtimes/python.d.ts.map +1 -0
  106. package/dist/plugins/runtimes/python.js +127 -0
  107. package/dist/plugins/runtimes/python.js.map +1 -0
  108. package/dist/plugins/runtimes/shell.d.ts +13 -0
  109. package/dist/plugins/runtimes/shell.d.ts.map +1 -0
  110. package/dist/plugins/runtimes/shell.js +55 -0
  111. package/dist/plugins/runtimes/shell.js.map +1 -0
  112. package/dist/plugins/search/bm25.d.ts +16 -0
  113. package/dist/plugins/search/bm25.d.ts.map +1 -0
  114. package/dist/plugins/search/bm25.js +61 -0
  115. package/dist/plugins/search/bm25.js.map +1 -0
  116. package/dist/plugins/search/fts5-utils.d.ts +2 -0
  117. package/dist/plugins/search/fts5-utils.d.ts.map +1 -0
  118. package/dist/plugins/search/fts5-utils.js +12 -0
  119. package/dist/plugins/search/fts5-utils.js.map +1 -0
  120. package/dist/plugins/search/fusion.d.ts +9 -0
  121. package/dist/plugins/search/fusion.d.ts.map +1 -0
  122. package/dist/plugins/search/fusion.js +45 -0
  123. package/dist/plugins/search/fusion.js.map +1 -0
  124. package/dist/plugins/search/intent.d.ts +5 -0
  125. package/dist/plugins/search/intent.d.ts.map +1 -0
  126. package/dist/plugins/search/intent.js +49 -0
  127. package/dist/plugins/search/intent.js.map +1 -0
  128. package/dist/plugins/search/levenshtein.d.ts +17 -0
  129. package/dist/plugins/search/levenshtein.d.ts.map +1 -0
  130. package/dist/plugins/search/levenshtein.js +99 -0
  131. package/dist/plugins/search/levenshtein.js.map +1 -0
  132. package/dist/plugins/search/trigram.d.ts +16 -0
  133. package/dist/plugins/search/trigram.d.ts.map +1 -0
  134. package/dist/plugins/search/trigram.js +63 -0
  135. package/dist/plugins/search/trigram.js.map +1 -0
  136. package/dist/plugins/storage/better-sqlite3.d.ts +19 -0
  137. package/dist/plugins/storage/better-sqlite3.d.ts.map +1 -0
  138. package/dist/plugins/storage/better-sqlite3.js +82 -0
  139. package/dist/plugins/storage/better-sqlite3.js.map +1 -0
  140. package/dist/plugins/storage/content-store.d.ts +20 -0
  141. package/dist/plugins/storage/content-store.d.ts.map +1 -0
  142. package/dist/plugins/storage/content-store.js +187 -0
  143. package/dist/plugins/storage/content-store.js.map +1 -0
  144. package/dist/plugins/storage/migrations.d.ts +8 -0
  145. package/dist/plugins/storage/migrations.d.ts.map +1 -0
  146. package/dist/plugins/storage/migrations.js +252 -0
  147. package/dist/plugins/storage/migrations.js.map +1 -0
  148. package/dist/plugins/summarizers/binary-summarizer.d.ts +12 -0
  149. package/dist/plugins/summarizers/binary-summarizer.d.ts.map +1 -0
  150. package/dist/plugins/summarizers/binary-summarizer.js +43 -0
  151. package/dist/plugins/summarizers/binary-summarizer.js.map +1 -0
  152. package/dist/plugins/summarizers/build-output-summarizer.d.ts +12 -0
  153. package/dist/plugins/summarizers/build-output-summarizer.d.ts.map +1 -0
  154. package/dist/plugins/summarizers/build-output-summarizer.js +68 -0
  155. package/dist/plugins/summarizers/build-output-summarizer.js.map +1 -0
  156. package/dist/plugins/summarizers/code-summarizer.d.ts +12 -0
  157. package/dist/plugins/summarizers/code-summarizer.d.ts.map +1 -0
  158. package/dist/plugins/summarizers/code-summarizer.js +179 -0
  159. package/dist/plugins/summarizers/code-summarizer.js.map +1 -0
  160. package/dist/plugins/summarizers/csv-summarizer.d.ts +12 -0
  161. package/dist/plugins/summarizers/csv-summarizer.d.ts.map +1 -0
  162. package/dist/plugins/summarizers/csv-summarizer.js +60 -0
  163. package/dist/plugins/summarizers/csv-summarizer.js.map +1 -0
  164. package/dist/plugins/summarizers/error-summarizer.d.ts +15 -0
  165. package/dist/plugins/summarizers/error-summarizer.d.ts.map +1 -0
  166. package/dist/plugins/summarizers/error-summarizer.js +111 -0
  167. package/dist/plugins/summarizers/error-summarizer.js.map +1 -0
  168. package/dist/plugins/summarizers/git-log-summarizer.d.ts +12 -0
  169. package/dist/plugins/summarizers/git-log-summarizer.d.ts.map +1 -0
  170. package/dist/plugins/summarizers/git-log-summarizer.js +76 -0
  171. package/dist/plugins/summarizers/git-log-summarizer.js.map +1 -0
  172. package/dist/plugins/summarizers/html-summarizer.d.ts +12 -0
  173. package/dist/plugins/summarizers/html-summarizer.d.ts.map +1 -0
  174. package/dist/plugins/summarizers/html-summarizer.js +69 -0
  175. package/dist/plugins/summarizers/html-summarizer.js.map +1 -0
  176. package/dist/plugins/summarizers/json-summarizer.d.ts +12 -0
  177. package/dist/plugins/summarizers/json-summarizer.d.ts.map +1 -0
  178. package/dist/plugins/summarizers/json-summarizer.js +132 -0
  179. package/dist/plugins/summarizers/json-summarizer.js.map +1 -0
  180. package/dist/plugins/summarizers/log-summarizer.d.ts +12 -0
  181. package/dist/plugins/summarizers/log-summarizer.d.ts.map +1 -0
  182. package/dist/plugins/summarizers/log-summarizer.js +173 -0
  183. package/dist/plugins/summarizers/log-summarizer.js.map +1 -0
  184. package/dist/plugins/summarizers/markdown-summarizer.d.ts +12 -0
  185. package/dist/plugins/summarizers/markdown-summarizer.d.ts.map +1 -0
  186. package/dist/plugins/summarizers/markdown-summarizer.js +75 -0
  187. package/dist/plugins/summarizers/markdown-summarizer.js.map +1 -0
  188. package/dist/plugins/summarizers/network-summarizer.d.ts +12 -0
  189. package/dist/plugins/summarizers/network-summarizer.d.ts.map +1 -0
  190. package/dist/plugins/summarizers/network-summarizer.js +74 -0
  191. package/dist/plugins/summarizers/network-summarizer.js.map +1 -0
  192. package/dist/plugins/summarizers/shell-summarizer.d.ts +12 -0
  193. package/dist/plugins/summarizers/shell-summarizer.d.ts.map +1 -0
  194. package/dist/plugins/summarizers/shell-summarizer.js +50 -0
  195. package/dist/plugins/summarizers/shell-summarizer.js.map +1 -0
  196. package/dist/plugins/summarizers/test-output-summarizer.d.ts +12 -0
  197. package/dist/plugins/summarizers/test-output-summarizer.d.ts.map +1 -0
  198. package/dist/plugins/summarizers/test-output-summarizer.js +77 -0
  199. package/dist/plugins/summarizers/test-output-summarizer.js.map +1 -0
  200. package/dist/plugins/summarizers/typescript-error-summarizer.d.ts +12 -0
  201. package/dist/plugins/summarizers/typescript-error-summarizer.d.ts.map +1 -0
  202. package/dist/plugins/summarizers/typescript-error-summarizer.js +67 -0
  203. package/dist/plugins/summarizers/typescript-error-summarizer.js.map +1 -0
  204. package/hooks/context-mem-hook.js +77 -0
  205. package/hooks/dashboard-autostart.js +92 -0
  206. package/hooks/dashboard-stop.js +32 -0
  207. package/hooks/hooks.json +40 -0
  208. package/package.json +32 -0
@@ -0,0 +1,618 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.toolDefinitions = void 0;
4
+ exports.handleObserve = handleObserve;
5
+ exports.handleSummarize = handleSummarize;
6
+ exports.handleSearch = handleSearch;
7
+ exports.handleTimeline = handleTimeline;
8
+ exports.handleGet = handleGet;
9
+ exports.handleStats = handleStats;
10
+ exports.handleConfigure = handleConfigure;
11
+ exports.handleExecute = handleExecute;
12
+ exports.handleIndexContent = handleIndexContent;
13
+ exports.handleSearchContent = handleSearchContent;
14
+ exports.handleSaveKnowledge = handleSaveKnowledge;
15
+ exports.handleSearchKnowledge = handleSearchKnowledge;
16
+ exports.handleBudgetStatus = handleBudgetStatus;
17
+ exports.handleBudgetConfigure = handleBudgetConfigure;
18
+ exports.handleRestoreSession = handleRestoreSession;
19
+ exports.handleEmitEvent = handleEmitEvent;
20
+ exports.handleQueryEvents = handleQueryEvents;
21
+ const types_js_1 = require("../core/types.js");
22
+ // ---------------------------------------------------------------------------
23
+ // Input validation helpers
24
+ // ---------------------------------------------------------------------------
25
+ const MAX_CONTENT_LENGTH = 512 * 1024; // 512KB
26
+ const MAX_LIMIT = 100;
27
+ const MIN_LIMIT = 1;
28
+ function validateLimit(v) {
29
+ const n = Number(v);
30
+ if (!Number.isFinite(n) || !Number.isInteger(n))
31
+ return 5;
32
+ return Math.max(MIN_LIMIT, Math.min(MAX_LIMIT, n));
33
+ }
34
+ function validateTimestamp(v) {
35
+ if (v === undefined || v === null)
36
+ return undefined;
37
+ const n = Number(v);
38
+ if (!Number.isFinite(n) || n < 0)
39
+ return undefined;
40
+ return n;
41
+ }
42
+ function validateObservationType(v) {
43
+ const s = String(v || 'context');
44
+ return types_js_1.OBSERVATION_TYPES.includes(s) ? s : 'context';
45
+ }
46
+ exports.toolDefinitions = [
47
+ // Task 19 tools
48
+ {
49
+ name: 'observe',
50
+ description: 'Store a new observation (content snippet) into context memory with automatic summarization.',
51
+ inputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ content: { type: 'string', description: 'The content to observe and store' },
55
+ type: {
56
+ type: 'string',
57
+ enum: ['code', 'error', 'log', 'test', 'commit', 'decision', 'context'],
58
+ description: 'Content type (default: context)',
59
+ },
60
+ source: { type: 'string', description: 'Source identifier (default: mcp)' },
61
+ },
62
+ required: ['content'],
63
+ },
64
+ },
65
+ {
66
+ name: 'summarize',
67
+ description: 'Summarize a piece of content using the matching summarizer plugin without storing it.',
68
+ inputSchema: {
69
+ type: 'object',
70
+ properties: {
71
+ content: { type: 'string', description: 'Content to summarize' },
72
+ },
73
+ required: ['content'],
74
+ },
75
+ },
76
+ // Task 20 tools
77
+ {
78
+ name: 'search',
79
+ description: 'Search stored observations using BM25 + trigram fusion.',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ query: { type: 'string', description: 'Search query' },
84
+ type: {
85
+ type: 'string',
86
+ enum: ['code', 'error', 'log', 'test', 'commit', 'decision', 'context'],
87
+ description: 'Filter by observation type',
88
+ },
89
+ limit: { type: 'number', description: 'Max results (default: 5)' },
90
+ },
91
+ required: ['query'],
92
+ },
93
+ },
94
+ {
95
+ name: 'timeline',
96
+ description: 'Retrieve observations in reverse-chronological order with optional filters.',
97
+ inputSchema: {
98
+ type: 'object',
99
+ properties: {
100
+ from: { type: 'number', description: 'Start timestamp (ms since epoch)' },
101
+ to: { type: 'number', description: 'End timestamp (ms since epoch)' },
102
+ type: {
103
+ type: 'string',
104
+ enum: ['code', 'error', 'log', 'test', 'commit', 'decision', 'context'],
105
+ description: 'Filter by type',
106
+ },
107
+ session_id: { type: 'string', description: 'Filter by session ID' },
108
+ limit: { type: 'number', description: 'Max results (default: 20)' },
109
+ },
110
+ required: [],
111
+ },
112
+ },
113
+ {
114
+ name: 'get',
115
+ description: 'Retrieve a single observation by its ID.',
116
+ inputSchema: {
117
+ type: 'object',
118
+ properties: {
119
+ id: { type: 'string', description: 'Observation ID' },
120
+ },
121
+ required: ['id'],
122
+ },
123
+ },
124
+ // Task 21 tools
125
+ {
126
+ name: 'stats',
127
+ description: 'Get token economy statistics for the current session.',
128
+ inputSchema: {
129
+ type: 'object',
130
+ properties: {},
131
+ required: [],
132
+ },
133
+ },
134
+ {
135
+ name: 'configure',
136
+ description: 'Update a mutable configuration key at runtime.',
137
+ inputSchema: {
138
+ type: 'object',
139
+ properties: {
140
+ key: { type: 'string', description: 'Config key (e.g. "privacy.strip_tags")' },
141
+ value: { description: 'New value for the config key' },
142
+ },
143
+ required: ['key', 'value'],
144
+ },
145
+ },
146
+ {
147
+ name: 'execute',
148
+ description: 'Execute a code snippet using an available runtime plugin.',
149
+ inputSchema: {
150
+ type: 'object',
151
+ properties: {
152
+ code: { type: 'string', description: 'Code to execute' },
153
+ language: { type: 'string', description: 'Language hint (e.g. "javascript", "python")' },
154
+ },
155
+ required: ['code'],
156
+ },
157
+ },
158
+ // Content store tools
159
+ {
160
+ name: 'index_content',
161
+ description: 'Index content into the content store with code-aware chunking for later search.',
162
+ inputSchema: {
163
+ type: 'object',
164
+ properties: {
165
+ content: { type: 'string', description: 'Content to index' },
166
+ source: { type: 'string', description: 'Source identifier (e.g. file path, URL)' },
167
+ },
168
+ required: ['content', 'source'],
169
+ },
170
+ },
171
+ {
172
+ name: 'search_content',
173
+ description: 'Search the content store for indexed content chunks.',
174
+ inputSchema: {
175
+ type: 'object',
176
+ properties: {
177
+ query: { type: 'string', description: 'Search query' },
178
+ source: { type: 'string', description: 'Filter by source' },
179
+ limit: { type: 'number', description: 'Max results (default: 5)' },
180
+ },
181
+ required: ['query'],
182
+ },
183
+ },
184
+ // Knowledge base tools
185
+ {
186
+ name: 'save_knowledge',
187
+ description: 'Save a knowledge entry (pattern, decision, error, api, or component).',
188
+ inputSchema: {
189
+ type: 'object',
190
+ properties: {
191
+ category: { type: 'string', enum: ['pattern', 'decision', 'error', 'api', 'component'], description: 'Knowledge category' },
192
+ title: { type: 'string', description: 'Short title' },
193
+ content: { type: 'string', description: 'Knowledge content' },
194
+ tags: { type: 'array', items: { type: 'string' }, description: 'Tags for categorization' },
195
+ shareable: { type: 'boolean', description: 'Whether this knowledge can be shared (default: true)' },
196
+ },
197
+ required: ['category', 'title', 'content'],
198
+ },
199
+ },
200
+ {
201
+ name: 'search_knowledge',
202
+ description: 'Search the knowledge base using 3-layer search (FTS5 → trigram → scan).',
203
+ inputSchema: {
204
+ type: 'object',
205
+ properties: {
206
+ query: { type: 'string', description: 'Search query' },
207
+ category: { type: 'string', enum: ['pattern', 'decision', 'error', 'api', 'component'], description: 'Filter by category' },
208
+ limit: { type: 'number', description: 'Max results (default: 10)' },
209
+ },
210
+ required: ['query'],
211
+ },
212
+ },
213
+ // Budget tools
214
+ {
215
+ name: 'budget_status',
216
+ description: 'Get current budget usage and status for the session.',
217
+ inputSchema: {
218
+ type: 'object',
219
+ properties: {},
220
+ required: [],
221
+ },
222
+ },
223
+ {
224
+ name: 'budget_configure',
225
+ description: 'Configure budget settings (session limit, overflow strategy).',
226
+ inputSchema: {
227
+ type: 'object',
228
+ properties: {
229
+ session_limit: { type: 'number', description: 'Token budget limit for session' },
230
+ overflow_strategy: { type: 'string', enum: ['aggressive_truncation', 'warn', 'hard_stop'], description: 'What to do when budget is exceeded' },
231
+ },
232
+ required: [],
233
+ },
234
+ },
235
+ // Session tools
236
+ {
237
+ name: 'restore_session',
238
+ description: 'Restore a previous session snapshot by session ID.',
239
+ inputSchema: {
240
+ type: 'object',
241
+ properties: {
242
+ session_id: { type: 'string', description: 'Session ID to restore' },
243
+ },
244
+ required: ['session_id'],
245
+ },
246
+ },
247
+ // Event tools
248
+ {
249
+ name: 'emit_event',
250
+ description: 'Emit a context event with priority and metadata.',
251
+ inputSchema: {
252
+ type: 'object',
253
+ properties: {
254
+ event_type: { type: 'string', description: 'Event type (e.g. task_start, error, file_modify, decision)' },
255
+ data: { type: 'object', description: 'Event data/metadata' },
256
+ agent: { type: 'string', description: 'Agent identifier' },
257
+ },
258
+ required: ['event_type'],
259
+ },
260
+ },
261
+ {
262
+ name: 'query_events',
263
+ description: 'Query context events with optional filters.',
264
+ inputSchema: {
265
+ type: 'object',
266
+ properties: {
267
+ event_type: { type: 'string', description: 'Filter by event type' },
268
+ priority: { type: 'number', description: 'Filter by max priority (1=critical, 4=low)' },
269
+ limit: { type: 'number', description: 'Max results (default: 50)' },
270
+ from: { type: 'number', description: 'Start timestamp' },
271
+ to: { type: 'number', description: 'End timestamp' },
272
+ },
273
+ required: [],
274
+ },
275
+ },
276
+ ];
277
+ // ---------------------------------------------------------------------------
278
+ // Tool handlers
279
+ // ---------------------------------------------------------------------------
280
+ // Task 19 — observe
281
+ async function handleObserve(params, kernel) {
282
+ if (!params.content || typeof params.content !== 'string') {
283
+ return { error: 'content is required and must be a non-empty string' };
284
+ }
285
+ if (params.content.length > MAX_CONTENT_LENGTH) {
286
+ return { error: `content exceeds maximum length of ${MAX_CONTENT_LENGTH} bytes` };
287
+ }
288
+ const type = validateObservationType(params.type);
289
+ const source = params.source || 'mcp';
290
+ const obs = await kernel.pipeline.observe(params.content, type, source);
291
+ const tokensSaved = obs.metadata.tokens_original - obs.metadata.tokens_summarized;
292
+ return {
293
+ id: obs.id,
294
+ summary: obs.summary,
295
+ tokens_saved: tokensSaved,
296
+ };
297
+ }
298
+ // Task 19 — summarize
299
+ async function handleSummarize(params, kernel) {
300
+ if (!params.content || typeof params.content !== 'string') {
301
+ return { error: 'content is required and must be a non-empty string' };
302
+ }
303
+ const summarizers = kernel.registry.getAll('summarizer');
304
+ const matching = summarizers.find(s => s.detect(params.content));
305
+ if (!matching) {
306
+ // No summarizer matched — return raw content as summary
307
+ const len = params.content.length;
308
+ const tokens = Math.ceil(len / 4);
309
+ return {
310
+ summary: params.content,
311
+ tokens_original: tokens,
312
+ tokens_summarized: tokens,
313
+ savings_pct: 0,
314
+ };
315
+ }
316
+ const result = await matching.summarize(params.content, {});
317
+ return {
318
+ summary: result.summary,
319
+ tokens_original: result.tokens_original,
320
+ tokens_summarized: result.tokens_summarized,
321
+ savings_pct: result.savings_pct,
322
+ };
323
+ }
324
+ // Task 20 — search
325
+ async function handleSearch(params, kernel) {
326
+ const opts = {
327
+ limit: validateLimit(params.limit ?? 5),
328
+ };
329
+ if (params.type) {
330
+ opts.type_filter = [validateObservationType(params.type)];
331
+ }
332
+ const results = await kernel.search.execute(params.query, opts);
333
+ return results.map(r => ({
334
+ id: r.id,
335
+ title: r.title,
336
+ snippet: r.snippet,
337
+ relevance_score: r.relevance_score,
338
+ timestamp: r.timestamp,
339
+ }));
340
+ }
341
+ async function handleTimeline(params, kernel) {
342
+ const validFrom = validateTimestamp(params.from);
343
+ const validTo = validateTimestamp(params.to);
344
+ const validLimit = validateLimit(params.limit ?? 20);
345
+ let sql = 'SELECT id, type, summary, indexed_at FROM observations WHERE 1=1';
346
+ const queryParams = [];
347
+ if (validFrom !== undefined) {
348
+ sql += ' AND indexed_at >= ?';
349
+ queryParams.push(validFrom);
350
+ }
351
+ if (validTo !== undefined) {
352
+ sql += ' AND indexed_at <= ?';
353
+ queryParams.push(validTo);
354
+ }
355
+ if (params.type) {
356
+ sql += ' AND type = ?';
357
+ queryParams.push(validateObservationType(params.type));
358
+ }
359
+ if (params.session_id) {
360
+ sql += ' AND session_id = ?';
361
+ queryParams.push(params.session_id);
362
+ }
363
+ sql += ' ORDER BY indexed_at DESC LIMIT ?';
364
+ queryParams.push(validLimit);
365
+ const rows = kernel.storage.prepare(sql).all(...queryParams);
366
+ return rows.map(row => ({
367
+ id: row.id,
368
+ type: row.type,
369
+ summary: row.summary,
370
+ timestamp: row.indexed_at,
371
+ }));
372
+ }
373
+ async function handleGet(params, kernel) {
374
+ const row = kernel.storage
375
+ .prepare('SELECT id, type, content, summary, metadata FROM observations WHERE id = ?')
376
+ .get(params.id);
377
+ if (!row) {
378
+ return { error: `Observation not found: ${params.id}` };
379
+ }
380
+ let metadata = {};
381
+ try {
382
+ metadata = JSON.parse(row.metadata);
383
+ }
384
+ catch {
385
+ // malformed metadata — leave empty
386
+ }
387
+ return {
388
+ id: row.id,
389
+ type: row.type,
390
+ content: row.content,
391
+ summary: row.summary,
392
+ metadata,
393
+ };
394
+ }
395
+ // Task 21 — stats
396
+ async function handleStats(_params, kernel) {
397
+ // Aggregate from token_stats table
398
+ const countRow = kernel.storage
399
+ .prepare('SELECT COUNT(*) as n FROM observations WHERE session_id = ?')
400
+ .get(kernel.sessionId);
401
+ const sizeRow = kernel.storage
402
+ .prepare("SELECT COALESCE(SUM(LENGTH(content)),0) as total_content, COALESCE(SUM(LENGTH(COALESCE(summary,''))),0) as total_summary FROM observations WHERE session_id = ?")
403
+ .get(kernel.sessionId);
404
+ const tokenRow = kernel.storage
405
+ .prepare("SELECT COALESCE(SUM(tokens_in),0) as tokens_in, COALESCE(SUM(tokens_out),0) as tokens_out, COALESCE(SUM(tokens_in - tokens_out),0) as saved FROM token_stats WHERE session_id = ? AND event_type = 'store'")
406
+ .get(kernel.sessionId);
407
+ const searchRow = kernel.storage
408
+ .prepare("SELECT COUNT(*) as n FROM token_stats WHERE session_id = ? AND event_type = 'discovery'")
409
+ .get(kernel.sessionId);
410
+ const tokensIn = tokenRow.tokens_in || 0;
411
+ const tokensSaved = tokenRow.saved || 0;
412
+ const savingsPct = tokensIn > 0 ? Math.round((tokensSaved / tokensIn) * 100) : 0;
413
+ return {
414
+ session_id: kernel.sessionId,
415
+ observations_stored: countRow.n,
416
+ total_content_bytes: sizeRow.total_content,
417
+ total_summary_bytes: sizeRow.total_summary,
418
+ searches_performed: searchRow.n,
419
+ discovery_tokens: tokenRow.tokens_out || 0,
420
+ read_tokens: tokensIn,
421
+ tokens_saved: tokensSaved,
422
+ savings_percentage: savingsPct,
423
+ };
424
+ }
425
+ const MUTABLE_CONFIG_KEYS = new Set([
426
+ 'privacy.strip_tags',
427
+ 'privacy.redact_patterns',
428
+ 'token_economics',
429
+ 'lifecycle.ttl_days',
430
+ 'lifecycle.max_observations',
431
+ 'lifecycle.cleanup_schedule',
432
+ ]);
433
+ // Task 21 — configure
434
+ async function handleConfigure(params, kernel) {
435
+ // Reject prototype pollution keys
436
+ const segments = params.key.split('.');
437
+ for (const seg of segments) {
438
+ if (seg === '__proto__' || seg === 'constructor' || seg === 'prototype') {
439
+ return { error: `Forbidden config key segment: "${seg}"` };
440
+ }
441
+ }
442
+ // Reject keys not in the allowlist
443
+ if (!MUTABLE_CONFIG_KEYS.has(params.key)) {
444
+ return { error: `Key "${params.key}" is not in the mutable config allowlist` };
445
+ }
446
+ // Apply mutable config updates via key path
447
+ const keys = segments;
448
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
449
+ let cursor = kernel.config;
450
+ for (let i = 0; i < keys.length - 1; i++) {
451
+ if (typeof cursor[keys[i]] !== 'object' || cursor[keys[i]] === null) {
452
+ cursor[keys[i]] = {};
453
+ }
454
+ cursor = cursor[keys[i]];
455
+ }
456
+ cursor[keys[keys.length - 1]] = params.value;
457
+ return { updated: true, key: params.key, value: params.value };
458
+ }
459
+ const SENSITIVE_ENV_RE = /KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL/i;
460
+ // Task 21 — execute
461
+ async function handleExecute(params, kernel) {
462
+ // Safety check: execute tool must be explicitly enabled
463
+ if (!kernel.config.execute_enabled) {
464
+ return { error: 'Execute tool is disabled. Set execute_enabled: true in .context-mem.json' };
465
+ }
466
+ const runtimes = kernel.registry.getAll('runtime');
467
+ if (runtimes.length === 0) {
468
+ return { error: 'No runtime plugins available' };
469
+ }
470
+ // Find matching runtime by language hint
471
+ let runtime;
472
+ if (params.language) {
473
+ runtime = runtimes.find(r => r.language === params.language);
474
+ }
475
+ // Fall back to first available
476
+ if (!runtime) {
477
+ runtime = runtimes[0];
478
+ }
479
+ // Strip sensitive env vars before passing to runtime
480
+ const safeEnv = {};
481
+ for (const [key, val] of Object.entries(process.env)) {
482
+ if (!SENSITIVE_ENV_RE.test(key) && val !== undefined) {
483
+ safeEnv[key] = val;
484
+ }
485
+ }
486
+ try {
487
+ const result = await runtime.execute(params.code, { env: safeEnv });
488
+ return {
489
+ stdout: result.stdout,
490
+ stderr: result.stderr,
491
+ exit_code: result.exit_code,
492
+ duration_ms: result.duration_ms,
493
+ };
494
+ }
495
+ catch (err) {
496
+ return { error: err.message };
497
+ }
498
+ }
499
+ // ---------------------------------------------------------------------------
500
+ // Content Store handlers
501
+ // ---------------------------------------------------------------------------
502
+ async function handleIndexContent(params, kernel) {
503
+ if (!params.content || typeof params.content !== 'string') {
504
+ return { error: 'content is required' };
505
+ }
506
+ if (!params.source || typeof params.source !== 'string') {
507
+ return { error: 'source is required' };
508
+ }
509
+ if (params.content.length > MAX_CONTENT_LENGTH) {
510
+ return { error: `content exceeds maximum length of ${MAX_CONTENT_LENGTH} bytes` };
511
+ }
512
+ const sourceId = kernel.contentStore.index(params.content, params.source);
513
+ return { source_id: sourceId, source: params.source };
514
+ }
515
+ async function handleSearchContent(params, kernel) {
516
+ return kernel.contentStore.search(params.query, {
517
+ source: params.source,
518
+ limit: validateLimit(params.limit ?? 5),
519
+ });
520
+ }
521
+ // ---------------------------------------------------------------------------
522
+ // Knowledge Base handlers
523
+ // ---------------------------------------------------------------------------
524
+ const KNOWLEDGE_CATEGORIES = ['pattern', 'decision', 'error', 'api', 'component'];
525
+ async function handleSaveKnowledge(params, kernel) {
526
+ if (!params.title || !params.content) {
527
+ return { error: 'title and content are required' };
528
+ }
529
+ const category = KNOWLEDGE_CATEGORIES.includes(params.category)
530
+ ? params.category
531
+ : 'pattern';
532
+ const entry = kernel.knowledgeBase.save({
533
+ category,
534
+ title: params.title,
535
+ content: params.content,
536
+ tags: params.tags,
537
+ shareable: params.shareable,
538
+ });
539
+ return { id: entry.id, category: entry.category, title: entry.title };
540
+ }
541
+ async function handleSearchKnowledge(params, kernel) {
542
+ const category = params.category && KNOWLEDGE_CATEGORIES.includes(params.category)
543
+ ? params.category
544
+ : undefined;
545
+ const results = kernel.knowledgeBase.search(params.query, {
546
+ category,
547
+ limit: validateLimit(params.limit ?? 10),
548
+ });
549
+ return results.map(r => ({
550
+ id: r.id,
551
+ category: r.category,
552
+ title: r.title,
553
+ content: r.content,
554
+ relevance_score: r.relevance_score,
555
+ tags: r.tags,
556
+ }));
557
+ }
558
+ // ---------------------------------------------------------------------------
559
+ // Budget handlers
560
+ // ---------------------------------------------------------------------------
561
+ async function handleBudgetStatus(_params, kernel) {
562
+ return kernel.budgetManager.getStatus(kernel.sessionId);
563
+ }
564
+ async function handleBudgetConfigure(params, kernel) {
565
+ const config = {};
566
+ if (params.session_limit !== undefined) {
567
+ if (typeof params.session_limit !== 'number' || params.session_limit <= 0) {
568
+ return { error: 'session_limit must be a positive number' };
569
+ }
570
+ config.session_limit = params.session_limit;
571
+ }
572
+ if (params.overflow_strategy !== undefined) {
573
+ const valid = ['aggressive_truncation', 'warn', 'hard_stop'];
574
+ if (!valid.includes(params.overflow_strategy)) {
575
+ return { error: `overflow_strategy must be one of: ${valid.join(', ')}` };
576
+ }
577
+ config.overflow_strategy = params.overflow_strategy;
578
+ }
579
+ kernel.budgetManager.configure(config);
580
+ return { updated: true };
581
+ }
582
+ // ---------------------------------------------------------------------------
583
+ // Session handlers
584
+ // ---------------------------------------------------------------------------
585
+ async function handleRestoreSession(params, kernel) {
586
+ if (!params.session_id) {
587
+ return { error: 'session_id is required' };
588
+ }
589
+ const result = kernel.sessionManager.restoreSnapshot(params.session_id);
590
+ if (!result) {
591
+ return { error: `No snapshot found for session: ${params.session_id}` };
592
+ }
593
+ return result;
594
+ }
595
+ // ---------------------------------------------------------------------------
596
+ // Event handlers
597
+ // ---------------------------------------------------------------------------
598
+ async function handleEmitEvent(params, kernel) {
599
+ const event = kernel.eventTracker.emit(kernel.sessionId, params.event_type, params.data || {}, params.agent);
600
+ return { id: event.id, event_type: event.event_type, priority: event.priority };
601
+ }
602
+ async function handleQueryEvents(params, kernel) {
603
+ const events = kernel.eventTracker.query(kernel.sessionId, {
604
+ event_type: params.event_type,
605
+ priority: params.priority,
606
+ limit: validateLimit(params.limit ?? 50),
607
+ from: validateTimestamp(params.from),
608
+ to: validateTimestamp(params.to),
609
+ });
610
+ return events.map(e => ({
611
+ id: e.id,
612
+ event_type: e.event_type,
613
+ priority: e.priority,
614
+ data: e.data,
615
+ timestamp: e.timestamp,
616
+ }));
617
+ }
618
+ //# sourceMappingURL=tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/mcp-server/tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import type { StoragePlugin, KnowledgeEntry, KnowledgeCategory } from '../../core/types.js';
2
+ export declare class KnowledgeBase {
3
+ private storage;
4
+ constructor(storage: StoragePlugin);
5
+ save(entry: {
6
+ category: KnowledgeCategory;
7
+ title: string;
8
+ content: string;
9
+ tags?: string[];
10
+ shareable?: boolean;
11
+ }): KnowledgeEntry;
12
+ search(query: string, opts?: {
13
+ category?: KnowledgeCategory;
14
+ limit?: number;
15
+ }): KnowledgeEntry[];
16
+ access(id: string): KnowledgeEntry | null;
17
+ prune(): number;
18
+ private searchFTS5;
19
+ private searchTrigram;
20
+ private searchScan;
21
+ private rowToEntry;
22
+ }
23
+ //# sourceMappingURL=knowledge-base.d.ts.map