@vheins/local-memory-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.
- package/DASHBOARD.md +129 -0
- package/HYBRID_SEARCH.md +204 -0
- package/IMPLEMENTATION.md +159 -0
- package/README.md +175 -0
- package/dist/capabilities.d.ts +22 -0
- package/dist/capabilities.d.ts.map +1 -0
- package/dist/capabilities.js +23 -0
- package/dist/capabilities.js.map +1 -0
- package/dist/dashboard/dashboard.test.d.ts +2 -0
- package/dist/dashboard/dashboard.test.d.ts.map +1 -0
- package/dist/dashboard/dashboard.test.js +362 -0
- package/dist/dashboard/dashboard.test.js.map +1 -0
- package/dist/dashboard/public/app.js +1187 -0
- package/dist/dashboard/public/chart.js +0 -0
- package/dist/dashboard/public/index.html +967 -0
- package/dist/dashboard/server.d.ts +3 -0
- package/dist/dashboard/server.d.ts.map +1 -0
- package/dist/dashboard/server.js +297 -0
- package/dist/dashboard/server.js.map +1 -0
- package/dist/mcp/client.d.ts +34 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +181 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/mcp/client.test.d.ts +2 -0
- package/dist/mcp/client.test.d.ts.map +1 -0
- package/dist/mcp/client.test.js +130 -0
- package/dist/mcp/client.test.js.map +1 -0
- package/dist/prompts/registry.d.ts +39 -0
- package/dist/prompts/registry.d.ts.map +1 -0
- package/dist/prompts/registry.js +90 -0
- package/dist/prompts/registry.js.map +1 -0
- package/dist/resources/index.d.ts +17 -0
- package/dist/resources/index.d.ts.map +1 -0
- package/dist/resources/index.js +100 -0
- package/dist/resources/index.js.map +1 -0
- package/dist/resources/index.test.d.ts +2 -0
- package/dist/resources/index.test.d.ts.map +1 -0
- package/dist/resources/index.test.js +96 -0
- package/dist/resources/index.test.js.map +1 -0
- package/dist/router.d.ts +4 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +60 -0
- package/dist/router.js.map +1 -0
- package/dist/router.test.d.ts +2 -0
- package/dist/router.test.d.ts.map +1 -0
- package/dist/router.test.js +113 -0
- package/dist/router.test.js.map +1 -0
- package/dist/search_memory_example.d.ts +3 -0
- package/dist/search_memory_example.d.ts.map +1 -0
- package/dist/search_memory_example.js +56 -0
- package/dist/search_memory_example.js.map +1 -0
- package/dist/server.d.ts +3 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +91 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/sqlite.d.ts +95 -0
- package/dist/storage/sqlite.d.ts.map +1 -0
- package/dist/storage/sqlite.js +537 -0
- package/dist/storage/sqlite.js.map +1 -0
- package/dist/storage/sqlite.test.d.ts +2 -0
- package/dist/storage/sqlite.test.d.ts.map +1 -0
- package/dist/storage/sqlite.test.js +358 -0
- package/dist/storage/sqlite.test.js.map +1 -0
- package/dist/storage/vectors.stub.d.ts +12 -0
- package/dist/storage/vectors.stub.d.ts.map +1 -0
- package/dist/storage/vectors.stub.js +88 -0
- package/dist/storage/vectors.stub.js.map +1 -0
- package/dist/store_memory_example.d.ts +3 -0
- package/dist/store_memory_example.d.ts.map +1 -0
- package/dist/store_memory_example.js +69 -0
- package/dist/store_memory_example.js.map +1 -0
- package/dist/test_quotes_client.d.ts +3 -0
- package/dist/test_quotes_client.d.ts.map +1 -0
- package/dist/test_quotes_client.js +72 -0
- package/dist/test_quotes_client.js.map +1 -0
- package/dist/tools/memory.delete.d.ts +9 -0
- package/dist/tools/memory.delete.d.ts.map +1 -0
- package/dist/tools/memory.delete.js +22 -0
- package/dist/tools/memory.delete.js.map +1 -0
- package/dist/tools/memory.recap.d.ts +4 -0
- package/dist/tools/memory.recap.d.ts.map +1 -0
- package/dist/tools/memory.recap.js +42 -0
- package/dist/tools/memory.recap.js.map +1 -0
- package/dist/tools/memory.search.d.ts +5 -0
- package/dist/tools/memory.search.d.ts.map +1 -0
- package/dist/tools/memory.search.js +192 -0
- package/dist/tools/memory.search.js.map +1 -0
- package/dist/tools/memory.search.test.d.ts +2 -0
- package/dist/tools/memory.search.test.d.ts.map +1 -0
- package/dist/tools/memory.search.test.js +181 -0
- package/dist/tools/memory.search.test.js.map +1 -0
- package/dist/tools/memory.store.d.ts +5 -0
- package/dist/tools/memory.store.d.ts.map +1 -0
- package/dist/tools/memory.store.js +41 -0
- package/dist/tools/memory.store.js.map +1 -0
- package/dist/tools/memory.summarize.d.ts +4 -0
- package/dist/tools/memory.summarize.d.ts.map +1 -0
- package/dist/tools/memory.summarize.js +13 -0
- package/dist/tools/memory.summarize.js.map +1 -0
- package/dist/tools/memory.update.d.ts +5 -0
- package/dist/tools/memory.update.d.ts.map +1 -0
- package/dist/tools/memory.update.js +31 -0
- package/dist/tools/memory.update.js.map +1 -0
- package/dist/tools/schemas.d.ts +334 -0
- package/dist/tools/schemas.d.ts.map +1 -0
- package/dist/tools/schemas.js +251 -0
- package/dist/tools/schemas.js.map +1 -0
- package/dist/types.d.ts +31 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +3 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/git-scope.d.ts +8 -0
- package/dist/utils/git-scope.d.ts.map +1 -0
- package/dist/utils/git-scope.js +38 -0
- package/dist/utils/git-scope.js.map +1 -0
- package/dist/utils/logger.d.ts +7 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +40 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.test.d.ts +2 -0
- package/dist/utils/logger.test.d.ts.map +1 -0
- package/dist/utils/logger.test.js +84 -0
- package/dist/utils/logger.test.js.map +1 -0
- package/dist/utils/mcp-response.d.ts +44 -0
- package/dist/utils/mcp-response.d.ts.map +1 -0
- package/dist/utils/mcp-response.js +81 -0
- package/dist/utils/mcp-response.js.map +1 -0
- package/dist/utils/normalize.d.ts +4 -0
- package/dist/utils/normalize.d.ts.map +1 -0
- package/dist/utils/normalize.js +51 -0
- package/dist/utils/normalize.js.map +1 -0
- package/dist/utils/normalize.test.d.ts +2 -0
- package/dist/utils/normalize.test.d.ts.map +1 -0
- package/dist/utils/normalize.test.js +159 -0
- package/dist/utils/normalize.test.js.map +1 -0
- package/dist/utils/query-expander.d.ts +2 -0
- package/dist/utils/query-expander.d.ts.map +1 -0
- package/dist/utils/query-expander.js +50 -0
- package/dist/utils/query-expander.js.map +1 -0
- package/dist/utils/query-expander.test.d.ts +2 -0
- package/dist/utils/query-expander.test.d.ts.map +1 -0
- package/dist/utils/query-expander.test.js +35 -0
- package/dist/utils/query-expander.test.js.map +1 -0
- package/docs/PRD.md +199 -0
- package/docs/PROMPT-agent.md +139 -0
- package/docs/SPEC-git-scope.md +172 -0
- package/docs/SPEC-heuristics.md +199 -0
- package/docs/SPEC-server.md +243 -0
- package/docs/SPEC-skeleton.md +255 -0
- package/docs/SPEC-sqlite-schema.md +183 -0
- package/docs/SPEC-tool-schema.md +201 -0
- package/docs/SPEC-vector-search.md +198 -0
- package/docs/TEST-scenarios.md +179 -0
- package/package.json +43 -0
- package/scripts/update-null-titles-ai.mjs +272 -0
- package/scripts/update-titles-batch.mjs +71 -0
- package/scripts/update-titles.mjs +66 -0
- package/seed-data.mjs +151 -0
- package/src/capabilities.ts +22 -0
- package/src/dashboard/dashboard.test.ts +546 -0
- package/src/dashboard/public/app.js +1187 -0
- package/src/dashboard/public/chart.js +0 -0
- package/src/dashboard/public/index.html +967 -0
- package/src/dashboard/server.ts +347 -0
- package/src/mcp/client.test.ts +164 -0
- package/src/mcp/client.ts +212 -0
- package/src/prompts/registry.ts +89 -0
- package/src/resources/index.test.ts +132 -0
- package/src/resources/index.ts +113 -0
- package/src/router.test.ts +145 -0
- package/src/router.ts +80 -0
- package/src/server.ts +99 -0
- package/src/storage/sqlite.test.ts +504 -0
- package/src/storage/sqlite.ts +688 -0
- package/src/storage/vectors.stub.ts +101 -0
- package/src/tools/memory.delete.ts +37 -0
- package/src/tools/memory.recap.ts +61 -0
- package/src/tools/memory.search.test.ts +276 -0
- package/src/tools/memory.search.ts +244 -0
- package/src/tools/memory.store.ts +56 -0
- package/src/tools/memory.summarize.ts +23 -0
- package/src/tools/memory.update.ts +46 -0
- package/src/tools/schemas.ts +261 -0
- package/src/types.ts +36 -0
- package/src/utils/git-scope.ts +42 -0
- package/src/utils/logger.test.ts +125 -0
- package/src/utils/logger.ts +53 -0
- package/src/utils/mcp-response.ts +116 -0
- package/src/utils/normalize.test.ts +203 -0
- package/src/utils/normalize.ts +53 -0
- package/src/utils/query-expander.test.ts +40 -0
- package/src/utils/query-expander.ts +60 -0
- package/storage/.gitkeep +5 -0
- package/test.sh +48 -0
- package/tsconfig.json +21 -0
- package/vitest.config.ts +10 -0
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
// Feature: memory-mcp-optimization, Property 11: createRouter() uses provided storage
|
|
2
|
+
import { describe, it, expect, vi } from "vitest";
|
|
3
|
+
import * as fc from "fast-check";
|
|
4
|
+
import { createRouter } from "./router.js";
|
|
5
|
+
/**
|
|
6
|
+
* Property 11: createRouter() menggunakan storage yang diberikan
|
|
7
|
+
* Validates: Requirements 10.1, 10.4
|
|
8
|
+
*
|
|
9
|
+
* For any mock SQLiteStore given to createRouter(mockDb, mockVectors),
|
|
10
|
+
* all tool operations run through the router SHALL use mockDb and not access the real DB.
|
|
11
|
+
*/
|
|
12
|
+
describe("createRouter() — Property 11: uses provided storage", () => {
|
|
13
|
+
function makeMockDb() {
|
|
14
|
+
return {
|
|
15
|
+
insert: vi.fn(),
|
|
16
|
+
update: vi.fn(),
|
|
17
|
+
delete: vi.fn(),
|
|
18
|
+
getById: vi.fn().mockReturnValue(null),
|
|
19
|
+
searchByRepo: vi.fn().mockReturnValue([]),
|
|
20
|
+
searchBySimilarity: vi.fn().mockReturnValue([]),
|
|
21
|
+
getRecentMemories: vi.fn().mockReturnValue([]),
|
|
22
|
+
getTotalCount: vi.fn().mockReturnValue(0),
|
|
23
|
+
getSummary: vi.fn().mockReturnValue(null),
|
|
24
|
+
upsertSummary: vi.fn(),
|
|
25
|
+
listRepos: vi.fn().mockReturnValue([]),
|
|
26
|
+
listRecent: vi.fn().mockReturnValue([]),
|
|
27
|
+
incrementHitCount: vi.fn(),
|
|
28
|
+
incrementRecallCount: vi.fn(),
|
|
29
|
+
getStats: vi.fn().mockReturnValue({ total: 0, byType: {}, unused: 0 }),
|
|
30
|
+
getAllMemoriesWithStats: vi.fn().mockReturnValue([]),
|
|
31
|
+
upsertVectorEmbedding: vi.fn(),
|
|
32
|
+
getVectorEmbedding: vi.fn().mockReturnValue(null),
|
|
33
|
+
archiveExpiredMemories: vi.fn().mockReturnValue(0),
|
|
34
|
+
logQuery: vi.fn(),
|
|
35
|
+
getRecentQueries: vi.fn().mockReturnValue([]),
|
|
36
|
+
close: vi.fn(),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
function makeMockVectors() {
|
|
40
|
+
return {
|
|
41
|
+
upsert: vi.fn().mockResolvedValue(undefined),
|
|
42
|
+
remove: vi.fn().mockResolvedValue(undefined),
|
|
43
|
+
search: vi.fn().mockResolvedValue([]),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
it("memory-recap calls getRecentMemories on the provided mock db", async () => {
|
|
47
|
+
const mockDb = makeMockDb();
|
|
48
|
+
const mockVectors = makeMockVectors();
|
|
49
|
+
const router = createRouter(mockDb, mockVectors);
|
|
50
|
+
await router("tools/call", {
|
|
51
|
+
name: "memory-recap",
|
|
52
|
+
arguments: { repo: "test-repo", limit: 5 },
|
|
53
|
+
});
|
|
54
|
+
expect(mockDb.getRecentMemories).toHaveBeenCalledWith("test-repo", 5, 0);
|
|
55
|
+
expect(mockDb.getTotalCount).toHaveBeenCalledWith("test-repo");
|
|
56
|
+
});
|
|
57
|
+
it("memory-search calls searchBySimilarity on the provided mock db", async () => {
|
|
58
|
+
const mockDb = makeMockDb();
|
|
59
|
+
const mockVectors = makeMockVectors();
|
|
60
|
+
const router = createRouter(mockDb, mockVectors);
|
|
61
|
+
await router("tools/call", {
|
|
62
|
+
name: "memory-search",
|
|
63
|
+
arguments: { query: "test query", repo: "test-repo", limit: 5 },
|
|
64
|
+
});
|
|
65
|
+
expect(mockDb.searchBySimilarity).toHaveBeenCalled();
|
|
66
|
+
// Verify the first argument to searchBySimilarity contains the repo
|
|
67
|
+
const callArgs = mockDb.searchBySimilarity.mock.calls[0];
|
|
68
|
+
expect(callArgs[1]).toBe("test-repo");
|
|
69
|
+
});
|
|
70
|
+
it("property: for any repo string, memory-recap always uses the injected db", async () => {
|
|
71
|
+
await fc.assert(fc.asyncProperty(fc.string({ minLength: 1, maxLength: 50 }).filter((s) => s.trim().length > 0), fc.integer({ min: 1, max: 50 }), async (repo, limit) => {
|
|
72
|
+
const mockDb = makeMockDb();
|
|
73
|
+
const mockVectors = makeMockVectors();
|
|
74
|
+
const router = createRouter(mockDb, mockVectors);
|
|
75
|
+
await router("tools/call", {
|
|
76
|
+
name: "memory-recap",
|
|
77
|
+
arguments: { repo, limit },
|
|
78
|
+
});
|
|
79
|
+
// The mock db methods must have been called (not a real DB)
|
|
80
|
+
expect(mockDb.getRecentMemories).toHaveBeenCalled();
|
|
81
|
+
expect(mockDb.getTotalCount).toHaveBeenCalled();
|
|
82
|
+
}), { numRuns: 100 });
|
|
83
|
+
});
|
|
84
|
+
it("property: for any valid store args, memory-store uses the injected db", async () => {
|
|
85
|
+
await fc.assert(fc.asyncProperty(fc.record({
|
|
86
|
+
repo: fc.string({ minLength: 1, maxLength: 30 }).filter((s) => s.trim().length > 0),
|
|
87
|
+
content: fc.string({ minLength: 10, maxLength: 200 }),
|
|
88
|
+
importance: fc.integer({ min: 1, max: 5 }),
|
|
89
|
+
type: fc.constantFrom("code_fact", "decision", "mistake", "pattern"),
|
|
90
|
+
}), async ({ repo, content, importance, type }) => {
|
|
91
|
+
const mockDb = makeMockDb();
|
|
92
|
+
const mockVectors = makeMockVectors();
|
|
93
|
+
const router = createRouter(mockDb, mockVectors);
|
|
94
|
+
await router("tools/call", {
|
|
95
|
+
name: "memory-store",
|
|
96
|
+
arguments: { type, content, importance, scope: { repo } },
|
|
97
|
+
});
|
|
98
|
+
expect(mockDb.insert).toHaveBeenCalled();
|
|
99
|
+
}), { numRuns: 100 });
|
|
100
|
+
});
|
|
101
|
+
it("different router instances use their own injected db independently", () => {
|
|
102
|
+
const mockDb1 = makeMockDb();
|
|
103
|
+
const mockDb2 = makeMockDb();
|
|
104
|
+
const mockVectors = makeMockVectors();
|
|
105
|
+
const router1 = createRouter(mockDb1, mockVectors);
|
|
106
|
+
const router2 = createRouter(mockDb2, mockVectors);
|
|
107
|
+
// Both routers are distinct functions
|
|
108
|
+
expect(router1).not.toBe(router2);
|
|
109
|
+
// Each router closes over its own db
|
|
110
|
+
// (verified by the property tests above that each mock is called independently)
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
//# sourceMappingURL=router.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"router.test.js","sourceRoot":"","sources":["../src/router.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_memory_example.d.ts","sourceRoot":"","sources":["../src/search_memory_example.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { MCPClient } from "./mcp/client.js";
|
|
3
|
+
async function searchMemoryExample() {
|
|
4
|
+
const client = new MCPClient();
|
|
5
|
+
try {
|
|
6
|
+
console.log("Connecting to MCP server...");
|
|
7
|
+
await client.start();
|
|
8
|
+
console.log("Connected! ✓");
|
|
9
|
+
// Search for all memories in react-examples repo
|
|
10
|
+
console.log("\n🔍 Searching for memories in 'react-examples' repo...");
|
|
11
|
+
const search1 = await client.callTool("memory-search", {
|
|
12
|
+
query: "react",
|
|
13
|
+
repo: "react-examples",
|
|
14
|
+
limit: 5
|
|
15
|
+
});
|
|
16
|
+
console.log(`Found ${search1.results.length} memories:`);
|
|
17
|
+
search1.results.forEach((memory, i) => {
|
|
18
|
+
console.log(`${i + 1}. [${memory.type}] ${memory.content.substring(0, 80)}...`);
|
|
19
|
+
});
|
|
20
|
+
// Search for decisions
|
|
21
|
+
console.log("\n🔍 Searching for decisions...");
|
|
22
|
+
const search2 = await client.callTool("memory-search", {
|
|
23
|
+
query: "decided",
|
|
24
|
+
repo: "company-policies",
|
|
25
|
+
types: ["decision"],
|
|
26
|
+
limit: 3
|
|
27
|
+
});
|
|
28
|
+
console.log(`Found ${search2.results.length} decisions:`);
|
|
29
|
+
search2.results.forEach((memory, i) => {
|
|
30
|
+
console.log(`${i + 1}. ${memory.content}`);
|
|
31
|
+
});
|
|
32
|
+
// Search for mistakes with high importance
|
|
33
|
+
console.log("\n🔍 Searching for important mistakes...");
|
|
34
|
+
const search3 = await client.callTool("memory-search", {
|
|
35
|
+
query: "error",
|
|
36
|
+
repo: "api-client", // Specify repo
|
|
37
|
+
minImportance: 4,
|
|
38
|
+
types: ["mistake"],
|
|
39
|
+
limit: 3
|
|
40
|
+
});
|
|
41
|
+
console.log(`Found ${search3.results.length} important mistakes:`);
|
|
42
|
+
search3.results.forEach((memory, i) => {
|
|
43
|
+
console.log(`${i + 1}. ${memory.content}`);
|
|
44
|
+
});
|
|
45
|
+
console.log("\n🎉 Search examples completed!");
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
console.error("❌ Error:", error);
|
|
49
|
+
}
|
|
50
|
+
finally {
|
|
51
|
+
client.stop();
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// Run the example
|
|
55
|
+
searchMemoryExample();
|
|
56
|
+
//# sourceMappingURL=search_memory_example.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search_memory_example.js","sourceRoot":"","sources":["../src/search_memory_example.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,KAAK,UAAU,mBAAmB;IAChC,MAAM,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;IAE/B,IAAI,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACrB,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QAE5B,iDAAiD;QACjD,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;QACvE,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;YACrD,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,YAAY,CAAC,CAAC;QACzD,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,EAAE,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;QAClF,CAAC,CAAC,CAAC;QAEH,uBAAuB;QACvB,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;QAC/C,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;YACrD,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,kBAAkB;YACxB,KAAK,EAAE,CAAC,UAAU,CAAC;YACnB,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,aAAa,CAAC,CAAC;QAC1D,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,EAAE,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,2CAA2C;QAC3C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;QACxD,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,eAAe,EAAE;YACrD,KAAK,EAAE,OAAO;YACd,IAAI,EAAE,YAAY,EAAE,eAAe;YACnC,aAAa,EAAE,CAAC;YAChB,KAAK,EAAE,CAAC,SAAS,CAAC;YAClB,KAAK,EAAE,CAAC;SACT,CAAC,CAAC;QACH,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,OAAO,CAAC,MAAM,sBAAsB,CAAC,CAAC;QACnE,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAW,EAAE,CAAS,EAAE,EAAE;YACjD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;QAC7C,CAAC,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;IAEjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IACnC,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,IAAI,EAAE,CAAC;IAChB,CAAC;AACH,CAAC;AAED,kBAAkB;AAClB,mBAAmB,EAAE,CAAC"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":""}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import readline from "node:readline";
|
|
3
|
+
import { createRouter } from "./router.js";
|
|
4
|
+
import { SQLiteStore } from "./storage/sqlite.js";
|
|
5
|
+
import { StubVectorStore } from "./storage/vectors.stub.js";
|
|
6
|
+
import { CAPABILITIES } from "./capabilities.js";
|
|
7
|
+
import { logger } from "./utils/logger.js";
|
|
8
|
+
// Create storage instances
|
|
9
|
+
const db = new SQLiteStore();
|
|
10
|
+
const vectors = new StubVectorStore(db);
|
|
11
|
+
// Wire router with injected storage
|
|
12
|
+
const handleMethod = createRouter(db, vectors);
|
|
13
|
+
// Cleanup on exit
|
|
14
|
+
process.on("SIGINT", () => {
|
|
15
|
+
db.close();
|
|
16
|
+
process.exit(0);
|
|
17
|
+
});
|
|
18
|
+
process.on("SIGTERM", () => {
|
|
19
|
+
db.close();
|
|
20
|
+
process.exit(0);
|
|
21
|
+
});
|
|
22
|
+
const rl = readline.createInterface({
|
|
23
|
+
input: process.stdin,
|
|
24
|
+
output: process.stdout,
|
|
25
|
+
terminal: false
|
|
26
|
+
});
|
|
27
|
+
function reply(payload) {
|
|
28
|
+
try {
|
|
29
|
+
process.stdout.write(JSON.stringify(payload) + "\n");
|
|
30
|
+
}
|
|
31
|
+
catch (err) {
|
|
32
|
+
// Ignore EPIPE errors (broken pipe when client disconnects)
|
|
33
|
+
if (err.code !== "EPIPE") {
|
|
34
|
+
throw err;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
rl.on("line", async (line) => {
|
|
39
|
+
if (!line.trim())
|
|
40
|
+
return;
|
|
41
|
+
let msg;
|
|
42
|
+
try {
|
|
43
|
+
msg = JSON.parse(line);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
const { id, method, params } = msg;
|
|
49
|
+
// --- initialize ---
|
|
50
|
+
if (method === "initialize") {
|
|
51
|
+
reply({
|
|
52
|
+
jsonrpc: "2.0",
|
|
53
|
+
id,
|
|
54
|
+
result: {
|
|
55
|
+
protocolVersion: "2024-11-05",
|
|
56
|
+
serverInfo: CAPABILITIES.serverInfo,
|
|
57
|
+
capabilities: CAPABILITIES.capabilities
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
reply({
|
|
61
|
+
jsonrpc: "2.0",
|
|
62
|
+
method: "notifications/initialized",
|
|
63
|
+
params: {}
|
|
64
|
+
});
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
// --- ignore notification ---
|
|
68
|
+
if (method === "notifications/initialized")
|
|
69
|
+
return;
|
|
70
|
+
// --- route method ---
|
|
71
|
+
try {
|
|
72
|
+
const result = await handleMethod(method, params);
|
|
73
|
+
reply({
|
|
74
|
+
jsonrpc: "2.0",
|
|
75
|
+
id,
|
|
76
|
+
result
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
catch (err) {
|
|
80
|
+
logger.error("Method handler error", { method, id, message: err.message });
|
|
81
|
+
reply({
|
|
82
|
+
jsonrpc: "2.0",
|
|
83
|
+
id,
|
|
84
|
+
error: {
|
|
85
|
+
code: -32603,
|
|
86
|
+
message: err.message || "Internal error"
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
});
|
|
91
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AACA,OAAO,QAAQ,MAAM,eAAe,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAE3C,2BAA2B;AAC3B,MAAM,EAAE,GAAG,IAAI,WAAW,EAAE,CAAC;AAC7B,MAAM,OAAO,GAAG,IAAI,eAAe,CAAC,EAAE,CAAC,CAAC;AAExC,oCAAoC;AACpC,MAAM,YAAY,GAAG,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;AAE/C,kBAAkB;AAClB,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACzB,EAAE,CAAC,KAAK,EAAE,CAAC;IACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC;AAEH,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;IAClC,KAAK,EAAE,OAAO,CAAC,KAAK;IACpB,MAAM,EAAE,OAAO,CAAC,MAAM;IACtB,QAAQ,EAAE,KAAK;CAChB,CAAC,CAAC;AAEH,SAAS,KAAK,CAAC,OAAgB;IAC7B,IAAI,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,4DAA4D;QAC5D,IAAI,GAAG,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,CAAC;QACZ,CAAC;IACH,CAAC;AACH,CAAC;AAED,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;IAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;QAAE,OAAO;IAEzB,IAAI,GAAG,CAAC;IACR,IAAI,CAAC;QACH,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;IACT,CAAC;IAED,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,CAAC;IAEnC,qBAAqB;IACrB,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QAC5B,KAAK,CAAC;YACJ,OAAO,EAAE,KAAK;YACd,EAAE;YACF,MAAM,EAAE;gBACN,eAAe,EAAE,YAAY;gBAC7B,UAAU,EAAE,YAAY,CAAC,UAAU;gBACnC,YAAY,EAAE,YAAY,CAAC,YAAY;aACxC;SACF,CAAC,CAAC;QAEH,KAAK,CAAC;YACJ,OAAO,EAAE,KAAK;YACd,MAAM,EAAE,2BAA2B;YACnC,MAAM,EAAE,EAAE;SACX,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,8BAA8B;IAC9B,IAAI,MAAM,KAAK,2BAA2B;QAAE,OAAO;IAEnD,uBAAuB;IACvB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAElD,KAAK,CAAC;YACJ,OAAO,EAAE,KAAK;YACd,EAAE;YACF,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,MAAM,CAAC,KAAK,CAAC,sBAAsB,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAC3E,KAAK,CAAC;YACJ,OAAO,EAAE,KAAK;YACd,EAAE;YACF,KAAK,EAAE;gBACL,IAAI,EAAE,CAAC,KAAK;gBACZ,OAAO,EAAE,GAAG,CAAC,OAAO,IAAI,gBAAgB;aACzC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { MemoryEntry } from "../types.js";
|
|
2
|
+
export declare class SQLiteStore {
|
|
3
|
+
private db;
|
|
4
|
+
constructor(dbPath?: string);
|
|
5
|
+
private migrate;
|
|
6
|
+
insert(entry: MemoryEntry): void;
|
|
7
|
+
update(id: string, updates: {
|
|
8
|
+
title?: string;
|
|
9
|
+
content?: string;
|
|
10
|
+
importance?: number;
|
|
11
|
+
}): void;
|
|
12
|
+
searchByRepo(repo: string, options?: {
|
|
13
|
+
types?: string[];
|
|
14
|
+
minImportance?: number;
|
|
15
|
+
limit?: number;
|
|
16
|
+
}): MemoryEntry[];
|
|
17
|
+
getById(id: string): MemoryEntry | null;
|
|
18
|
+
getByIdWithStats(id: string): (MemoryEntry & {
|
|
19
|
+
recall_rate: number;
|
|
20
|
+
}) | null;
|
|
21
|
+
listRecent(limit?: number): Array<{
|
|
22
|
+
id: string;
|
|
23
|
+
type: string;
|
|
24
|
+
repo: string;
|
|
25
|
+
}>;
|
|
26
|
+
getSummary(repo: string): {
|
|
27
|
+
summary: string;
|
|
28
|
+
updated_at: string;
|
|
29
|
+
} | null;
|
|
30
|
+
upsertSummary(repo: string, summary: string): void;
|
|
31
|
+
delete(id: string): void;
|
|
32
|
+
listRepos(): string[];
|
|
33
|
+
listRepoNavigation(): Array<{
|
|
34
|
+
repo: string;
|
|
35
|
+
memory_count: number;
|
|
36
|
+
last_updated_at: string | null;
|
|
37
|
+
}>;
|
|
38
|
+
incrementHitCount(id: string): void;
|
|
39
|
+
incrementRecallCount(id: string): void;
|
|
40
|
+
getStats(repo?: string): {
|
|
41
|
+
total: number;
|
|
42
|
+
byType: Record<string, number>;
|
|
43
|
+
unused: number;
|
|
44
|
+
};
|
|
45
|
+
getRecentMemories(repo: string, limit: number, offset?: number): MemoryEntry[];
|
|
46
|
+
getTotalCount(repo: string): number;
|
|
47
|
+
searchBySimilarity(query: string, repo: string, limit?: number): Array<MemoryEntry & {
|
|
48
|
+
similarity: number;
|
|
49
|
+
}>;
|
|
50
|
+
archiveExpiredMemories(): number;
|
|
51
|
+
getAllMemoriesWithStats(repo?: string): Array<MemoryEntry & {
|
|
52
|
+
hit_count: number;
|
|
53
|
+
recall_count: number;
|
|
54
|
+
recall_rate: number;
|
|
55
|
+
last_used_at: string | null;
|
|
56
|
+
}>;
|
|
57
|
+
listMemoriesForDashboard(options: {
|
|
58
|
+
repo: string;
|
|
59
|
+
type?: string;
|
|
60
|
+
search?: string;
|
|
61
|
+
minImportance?: number;
|
|
62
|
+
maxImportance?: number;
|
|
63
|
+
sortBy?: string;
|
|
64
|
+
sortOrder?: "asc" | "desc";
|
|
65
|
+
limit?: number;
|
|
66
|
+
offset?: number;
|
|
67
|
+
}): {
|
|
68
|
+
items: Array<MemoryEntry & {
|
|
69
|
+
hit_count: number;
|
|
70
|
+
recall_count: number;
|
|
71
|
+
recall_rate: number;
|
|
72
|
+
last_used_at: string | null;
|
|
73
|
+
}>;
|
|
74
|
+
total: number;
|
|
75
|
+
};
|
|
76
|
+
upsertVectorEmbedding(memoryId: string, vector: number[] | string[]): void;
|
|
77
|
+
getVectorEmbedding(memoryId: string): number[] | string[] | null;
|
|
78
|
+
close(): void;
|
|
79
|
+
private computeVector;
|
|
80
|
+
private cosineSimilarity;
|
|
81
|
+
private rowToMemoryEntry;
|
|
82
|
+
logAction(action: 'search' | 'read' | 'write' | 'update' | 'delete', repo: string, options?: {
|
|
83
|
+
query?: string;
|
|
84
|
+
memoryId?: string;
|
|
85
|
+
resultCount?: number;
|
|
86
|
+
}): void;
|
|
87
|
+
getRecentActions(repo?: string, limit?: number): Array<{
|
|
88
|
+
action: string;
|
|
89
|
+
query?: string;
|
|
90
|
+
memory_id?: string;
|
|
91
|
+
result_count?: number;
|
|
92
|
+
created_at: string;
|
|
93
|
+
}>;
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sqlite.d.ts","sourceRoot":"","sources":["../../src/storage/sqlite.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAe,MAAM,aAAa,CAAC;AAMvD,qBAAa,WAAW;IACtB,OAAO,CAAC,EAAE,CAAoB;gBAElB,MAAM,CAAC,EAAE,MAAM;IAK3B,OAAO,CAAC,OAAO;IA0Gf,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,IAAI;IA2BhC,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAyC5F,YAAY,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,KAAK,CAAC,EAAE,MAAM,CAAC;KACX,GACL,WAAW,EAAE;IA6BhB,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI;IAOvC,gBAAgB,CAAC,EAAE,EAAE,MAAM,GAAG,CAAC,WAAW,GAAG;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,IAAI;IAgB5E,UAAU,CAAC,KAAK,GAAE,MAAW,GAAG,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IAUjF,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;IAKxE,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAWlD,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAMxB,SAAS,IAAI,MAAM,EAAE;IAMrB,kBAAkB,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IAcnG,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAUnC,oBAAoB,CAAC,EAAE,EAAE,MAAM,GAAG,IAAI;IAUtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC;KAChB;IAkCD,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,GAAE,MAAU,GAAG,WAAW,EAAE;IAYjF,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;IAOnC,kBAAkB,CAChB,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,MAAM,EACZ,KAAK,GAAE,MAAW,GACjB,KAAK,CAAC,WAAW,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IA6C9C,sBAAsB,IAAI,MAAM;IA4BhC,uBAAuB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAC3C,WAAW,GAAG;QACZ,SAAS,EAAE,MAAM,CAAC;QAClB,YAAY,EAAE,MAAM,CAAC;QACrB,WAAW,EAAE,MAAM,CAAC;QACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;KAC7B,CACF;IAuBD,wBAAwB,CAAC,OAAO,EAAE;QAChC,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC;QAC3B,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAG;QACF,KAAK,EAAE,KAAK,CACV,WAAW,GAAG;YACZ,SAAS,EAAE,MAAM,CAAC;YAClB,YAAY,EAAE,MAAM,CAAC;YACrB,WAAW,EAAE,MAAM,CAAC;YACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;SAC7B,CACF,CAAC;QACF,KAAK,EAAE,MAAM,CAAC;KACf;IAqED,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAW1E,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,IAAI;IAWhE,KAAK,IAAI,IAAI;IAKb,OAAO,CAAC,aAAa;IASrB,OAAO,CAAC,gBAAgB;IAwBxB,OAAO,CAAC,gBAAgB;IAqBxB,SAAS,CAAC,MAAM,EAAE,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE;IAexJ,gBAAgB,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,KAAK,SAAK,GAAG,KAAK,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,YAAY,CAAC,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAgBtJ"}
|