@folterung/project-memory 0.1.12 → 0.1.14
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 -1
- 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-31303-1770081858145-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80330-1770078986368-0.json → coverage-31304-1770081858192-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80331-1770078986366-0.json → coverage-31305-1770081858190-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80332-1770078986365-0.json → coverage-31306-1770081858189-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80333-1770078986374-0.json → coverage-31307-1770081858198-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80334-1770078986366-0.json → coverage-31308-1770081858189-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80335-1770078986369-0.json → coverage-31309-1770081858191-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80336-1770078986428-0.json → coverage-31310-1770081858245-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80337-1770078986394-0.json → coverage-31311-1770081858213-0.json} +1 -1
- package/packages/cli/coverage/tmp/{coverage-80338-1770078986389-0.json → coverage-31312-1770081858208-0.json} +1 -1
- package/packages/mcp-server/dist/index.js +33 -17
- package/packages/mcp-server/dist/index.js.map +1 -1
- package/packages/mcp-server/src/index.ts +35 -16
- 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-31403-1770081859010-0.json} +1 -1
- package/packages/server/coverage/tmp/{coverage-80427-1770078987274-0.json → coverage-31404-1770081859045-0.json} +1 -1
|
@@ -4,8 +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,
|
|
8
|
-
import {
|
|
7
|
+
import { appendFileSync, writeFileSync } from "fs";
|
|
8
|
+
import { tmpdir } from "os";
|
|
9
|
+
import { basename, join } from "path";
|
|
9
10
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
10
11
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
11
12
|
import { z } from "zod";
|
|
@@ -14,26 +15,42 @@ const MAX_INJECTED_CHARS = 50_000;
|
|
|
14
15
|
const PER_CHUNK_MAX_CHARS = 4_000;
|
|
15
16
|
const UNREACHABLE_MSG = "Project memory server unreachable. Run mem scaffold in this project.";
|
|
16
17
|
const LOG_PREFIX = "[project-memory-mcp]";
|
|
18
|
+
const LOG_FILE_NAME = "project-memory-mcp.log";
|
|
19
|
+
function getDefaultLogDir() {
|
|
20
|
+
if (process.platform === "win32") {
|
|
21
|
+
return process.env.TEMP ?? process.env.TMP ?? tmpdir();
|
|
22
|
+
}
|
|
23
|
+
return "/tmp";
|
|
24
|
+
}
|
|
17
25
|
function getLogFilePath() {
|
|
18
26
|
const envPath = process.env.PROJECT_MEMORY_MCP_LOG_FILE;
|
|
19
27
|
if (envPath)
|
|
20
28
|
return envPath;
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
29
|
+
return join(getDefaultLogDir(), LOG_FILE_NAME);
|
|
30
|
+
}
|
|
31
|
+
function getProjectLogPrefix() {
|
|
32
|
+
const name = basename(process.cwd());
|
|
33
|
+
return name || `pid-${process.pid}`;
|
|
34
|
+
}
|
|
35
|
+
function ensureLogFileExists() {
|
|
36
|
+
const logFile = getLogFilePath();
|
|
37
|
+
try {
|
|
38
|
+
writeFileSync(logFile, "");
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// ignore
|
|
42
|
+
}
|
|
25
43
|
}
|
|
26
44
|
function logLine(message) {
|
|
27
|
-
const
|
|
45
|
+
const projectPrefix = getProjectLogPrefix();
|
|
46
|
+
const line = `${new Date().toISOString()} [project: ${projectPrefix}] ${message}\n`;
|
|
28
47
|
console.error(message);
|
|
29
48
|
const logFile = getLogFilePath();
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
// ignore write errors
|
|
36
|
-
}
|
|
49
|
+
try {
|
|
50
|
+
appendFileSync(logFile, line);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
// ignore write errors
|
|
37
54
|
}
|
|
38
55
|
}
|
|
39
56
|
function logAsked(tool, args) {
|
|
@@ -105,6 +122,7 @@ async function callExplain(baseUrl, symbol) {
|
|
|
105
122
|
}
|
|
106
123
|
}
|
|
107
124
|
async function main() {
|
|
125
|
+
ensureLogFileExists();
|
|
108
126
|
const baseUrl = getBaseUrl();
|
|
109
127
|
const server = new McpServer({
|
|
110
128
|
name: "project-memory",
|
|
@@ -165,9 +183,7 @@ async function main() {
|
|
|
165
183
|
const transport = new StdioServerTransport();
|
|
166
184
|
await server.connect(transport);
|
|
167
185
|
const logFile = getLogFilePath();
|
|
168
|
-
logLine(logFile
|
|
169
|
-
? `Project Memory MCP server running on stdio; logging to ${logFile}`
|
|
170
|
-
: "Project Memory MCP server running on stdio");
|
|
186
|
+
logLine(`Project Memory MCP server running on stdio; logging to ${logFile} [project: ${getProjectLogPrefix()}]`);
|
|
171
187
|
}
|
|
172
188
|
main().catch((err) => {
|
|
173
189
|
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,cAAc,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +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,
|
|
9
|
-
import {
|
|
8
|
+
import { appendFileSync, writeFileSync } from "fs";
|
|
9
|
+
import { tmpdir } from "os";
|
|
10
|
+
import { basename, join } from "path";
|
|
10
11
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
11
12
|
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
12
13
|
import { z } from "zod";
|
|
@@ -17,25 +18,44 @@ const PER_CHUNK_MAX_CHARS = 4_000;
|
|
|
17
18
|
const UNREACHABLE_MSG =
|
|
18
19
|
"Project memory server unreachable. Run mem scaffold in this project.";
|
|
19
20
|
const LOG_PREFIX = "[project-memory-mcp]";
|
|
21
|
+
const LOG_FILE_NAME = "project-memory-mcp.log";
|
|
20
22
|
|
|
21
|
-
function
|
|
23
|
+
function getDefaultLogDir(): string {
|
|
24
|
+
if (process.platform === "win32") {
|
|
25
|
+
return process.env.TEMP ?? process.env.TMP ?? tmpdir();
|
|
26
|
+
}
|
|
27
|
+
return "/tmp";
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function getLogFilePath(): string {
|
|
22
31
|
const envPath = process.env.PROJECT_MEMORY_MCP_LOG_FILE;
|
|
23
32
|
if (envPath) return envPath;
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
33
|
+
return join(getDefaultLogDir(), LOG_FILE_NAME);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
function getProjectLogPrefix(): string {
|
|
37
|
+
const name = basename(process.cwd());
|
|
38
|
+
return name || `pid-${process.pid}`;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
function ensureLogFileExists(): void {
|
|
42
|
+
const logFile = getLogFilePath();
|
|
43
|
+
try {
|
|
44
|
+
writeFileSync(logFile, "");
|
|
45
|
+
} catch {
|
|
46
|
+
// ignore
|
|
47
|
+
}
|
|
27
48
|
}
|
|
28
49
|
|
|
29
50
|
function logLine(message: string): void {
|
|
30
|
-
const
|
|
51
|
+
const projectPrefix = getProjectLogPrefix();
|
|
52
|
+
const line = `${new Date().toISOString()} [project: ${projectPrefix}] ${message}\n`;
|
|
31
53
|
console.error(message);
|
|
32
54
|
const logFile = getLogFilePath();
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
// ignore write errors
|
|
38
|
-
}
|
|
55
|
+
try {
|
|
56
|
+
appendFileSync(logFile, line);
|
|
57
|
+
} catch {
|
|
58
|
+
// ignore write errors
|
|
39
59
|
}
|
|
40
60
|
}
|
|
41
61
|
|
|
@@ -129,6 +149,7 @@ async function callExplain(
|
|
|
129
149
|
}
|
|
130
150
|
|
|
131
151
|
async function main(): Promise<void> {
|
|
152
|
+
ensureLogFileExists();
|
|
132
153
|
const baseUrl = getBaseUrl();
|
|
133
154
|
|
|
134
155
|
const server = new McpServer({
|
|
@@ -208,9 +229,7 @@ async function main(): Promise<void> {
|
|
|
208
229
|
await server.connect(transport);
|
|
209
230
|
const logFile = getLogFilePath();
|
|
210
231
|
logLine(
|
|
211
|
-
logFile
|
|
212
|
-
? `Project Memory MCP server running on stdio; logging to ${logFile}`
|
|
213
|
-
: "Project Memory MCP server running on stdio"
|
|
232
|
+
`Project Memory MCP server running on stdio; logging to ${logFile} [project: ${getProjectLogPrefix()}]`
|
|
214
233
|
);
|
|
215
234
|
}
|
|
216
235
|
|
|
@@ -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:24:19.060Z
|
|
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:24:19.060Z
|
|
173
173
|
</div>
|
|
174
174
|
<script src="prettify.js"></script>
|
|
175
175
|
<script>
|