@stackmemoryai/stackmemory 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 (50) hide show
  1. package/README.md +317 -0
  2. package/dist/attention-scoring/src/attention-tracker.d.ts +79 -0
  3. package/dist/attention-scoring/src/attention-tracker.d.ts.map +1 -0
  4. package/dist/attention-scoring/src/attention-tracker.js +488 -0
  5. package/dist/attention-scoring/src/attention-tracker.js.map +1 -0
  6. package/dist/attention-scoring/src/mcp-integration.d.ts +56 -0
  7. package/dist/attention-scoring/src/mcp-integration.d.ts.map +1 -0
  8. package/dist/attention-scoring/src/mcp-integration.js +369 -0
  9. package/dist/attention-scoring/src/mcp-integration.js.map +1 -0
  10. package/dist/p2p-sync/src/p2p-sync.d.ts +81 -0
  11. package/dist/p2p-sync/src/p2p-sync.d.ts.map +1 -0
  12. package/dist/p2p-sync/src/p2p-sync.js +457 -0
  13. package/dist/p2p-sync/src/p2p-sync.js.map +1 -0
  14. package/dist/p2p-sync/src/team-context-sync.d.ts +99 -0
  15. package/dist/p2p-sync/src/team-context-sync.d.ts.map +1 -0
  16. package/dist/p2p-sync/src/team-context-sync.js +491 -0
  17. package/dist/p2p-sync/src/team-context-sync.js.map +1 -0
  18. package/dist/scripts/initialize.d.ts +6 -0
  19. package/dist/scripts/initialize.d.ts.map +1 -0
  20. package/dist/scripts/initialize.js +93 -0
  21. package/dist/scripts/initialize.js.map +1 -0
  22. package/dist/scripts/status.d.ts +6 -0
  23. package/dist/scripts/status.d.ts.map +1 -0
  24. package/dist/scripts/status.js +87 -0
  25. package/dist/scripts/status.js.map +1 -0
  26. package/dist/src/cli.d.ts +7 -0
  27. package/dist/src/cli.d.ts.map +1 -0
  28. package/dist/src/cli.js +73 -0
  29. package/dist/src/cli.js.map +1 -0
  30. package/dist/src/error-handler.d.ts +42 -0
  31. package/dist/src/error-handler.d.ts.map +1 -0
  32. package/dist/src/error-handler.js +155 -0
  33. package/dist/src/error-handler.js.map +1 -0
  34. package/dist/src/frame-manager.d.ts +106 -0
  35. package/dist/src/frame-manager.d.ts.map +1 -0
  36. package/dist/src/frame-manager.js +361 -0
  37. package/dist/src/frame-manager.js.map +1 -0
  38. package/dist/src/index.d.ts +21 -0
  39. package/dist/src/index.d.ts.map +1 -0
  40. package/dist/src/index.js +9 -0
  41. package/dist/src/index.js.map +1 -0
  42. package/dist/src/logger.d.ts +24 -0
  43. package/dist/src/logger.d.ts.map +1 -0
  44. package/dist/src/logger.js +120 -0
  45. package/dist/src/logger.js.map +1 -0
  46. package/dist/src/mcp-server.d.ts +32 -0
  47. package/dist/src/mcp-server.d.ts.map +1 -0
  48. package/dist/src/mcp-server.js +441 -0
  49. package/dist/src/mcp-server.js.map +1 -0
  50. package/package.json +69 -0
@@ -0,0 +1,441 @@
1
+ #!/usr/bin/env node
2
+ /**
3
+ * StackMemory MCP Server - Local Instance
4
+ * This runs locally and provides context to Claude Code
5
+ */
6
+ import { Server } from '@modelcontextprotocol/sdk/server/index.js';
7
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
8
+ import { z } from 'zod';
9
+ import Database from 'better-sqlite3';
10
+ import { readFileSync, existsSync, mkdirSync } from 'fs';
11
+ import { join, dirname } from 'path';
12
+ import { fileURLToPath } from 'url';
13
+ import { execSync } from 'child_process';
14
+ import { FrameManager } from './frame-manager.js';
15
+ import { logger } from './logger.js';
16
+ const __dirname = dirname(fileURLToPath(import.meta.url));
17
+ // ============================================
18
+ // Simple Local MCP Server
19
+ // ============================================
20
+ class LocalStackMemoryMCP {
21
+ server;
22
+ db;
23
+ projectRoot;
24
+ frameManager;
25
+ projectId;
26
+ contexts = new Map();
27
+ constructor() {
28
+ // Find project root (where .git is)
29
+ this.projectRoot = this.findProjectRoot();
30
+ this.projectId = this.getProjectId();
31
+ // Ensure .stackmemory directory exists
32
+ const dbDir = join(this.projectRoot, '.stackmemory');
33
+ if (!existsSync(dbDir)) {
34
+ mkdirSync(dbDir, { recursive: true });
35
+ }
36
+ // Initialize database
37
+ const dbPath = join(dbDir, 'context.db');
38
+ this.db = new Database(dbPath);
39
+ this.initDB();
40
+ // Initialize frame manager
41
+ this.frameManager = new FrameManager(this.db, this.projectId);
42
+ // Initialize MCP server
43
+ this.server = new Server({
44
+ name: 'stackmemory-local',
45
+ version: '0.1.0'
46
+ }, {
47
+ capabilities: {
48
+ tools: {}
49
+ }
50
+ });
51
+ this.setupHandlers();
52
+ this.loadInitialContext();
53
+ logger.info('StackMemory MCP Server initialized', {
54
+ projectRoot: this.projectRoot,
55
+ projectId: this.projectId
56
+ });
57
+ }
58
+ findProjectRoot() {
59
+ let dir = process.cwd();
60
+ while (dir !== '/') {
61
+ if (existsSync(join(dir, '.git'))) {
62
+ return dir;
63
+ }
64
+ dir = dirname(dir);
65
+ }
66
+ return process.cwd();
67
+ }
68
+ initDB() {
69
+ this.db.exec(`
70
+ CREATE TABLE IF NOT EXISTS contexts (
71
+ id TEXT PRIMARY KEY,
72
+ type TEXT NOT NULL,
73
+ content TEXT NOT NULL,
74
+ importance REAL DEFAULT 0.5,
75
+ created_at INTEGER DEFAULT (unixepoch()),
76
+ last_accessed INTEGER DEFAULT (unixepoch()),
77
+ access_count INTEGER DEFAULT 1
78
+ );
79
+
80
+ CREATE TABLE IF NOT EXISTS frames (
81
+ frame_id TEXT PRIMARY KEY,
82
+ task TEXT NOT NULL,
83
+ status TEXT DEFAULT 'active',
84
+ created_at INTEGER DEFAULT (unixepoch())
85
+ );
86
+
87
+ CREATE TABLE IF NOT EXISTS attention_log (
88
+ id INTEGER PRIMARY KEY AUTOINCREMENT,
89
+ context_id TEXT,
90
+ query TEXT,
91
+ response TEXT,
92
+ influence_score REAL,
93
+ timestamp INTEGER DEFAULT (unixepoch())
94
+ );
95
+ `);
96
+ }
97
+ loadInitialContext() {
98
+ // Load project information
99
+ const projectInfo = this.getProjectInfo();
100
+ this.addContext('project', `Project: ${projectInfo.name}\nPath: ${projectInfo.path}`, 0.9);
101
+ // Load recent git commits
102
+ try {
103
+ const recentCommits = execSync('git log --oneline -10', {
104
+ cwd: this.projectRoot
105
+ }).toString();
106
+ this.addContext('git_history', `Recent commits:\n${recentCommits}`, 0.6);
107
+ }
108
+ catch (e) {
109
+ // Not a git repo or git not available
110
+ }
111
+ // Load README if exists
112
+ const readmePath = join(this.projectRoot, 'README.md');
113
+ if (existsSync(readmePath)) {
114
+ const readme = readFileSync(readmePath, 'utf-8');
115
+ const summary = readme.substring(0, 500);
116
+ this.addContext('readme', `Project README:\n${summary}...`, 0.8);
117
+ }
118
+ // Load any existing decisions from previous sessions
119
+ this.loadStoredContexts();
120
+ }
121
+ getProjectId() {
122
+ // Use git remote or directory name as project ID
123
+ try {
124
+ const remoteUrl = execSync('git config --get remote.origin.url', {
125
+ cwd: this.projectRoot,
126
+ stdio: 'pipe'
127
+ }).toString().trim();
128
+ return remoteUrl || this.projectRoot.split('/').pop() || 'unknown';
129
+ }
130
+ catch {
131
+ return this.projectRoot.split('/').pop() || 'unknown';
132
+ }
133
+ }
134
+ getProjectInfo() {
135
+ const packageJsonPath = join(this.projectRoot, 'package.json');
136
+ if (existsSync(packageJsonPath)) {
137
+ const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
138
+ return {
139
+ name: pkg.name || 'unknown',
140
+ path: this.projectRoot
141
+ };
142
+ }
143
+ return {
144
+ name: this.projectRoot.split('/').pop() || 'unknown',
145
+ path: this.projectRoot
146
+ };
147
+ }
148
+ addContext(type, content, importance = 0.5) {
149
+ const id = `${type}_${Date.now()}`;
150
+ this.db.prepare(`
151
+ INSERT OR REPLACE INTO contexts (id, type, content, importance)
152
+ VALUES (?, ?, ?, ?)
153
+ `).run(id, type, content, importance);
154
+ this.contexts.set(id, { type, content, importance });
155
+ return id;
156
+ }
157
+ loadStoredContexts() {
158
+ const stored = this.db.prepare(`
159
+ SELECT * FROM contexts
160
+ ORDER BY importance DESC, last_accessed DESC
161
+ LIMIT 50
162
+ `).all();
163
+ stored.forEach(ctx => {
164
+ this.contexts.set(ctx.id, ctx);
165
+ });
166
+ }
167
+ setupHandlers() {
168
+ // Tool listing
169
+ this.server.setRequestHandler(z.object({
170
+ method: z.literal('tools/list')
171
+ }), async () => {
172
+ return {
173
+ tools: [
174
+ {
175
+ name: 'get_context',
176
+ description: 'Get current project context',
177
+ inputSchema: {
178
+ type: 'object',
179
+ properties: {
180
+ query: { type: 'string', description: 'What you want to know' },
181
+ limit: { type: 'number', description: 'Max contexts to return' }
182
+ }
183
+ }
184
+ },
185
+ {
186
+ name: 'add_decision',
187
+ description: 'Record a decision or important information',
188
+ inputSchema: {
189
+ type: 'object',
190
+ properties: {
191
+ content: { type: 'string', description: 'The decision or information' },
192
+ type: { type: 'string', enum: ['decision', 'constraint', 'learning'] }
193
+ },
194
+ required: ['content', 'type']
195
+ }
196
+ },
197
+ {
198
+ name: 'start_frame',
199
+ description: 'Start a new frame (task/subtask) on the call stack',
200
+ inputSchema: {
201
+ type: 'object',
202
+ properties: {
203
+ name: { type: 'string', description: 'Frame name/goal' },
204
+ type: { type: 'string', enum: ['task', 'subtask', 'tool_scope', 'review', 'write', 'debug'], description: 'Frame type' },
205
+ constraints: { type: 'array', items: { type: 'string' }, description: 'Constraints for this frame' }
206
+ },
207
+ required: ['name', 'type']
208
+ }
209
+ },
210
+ {
211
+ name: 'close_frame',
212
+ description: 'Close current frame and generate digest',
213
+ inputSchema: {
214
+ type: 'object',
215
+ properties: {
216
+ result: { type: 'string', description: 'Frame completion result' },
217
+ outputs: { type: 'object', description: 'Final outputs from frame' }
218
+ }
219
+ }
220
+ },
221
+ {
222
+ name: 'add_anchor',
223
+ description: 'Add anchored fact/decision/constraint to current frame',
224
+ inputSchema: {
225
+ type: 'object',
226
+ properties: {
227
+ type: { type: 'string', enum: ['FACT', 'DECISION', 'CONSTRAINT', 'INTERFACE_CONTRACT', 'TODO', 'RISK'], description: 'Anchor type' },
228
+ text: { type: 'string', description: 'Anchor content' },
229
+ priority: { type: 'number', description: 'Priority (0-10)', minimum: 0, maximum: 10 }
230
+ },
231
+ required: ['type', 'text']
232
+ }
233
+ },
234
+ {
235
+ name: 'get_hot_stack',
236
+ description: 'Get current active frames and context',
237
+ inputSchema: {
238
+ type: 'object',
239
+ properties: {
240
+ maxEvents: { type: 'number', description: 'Max recent events per frame', default: 20 }
241
+ }
242
+ }
243
+ }
244
+ ]
245
+ };
246
+ });
247
+ // Tool execution
248
+ this.server.setRequestHandler(z.object({
249
+ method: z.literal('tools/call'),
250
+ params: z.object({
251
+ name: z.string(),
252
+ arguments: z.record(z.unknown())
253
+ })
254
+ }), async (request) => {
255
+ const { name, arguments: args } = request.params;
256
+ switch (name) {
257
+ case 'get_context':
258
+ return this.handleGetContext(args);
259
+ case 'add_decision':
260
+ return this.handleAddDecision(args);
261
+ case 'start_frame':
262
+ return this.handleStartFrame(args);
263
+ case 'close_frame':
264
+ return this.handleCloseFrame(args);
265
+ case 'add_anchor':
266
+ return this.handleAddAnchor(args);
267
+ case 'get_hot_stack':
268
+ return this.handleGetHotStack(args);
269
+ default:
270
+ throw new Error(`Unknown tool: ${name}`);
271
+ }
272
+ });
273
+ }
274
+ async handleGetContext(args) {
275
+ const { query = '', limit = 10 } = args;
276
+ // Get relevant contexts
277
+ const contexts = Array.from(this.contexts.values())
278
+ .sort((a, b) => b.importance - a.importance)
279
+ .slice(0, limit);
280
+ // Update access counts
281
+ contexts.forEach(ctx => {
282
+ this.db.prepare(`
283
+ UPDATE contexts
284
+ SET last_accessed = unixepoch(),
285
+ access_count = access_count + 1
286
+ WHERE id = ?
287
+ `).run(ctx.id);
288
+ });
289
+ // Format response
290
+ const response = contexts.map(ctx => `[${ctx.type.toUpperCase()}] (importance: ${ctx.importance.toFixed(2)})\n${ctx.content}`).join('\n\n---\n\n');
291
+ // Log for attention tracking
292
+ this.logAttention(query, response);
293
+ return {
294
+ content: [{
295
+ type: 'text',
296
+ text: response || 'No context available yet. Start adding decisions and information!'
297
+ }]
298
+ };
299
+ }
300
+ async handleAddDecision(args) {
301
+ const { content, type = 'decision' } = args;
302
+ const id = this.addContext(type, content, 0.8);
303
+ return {
304
+ content: [{
305
+ type: 'text',
306
+ text: `✓ Added ${type}: ${content}\nID: ${id}`
307
+ }]
308
+ };
309
+ }
310
+ async handleStartFrame(args) {
311
+ const { name, type, constraints } = args;
312
+ const inputs = {};
313
+ if (constraints) {
314
+ inputs.constraints = constraints;
315
+ }
316
+ const frameId = this.frameManager.createFrame({
317
+ type: type,
318
+ name,
319
+ inputs
320
+ });
321
+ // Log event
322
+ this.frameManager.addEvent('user_message', {
323
+ action: 'start_frame',
324
+ name,
325
+ type,
326
+ constraints
327
+ });
328
+ // Add as context
329
+ this.addContext('active_frame', `Active frame: ${name} (${type})`, 0.9);
330
+ const stackDepth = this.frameManager.getStackDepth();
331
+ return {
332
+ content: [{
333
+ type: 'text',
334
+ text: `🚀 Started ${type}: ${name}\nFrame ID: ${frameId}\nStack depth: ${stackDepth}`
335
+ }]
336
+ };
337
+ }
338
+ async handleCloseFrame(args) {
339
+ const { result, outputs } = args;
340
+ const currentFrameId = this.frameManager.getCurrentFrameId();
341
+ if (!currentFrameId) {
342
+ return {
343
+ content: [{
344
+ type: 'text',
345
+ text: '⚠️ No active frame to close'
346
+ }]
347
+ };
348
+ }
349
+ // Log completion event
350
+ this.frameManager.addEvent('assistant_message', {
351
+ action: 'close_frame',
352
+ result,
353
+ outputs
354
+ });
355
+ this.frameManager.closeFrame(currentFrameId, outputs);
356
+ const newStackDepth = this.frameManager.getStackDepth();
357
+ return {
358
+ content: [{
359
+ type: 'text',
360
+ text: `✅ Closed frame: ${result || 'completed'}\nStack depth: ${newStackDepth}`
361
+ }]
362
+ };
363
+ }
364
+ async handleAddAnchor(args) {
365
+ const { type, text, priority = 5 } = args;
366
+ const anchorId = this.frameManager.addAnchor(type, text, priority);
367
+ // Log anchor creation
368
+ this.frameManager.addEvent('decision', {
369
+ anchor_type: type,
370
+ text,
371
+ priority,
372
+ anchor_id: anchorId
373
+ });
374
+ return {
375
+ content: [{
376
+ type: 'text',
377
+ text: `📌 Added ${type}: ${text}\nAnchor ID: ${anchorId}`
378
+ }]
379
+ };
380
+ }
381
+ async handleGetHotStack(args) {
382
+ const { maxEvents = 20 } = args;
383
+ const hotStack = this.frameManager.getHotStackContext(maxEvents);
384
+ const activePath = this.frameManager.getActiveFramePath();
385
+ if (hotStack.length === 0) {
386
+ return {
387
+ content: [{
388
+ type: 'text',
389
+ text: '📚 No active frames. Start a frame with start_frame tool.'
390
+ }]
391
+ };
392
+ }
393
+ let response = '📚 **Active Call Stack:**\n\n';
394
+ activePath.forEach((frame, index) => {
395
+ const indent = ' '.repeat(index);
396
+ const context = hotStack[index];
397
+ response += `${indent}${index + 1}. **${frame.name}** (${frame.type})\n`;
398
+ if (context.anchors.length > 0) {
399
+ response += `${indent} 📌 ${context.anchors.length} anchors\n`;
400
+ }
401
+ if (context.recentEvents.length > 0) {
402
+ response += `${indent} 📝 ${context.recentEvents.length} recent events\n`;
403
+ }
404
+ response += '\n';
405
+ });
406
+ response += `**Total stack depth:** ${hotStack.length}`;
407
+ // Log stack access
408
+ this.frameManager.addEvent('observation', {
409
+ action: 'get_hot_stack',
410
+ stack_depth: hotStack.length,
411
+ total_anchors: hotStack.reduce((sum, frame) => sum + frame.anchors.length, 0),
412
+ total_events: hotStack.reduce((sum, frame) => sum + frame.recentEvents.length, 0)
413
+ });
414
+ return {
415
+ content: [{
416
+ type: 'text',
417
+ text: response
418
+ }]
419
+ };
420
+ }
421
+ logAttention(query, response) {
422
+ // Simple attention logging for analysis
423
+ this.db.prepare(`
424
+ INSERT INTO attention_log (query, response)
425
+ VALUES (?, ?)
426
+ `).run(query, response);
427
+ }
428
+ async start() {
429
+ const transport = new StdioServerTransport();
430
+ await this.server.connect(transport);
431
+ console.error('StackMemory MCP Server started');
432
+ }
433
+ }
434
+ // Export the class
435
+ export default LocalStackMemoryMCP;
436
+ // Start the server
437
+ if (import.meta.url === `file://${process.argv[1]}`) {
438
+ const server = new LocalStackMemoryMCP();
439
+ server.start().catch(console.error);
440
+ }
441
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp-server.ts"],"names":[],"mappings":"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"}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@stackmemoryai/stackmemory",
3
+ "version": "0.1.0",
4
+ "description": "Lossless, project-scoped memory for AI tools",
5
+ "type": "module",
6
+ "main": "dist/src/index.js",
7
+ "bin": {
8
+ "stackmemory": "dist/src/cli.js"
9
+ },
10
+ "types": "dist/src/index.d.ts",
11
+ "files": [
12
+ "dist",
13
+ "README.md",
14
+ "LICENSE"
15
+ ],
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/stackmemoryai/stackmemory.git"
19
+ },
20
+ "homepage": "https://github.com/stackmemoryai/stackmemory",
21
+ "bugs": {
22
+ "url": "https://github.com/stackmemoryai/stackmemory/issues"
23
+ },
24
+ "author": "StackMemory AI",
25
+ "license": "MIT",
26
+ "keywords": [
27
+ "ai",
28
+ "memory",
29
+ "context",
30
+ "llm",
31
+ "mcp",
32
+ "claude",
33
+ "coding",
34
+ "persistence"
35
+ ],
36
+ "scripts": {
37
+ "setup": "npm install && npm run build && npm run init",
38
+ "init": "node dist/scripts/initialize.js",
39
+ "build": "tsc",
40
+ "prepublishOnly": "npm run build",
41
+ "dev": "tsx watch src/mcp-server.ts",
42
+ "mcp:start": "node dist/mcp-server.js",
43
+ "mcp:dev": "tsx src/mcp-server.ts",
44
+ "test:attention": "tsx scripts/test-attention.ts",
45
+ "analyze": "tsx scripts/analyze-context.ts",
46
+ "status": "tsx scripts/status.ts"
47
+ },
48
+ "dependencies": {
49
+ "@modelcontextprotocol/sdk": "^0.5.0",
50
+ "better-sqlite3": "^9.2.2",
51
+ "chalk": "^5.3.0",
52
+ "commander": "^11.1.0",
53
+ "msgpackr": "^1.10.1",
54
+ "simple-peer": "^9.11.1",
55
+ "socket.io": "^4.6.0",
56
+ "socket.io-client": "^4.6.0",
57
+ "tweetnacl": "^1.0.3",
58
+ "uuid": "^9.0.1",
59
+ "zod": "^3.22.4"
60
+ },
61
+ "devDependencies": {
62
+ "@types/better-sqlite3": "^7.6.8",
63
+ "@types/node": "^20.10.6",
64
+ "@types/simple-peer": "^9.11.8",
65
+ "@types/uuid": "^10.0.0",
66
+ "tsx": "^4.7.0",
67
+ "typescript": "^5.3.3"
68
+ }
69
+ }