@folterung/project-memory 0.1.11 → 0.1.13
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/README.md +1 -0
- package/package.json +1 -1
- package/packages/cli/coverage/lcov-report/chunking/chunker.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/chunking/hash.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/chunking/index.html +1 -1
- package/packages/cli/coverage/lcov-report/chunking/types.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/config/index.html +1 -1
- package/packages/cli/coverage/lcov-report/config/load.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/config/types.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/embedding/index.html +1 -1
- package/packages/cli/coverage/lcov-report/embedding/stub.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/index.html +1 -1
- package/packages/cli/coverage/lcov-report/qdrant/index.html +1 -1
- package/packages/cli/coverage/lcov-report/qdrant/upsert.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/scope/allowlist.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/scope/ignore.ts.html +1 -1
- package/packages/cli/coverage/lcov-report/scope/index.html +1 -1
- package/packages/cli/coverage/tmp/{coverage-80329-1770078986321-0.json → coverage-13564-1770081003562-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80330-1770078986368-0.json → coverage-13565-1770081003610-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80331-1770078986366-0.json → coverage-13566-1770081003608-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80332-1770078986365-0.json → coverage-13567-1770081003606-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80333-1770078986374-0.json → coverage-13568-1770081003612-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80334-1770078986366-0.json → coverage-13569-1770081003608-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80335-1770078986369-0.json → coverage-13570-1770081003610-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80336-1770078986428-0.json → coverage-13571-1770081003661-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80337-1770078986394-0.json → coverage-13572-1770081003631-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80338-1770078986389-0.json → coverage-13573-1770081003625-0.json} +1 -1
- package/packages/mcp-server/dist/index.js +40 -3
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/src/index.ts +43 -3
- package/packages/server/coverage/lcov-report/index.html +1 -1
- package/packages/server/coverage/lcov-report/stub.ts.html +1 -1
- package/packages/server/coverage/tmp/{coverage-80426-1770078987238-0.json → coverage-13659-1770081004442-0.json} +1 -1
- package/packages/server/coverage/tmp/{coverage-80427-1770078987274-0.json → coverage-13660-1770081004478-0.json} +1 -1
|
@@ -4,6 +4,9 @@
|
|
|
4
4
|
* Exposes search_project_memory and explain_symbol tools that call the memory HTTP API.
|
|
5
5
|
* Log only to stderr so stdout is not corrupted (MCP uses stdin/stdout for JSON-RPC).
|
|
6
6
|
*/
|
|
7
|
+
import { appendFileSync, writeFileSync } from "fs";
|
|
8
|
+
import { tmpdir } from "os";
|
|
9
|
+
import { basename, join } from "path";
|
|
7
10
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
11
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
9
12
|
import { z } from "zod";
|
|
@@ -12,13 +15,45 @@ const MAX_INJECTED_CHARS = 50_000;
|
|
|
12
15
|
const PER_CHUNK_MAX_CHARS = 4_000;
|
|
13
16
|
const UNREACHABLE_MSG = "Project memory server unreachable. Run mem scaffold in this project.";
|
|
14
17
|
const LOG_PREFIX = "[project-memory-mcp]";
|
|
18
|
+
const TEMP_LOG_FILE = "project-memory-mcp.log";
|
|
19
|
+
function getLogFilePath() {
|
|
20
|
+
const envPath = process.env.PROJECT_MEMORY_MCP_LOG_FILE;
|
|
21
|
+
if (envPath)
|
|
22
|
+
return envPath;
|
|
23
|
+
return join(tmpdir(), TEMP_LOG_FILE);
|
|
24
|
+
}
|
|
25
|
+
function getProjectLogPrefix() {
|
|
26
|
+
const name = basename(process.cwd());
|
|
27
|
+
return name || `pid-${process.pid}`;
|
|
28
|
+
}
|
|
29
|
+
function ensureLogFileExists() {
|
|
30
|
+
const logFile = getLogFilePath();
|
|
31
|
+
try {
|
|
32
|
+
writeFileSync(logFile, "");
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// ignore
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function logLine(message) {
|
|
39
|
+
const projectPrefix = getProjectLogPrefix();
|
|
40
|
+
const line = `${new Date().toISOString()} [project: ${projectPrefix}] ${message}\n`;
|
|
41
|
+
console.error(message);
|
|
42
|
+
const logFile = getLogFilePath();
|
|
43
|
+
try {
|
|
44
|
+
appendFileSync(logFile, line);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// ignore write errors
|
|
48
|
+
}
|
|
49
|
+
}
|
|
15
50
|
function logAsked(tool, args) {
|
|
16
|
-
|
|
51
|
+
logLine(`${LOG_PREFIX} asked: ${tool} ${JSON.stringify(args)}`);
|
|
17
52
|
}
|
|
18
53
|
function logReturned(tool, text) {
|
|
19
54
|
const len = text.length;
|
|
20
55
|
const preview = len <= 120 ? text : text.slice(0, 120) + "... [truncated in log]";
|
|
21
|
-
|
|
56
|
+
logLine(`${LOG_PREFIX} returned: ${tool} (${len} chars) ${preview}`);
|
|
22
57
|
}
|
|
23
58
|
function getBaseUrl() {
|
|
24
59
|
return process.env.MEM_SERVER_URL ?? DEFAULT_MEM_SERVER_URL;
|
|
@@ -81,6 +116,7 @@ async function callExplain(baseUrl, symbol) {
|
|
|
81
116
|
}
|
|
82
117
|
}
|
|
83
118
|
async function main() {
|
|
119
|
+
ensureLogFileExists();
|
|
84
120
|
const baseUrl = getBaseUrl();
|
|
85
121
|
const server = new McpServer({
|
|
86
122
|
name: "project-memory",
|
|
@@ -140,7 +176,8 @@ async function main() {
|
|
|
140
176
|
});
|
|
141
177
|
const transport = new StdioServerTransport();
|
|
142
178
|
await server.connect(transport);
|
|
143
|
-
|
|
179
|
+
const logFile = getLogFilePath();
|
|
180
|
+
logLine(`Project Memory MCP server running on stdio; logging to ${logFile} [project: ${getProjectLogPrefix()}]`);
|
|
144
181
|
}
|
|
145
182
|
main().catch((err) => {
|
|
146
183
|
console.error("Fatal error:", err);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;GAIG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,sBAAsB,GAAG,wBAAwB,CAAC;AACxD,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAClC,MAAM,mBAAmB,GAAG,KAAK,CAAC;AAClC,MAAM,eAAe,GACnB,sEAAsE,CAAC;AACzE,MAAM,UAAU,GAAG,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,9 @@
|
|
|
5
5
|
* Log only to stderr so stdout is not corrupted (MCP uses stdin/stdout for JSON-RPC).
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
|
+
import { appendFileSync, writeFileSync } from "fs";
|
|
9
|
+
import { tmpdir } from "os";
|
|
10
|
+
import { basename, join } from "path";
|
|
8
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
9
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
10
13
|
import { z } from "zod";
|
|
@@ -15,16 +18,49 @@ const PER_CHUNK_MAX_CHARS = 4_000;
|
|
|
15
18
|
const UNREACHABLE_MSG =
|
|
16
19
|
"Project memory server unreachable. Run mem scaffold in this project.";
|
|
17
20
|
const LOG_PREFIX = "[project-memory-mcp]";
|
|
21
|
+
const TEMP_LOG_FILE = "project-memory-mcp.log";
|
|
22
|
+
|
|
23
|
+
function getLogFilePath(): string {
|
|
24
|
+
const envPath = process.env.PROJECT_MEMORY_MCP_LOG_FILE;
|
|
25
|
+
if (envPath) return envPath;
|
|
26
|
+
return join(tmpdir(), TEMP_LOG_FILE);
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
function getProjectLogPrefix(): string {
|
|
30
|
+
const name = basename(process.cwd());
|
|
31
|
+
return name || `pid-${process.pid}`;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
function ensureLogFileExists(): void {
|
|
35
|
+
const logFile = getLogFilePath();
|
|
36
|
+
try {
|
|
37
|
+
writeFileSync(logFile, "");
|
|
38
|
+
} catch {
|
|
39
|
+
// ignore
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
function logLine(message: string): void {
|
|
44
|
+
const projectPrefix = getProjectLogPrefix();
|
|
45
|
+
const line = `${new Date().toISOString()} [project: ${projectPrefix}] ${message}\n`;
|
|
46
|
+
console.error(message);
|
|
47
|
+
const logFile = getLogFilePath();
|
|
48
|
+
try {
|
|
49
|
+
appendFileSync(logFile, line);
|
|
50
|
+
} catch {
|
|
51
|
+
// ignore write errors
|
|
52
|
+
}
|
|
53
|
+
}
|
|
18
54
|
|
|
19
55
|
function logAsked(tool: string, args: Record<string, unknown>): void {
|
|
20
|
-
|
|
56
|
+
logLine(`${LOG_PREFIX} asked: ${tool} ${JSON.stringify(args)}`);
|
|
21
57
|
}
|
|
22
58
|
|
|
23
59
|
function logReturned(tool: string, text: string): void {
|
|
24
60
|
const len = text.length;
|
|
25
61
|
const preview =
|
|
26
62
|
len <= 120 ? text : text.slice(0, 120) + "... [truncated in log]";
|
|
27
|
-
|
|
63
|
+
logLine(`${LOG_PREFIX} returned: ${tool} (${len} chars) ${preview}`);
|
|
28
64
|
}
|
|
29
65
|
|
|
30
66
|
interface SearchResponse {
|
|
@@ -106,6 +142,7 @@ async function callExplain(
|
|
|
106
142
|
}
|
|
107
143
|
|
|
108
144
|
async function main(): Promise<void> {
|
|
145
|
+
ensureLogFileExists();
|
|
109
146
|
const baseUrl = getBaseUrl();
|
|
110
147
|
|
|
111
148
|
const server = new McpServer({
|
|
@@ -183,7 +220,10 @@ async function main(): Promise<void> {
|
|
|
183
220
|
|
|
184
221
|
const transport = new StdioServerTransport();
|
|
185
222
|
await server.connect(transport);
|
|
186
|
-
|
|
223
|
+
const logFile = getLogFilePath();
|
|
224
|
+
logLine(
|
|
225
|
+
`Project Memory MCP server running on stdio; logging to ${logFile} [project: ${getProjectLogPrefix()}]`
|
|
226
|
+
);
|
|
187
227
|
}
|
|
188
228
|
|
|
189
229
|
main().catch((err) => {
|
|
@@ -101,7 +101,7 @@
|
|
|
101
101
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
102
102
|
Code coverage generated by
|
|
103
103
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
104
|
-
at 2026-02-
|
|
104
|
+
at 2026-02-03T01:10:04.494Z
|
|
105
105
|
</div>
|
|
106
106
|
<script src="prettify.js"></script>
|
|
107
107
|
<script>
|
|
@@ -169,7 +169,7 @@ export function getVectorSize(): number {
|
|
|
169
169
|
<div class='footer quiet pad2 space-top1 center small'>
|
|
170
170
|
Code coverage generated by
|
|
171
171
|
<a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
|
|
172
|
-
at 2026-02-
|
|
172
|
+
at 2026-02-03T01:10:04.494Z
|
|
173
173
|
</div>
|
|
174
174
|
<script src="prettify.js"></script>
|
|
175
175
|
<script>
|