@dahch/muninn 0.0.0-stage → 0.2.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/LICENSE +21 -0
- package/README.md +395 -2
- package/dist/cli.d.ts +23 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +186 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +56 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/memory.d.ts +6 -0
- package/dist/commands/memory.d.ts.map +1 -0
- package/dist/commands/memory.js +374 -0
- package/dist/commands/memory.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +397 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/contracts/compiler.d.ts +71 -0
- package/dist/contracts/compiler.d.ts.map +1 -0
- package/dist/contracts/compiler.js +362 -0
- package/dist/contracts/compiler.js.map +1 -0
- package/dist/contracts/index.d.ts +2 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +2 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/db/client.d.ts +100 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +318 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.sql +99 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/indexer/ast-indexer.d.ts +55 -0
- package/dist/indexer/ast-indexer.d.ts.map +1 -0
- package/dist/indexer/ast-indexer.js +445 -0
- package/dist/indexer/ast-indexer.js.map +1 -0
- package/dist/indexer/index.d.ts +2 -0
- package/dist/indexer/index.d.ts.map +1 -0
- package/dist/indexer/index.js +2 -0
- package/dist/indexer/index.js.map +1 -0
- package/dist/mcp/index.d.ts +2 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +2 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/server.d.ts +254 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +636 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/service/index.d.ts +2 -0
- package/dist/service/index.d.ts.map +1 -0
- package/dist/service/index.js +2 -0
- package/dist/service/index.js.map +1 -0
- package/dist/service/memory-service.d.ts +320 -0
- package/dist/service/memory-service.d.ts.map +1 -0
- package/dist/service/memory-service.js +1511 -0
- package/dist/service/memory-service.js.map +1 -0
- package/dist/setup/index.d.ts +6 -0
- package/dist/setup/index.d.ts.map +1 -0
- package/dist/setup/index.js +6 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/json-target.d.ts +30 -0
- package/dist/setup/json-target.d.ts.map +1 -0
- package/dist/setup/json-target.js +263 -0
- package/dist/setup/json-target.js.map +1 -0
- package/dist/setup/portable.d.ts +56 -0
- package/dist/setup/portable.d.ts.map +1 -0
- package/dist/setup/portable.js +365 -0
- package/dist/setup/portable.js.map +1 -0
- package/dist/setup/registry.d.ts +54 -0
- package/dist/setup/registry.d.ts.map +1 -0
- package/dist/setup/registry.js +225 -0
- package/dist/setup/registry.js.map +1 -0
- package/dist/setup/rules-target.d.ts +31 -0
- package/dist/setup/rules-target.d.ts.map +1 -0
- package/dist/setup/rules-target.js +270 -0
- package/dist/setup/rules-target.js.map +1 -0
- package/dist/setup/toml-target.d.ts +62 -0
- package/dist/setup/toml-target.d.ts.map +1 -0
- package/dist/setup/toml-target.js +869 -0
- package/dist/setup/toml-target.js.map +1 -0
- package/dist/util/path-safety.d.ts +94 -0
- package/dist/util/path-safety.d.ts.map +1 -0
- package/dist/util/path-safety.js +162 -0
- package/dist/util/path-safety.js.map +1 -0
- package/dist/util/text.d.ts +9 -0
- package/dist/util/text.d.ts.map +1 -0
- package/dist/util/text.js +19 -0
- package/dist/util/text.js.map +1 -0
- package/package.json +87 -4
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import chalk from "chalk";
|
|
3
|
+
import { verifyTypeScriptContracts } from "../contracts/compiler.js";
|
|
4
|
+
export function printCheckUsage() {
|
|
5
|
+
console.log(`muninn check — Static TypeScript execution contract verification
|
|
6
|
+
|
|
7
|
+
Usage:
|
|
8
|
+
muninn check [files...] [--project <path>]
|
|
9
|
+
|
|
10
|
+
Options:
|
|
11
|
+
--project <path> Target project root containing tsconfig.json (default: cwd)
|
|
12
|
+
`);
|
|
13
|
+
}
|
|
14
|
+
export async function handleCheckCommand(files, args) {
|
|
15
|
+
if (args["--help"] || args["-h"]) {
|
|
16
|
+
printCheckUsage();
|
|
17
|
+
return;
|
|
18
|
+
}
|
|
19
|
+
const projectRoot = typeof args["--project"] === "string"
|
|
20
|
+
? path.resolve(args["--project"])
|
|
21
|
+
: typeof args["--root"] === "string"
|
|
22
|
+
? path.resolve(args["--root"])
|
|
23
|
+
: process.cwd();
|
|
24
|
+
const targetFiles = files.length > 0 ? files : undefined;
|
|
25
|
+
const result = verifyTypeScriptContracts(projectRoot, targetFiles);
|
|
26
|
+
if (result.valid) {
|
|
27
|
+
console.log(chalk.green(`✔ TypeScript contracts verified: 0 errors (${result.diagnostics.length} diagnostic(s)).`));
|
|
28
|
+
if (result.diagnostics.length > 0) {
|
|
29
|
+
console.log(chalk.yellow("\nDiagnostics:"));
|
|
30
|
+
for (const d of result.diagnostics) {
|
|
31
|
+
const loc = chalk.dim(`${d.filePath}:${d.line}:${d.character}`);
|
|
32
|
+
const code = chalk.yellow(`[${d.code}]`);
|
|
33
|
+
const category = chalk.yellow(d.category.toUpperCase());
|
|
34
|
+
console.log(`- ${loc} ${code} ${category}: ${d.message}`);
|
|
35
|
+
if (d.snippet) {
|
|
36
|
+
console.log(chalk.dim(d.snippet) + "\n");
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
return;
|
|
41
|
+
}
|
|
42
|
+
console.error(chalk.red.bold(`✖ TypeScript contracts check failed with ${result.errorsCount} error(s):\n`));
|
|
43
|
+
for (const d of result.diagnostics) {
|
|
44
|
+
const loc = chalk.cyan(`${d.filePath}:${d.line}:${d.character}`);
|
|
45
|
+
const code = chalk.yellow(`[${d.code}]`);
|
|
46
|
+
const category = d.category === "error"
|
|
47
|
+
? chalk.red("ERROR")
|
|
48
|
+
: chalk.yellow(d.category.toUpperCase());
|
|
49
|
+
console.error(`- ${loc} ${code} ${category}: ${d.message}`);
|
|
50
|
+
if (d.snippet) {
|
|
51
|
+
console.error(chalk.dim(d.snippet) + "\n");
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
process.exitCode = 1;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"check.js","sourceRoot":"","sources":["../../src/commands/check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function findSourceFiles(dir: string): string[];
|
|
2
|
+
export declare function printMemoryUsage(): void;
|
|
3
|
+
export declare function printMcpUsage(): void;
|
|
4
|
+
export declare function handleMemoryCommand(subcommand: string | undefined, args: Record<string, string | boolean | undefined>, positionals?: string[]): Promise<void>;
|
|
5
|
+
export declare function handleMcpCommand(subcommand: string | undefined, args: Record<string, string | boolean | undefined>): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=memory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.d.ts","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"AAkCA,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,EAAE,CAwBrD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAiBvC;AAED,wBAAgB,aAAa,IAAI,IAAI,CASpC;AAED,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,EAClD,WAAW,CAAC,EAAE,MAAM,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CA6Nf;AAsDD,wBAAsB,gBAAgB,CACpC,UAAU,EAAE,MAAM,GAAG,SAAS,EAC9B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC,CAoFf"}
|
|
@@ -0,0 +1,374 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { MemoryService, MAX_SESSION_BRIEF_BUDGET, MAX_SESSION_BRIEF_PATHS, readSessionBrief, } from "../service/memory-service.js";
|
|
5
|
+
import { startMcpServer } from "../mcp/server.js";
|
|
6
|
+
import { indexFilesIntoMuninn } from "../indexer/ast-indexer.js";
|
|
7
|
+
import { sanitizeTerminalText } from "../util/text.js";
|
|
8
|
+
const IGNORED_INDEX_DIRS = new Set([
|
|
9
|
+
"node_modules",
|
|
10
|
+
".git",
|
|
11
|
+
".harness",
|
|
12
|
+
".huginn",
|
|
13
|
+
"dist",
|
|
14
|
+
"build",
|
|
15
|
+
".cache",
|
|
16
|
+
]);
|
|
17
|
+
const SOURCE_FILE_EXTENSIONS = new Set([
|
|
18
|
+
".ts",
|
|
19
|
+
".tsx",
|
|
20
|
+
".mts",
|
|
21
|
+
".cts",
|
|
22
|
+
".js",
|
|
23
|
+
".jsx",
|
|
24
|
+
".mjs",
|
|
25
|
+
".cjs",
|
|
26
|
+
]);
|
|
27
|
+
export function findSourceFiles(dir) {
|
|
28
|
+
const results = [];
|
|
29
|
+
function walk(current) {
|
|
30
|
+
if (!fs.existsSync(current))
|
|
31
|
+
return;
|
|
32
|
+
try {
|
|
33
|
+
const entries = fs.readdirSync(current, { withFileTypes: true });
|
|
34
|
+
for (const entry of entries) {
|
|
35
|
+
if (entry.isDirectory()) {
|
|
36
|
+
if (!IGNORED_INDEX_DIRS.has(entry.name)) {
|
|
37
|
+
walk(path.join(current, entry.name));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (entry.isFile()) {
|
|
41
|
+
const ext = path.extname(entry.name).toLowerCase();
|
|
42
|
+
if (SOURCE_FILE_EXTENSIONS.has(ext)) {
|
|
43
|
+
results.push(path.join(current, entry.name));
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// ignore read error
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
walk(dir);
|
|
53
|
+
return results;
|
|
54
|
+
}
|
|
55
|
+
export function printMemoryUsage() {
|
|
56
|
+
console.log(`muninn memory — Persistent codebase memory across spec-build cycles
|
|
57
|
+
|
|
58
|
+
Usage:
|
|
59
|
+
muninn memory init [--db <path>] [--project <path>]
|
|
60
|
+
muninn memory search <query> [--category <cat>] [--limit <n>] [--project <path>]
|
|
61
|
+
muninn memory sync [--import] [--file <path>] [--project <path>]
|
|
62
|
+
muninn memory index [files...] [--project <path>] [--db <path>]
|
|
63
|
+
muninn memory brief [--project <path>] [--paths a,b] [--budget <n>] [--db <path>]
|
|
64
|
+
|
|
65
|
+
Subcommands:
|
|
66
|
+
init Initialize SQLite database and verify schema
|
|
67
|
+
search Search observations with BM25 relevance ranking
|
|
68
|
+
sync Export observations to disk (.jsonl) or import with --import
|
|
69
|
+
index Index AST symbols and dependencies into Muninn memory
|
|
70
|
+
brief Print a bounded read-only session brief (Markdown)
|
|
71
|
+
`);
|
|
72
|
+
}
|
|
73
|
+
export function printMcpUsage() {
|
|
74
|
+
console.log(`muninn mcp — Model Context Protocol server for Muninn memory
|
|
75
|
+
|
|
76
|
+
Usage:
|
|
77
|
+
muninn mcp run [--db <path>] [--project <path>]
|
|
78
|
+
|
|
79
|
+
Subcommands:
|
|
80
|
+
run Start the stdio MCP server for agent memory integration
|
|
81
|
+
`);
|
|
82
|
+
}
|
|
83
|
+
export async function handleMemoryCommand(subcommand, args, positionals) {
|
|
84
|
+
const dbPath = typeof args["--db"] === "string" ? args["--db"] : undefined;
|
|
85
|
+
const projectRoot = typeof args["--project"] === "string"
|
|
86
|
+
? args["--project"]
|
|
87
|
+
: typeof args["--root"] === "string"
|
|
88
|
+
? args["--root"]
|
|
89
|
+
: undefined;
|
|
90
|
+
if (!subcommand ||
|
|
91
|
+
args["--help"] ||
|
|
92
|
+
args["-h"] ||
|
|
93
|
+
subcommand === "help" ||
|
|
94
|
+
subcommand === "--help" ||
|
|
95
|
+
subcommand === "-h") {
|
|
96
|
+
printMemoryUsage();
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
if (subcommand === "init") {
|
|
100
|
+
const service = new MemoryService({ dbPath, projectRoot });
|
|
101
|
+
try {
|
|
102
|
+
const project = service.currentProject;
|
|
103
|
+
console.log(chalk.green("✔ Muninn memory database initialized"));
|
|
104
|
+
console.log(` Database: ${service.db.name}`);
|
|
105
|
+
console.log(` Project: ${project.name} (${project.root_path})`);
|
|
106
|
+
console.log(` Status: Tables ready`);
|
|
107
|
+
}
|
|
108
|
+
finally {
|
|
109
|
+
service.close?.();
|
|
110
|
+
}
|
|
111
|
+
return;
|
|
112
|
+
}
|
|
113
|
+
if (subcommand === "search") {
|
|
114
|
+
const queryPositional = positionals?.[0] ??
|
|
115
|
+
(typeof args._positional === "string" && args._positional !== "search"
|
|
116
|
+
? args._positional
|
|
117
|
+
: undefined);
|
|
118
|
+
const query = typeof args["--query"] === "string" ? args["--query"] : queryPositional;
|
|
119
|
+
if (!query || query.trim() === "") {
|
|
120
|
+
console.error(chalk.red("Error: Search query is required."));
|
|
121
|
+
process.exitCode = 1;
|
|
122
|
+
return;
|
|
123
|
+
}
|
|
124
|
+
const category = typeof args["--category"] === "string" ? args["--category"] : undefined;
|
|
125
|
+
const parsedLimit = typeof args["--limit"] === "string"
|
|
126
|
+
? Math.floor(Number(args["--limit"]))
|
|
127
|
+
: undefined;
|
|
128
|
+
const limit = parsedLimit && parsedLimit > 0 ? parsedLimit : 10;
|
|
129
|
+
const service = new MemoryService({ dbPath, projectRoot });
|
|
130
|
+
try {
|
|
131
|
+
const results = service.search({
|
|
132
|
+
query: query.trim(),
|
|
133
|
+
category,
|
|
134
|
+
limit,
|
|
135
|
+
});
|
|
136
|
+
if (results.length === 0) {
|
|
137
|
+
console.log(`No observations found matching "${query.trim()}".`);
|
|
138
|
+
return;
|
|
139
|
+
}
|
|
140
|
+
console.log(chalk.bold(`Found ${results.length} result(s) for "${query.trim()}" (BM25 ranked):`));
|
|
141
|
+
for (const obs of results) {
|
|
142
|
+
const categoryTag = chalk.cyan(`[${obs.category.toUpperCase()}]`);
|
|
143
|
+
const rankScore = chalk.gray(`(score: ${obs.rank.toFixed(3)})`);
|
|
144
|
+
console.log(`\n${categoryTag} ${chalk.bold(obs.title)} ${rankScore}`);
|
|
145
|
+
if (obs.topic_key) {
|
|
146
|
+
console.log(` ${chalk.dim("Topic:")} ${obs.topic_key}`);
|
|
147
|
+
}
|
|
148
|
+
const preview = obs.content.length > 150
|
|
149
|
+
? `${obs.content.slice(0, 147)}...`
|
|
150
|
+
: obs.content;
|
|
151
|
+
console.log(` ${chalk.white(preview.replace(/\n/g, " "))}`);
|
|
152
|
+
if (obs.entities && obs.entities.length > 0) {
|
|
153
|
+
const symbols = obs.entities.map((e) => e.identifier).join(", ");
|
|
154
|
+
console.log(` ${chalk.dim("Symbols:")} ${chalk.yellow(symbols)}`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
finally {
|
|
159
|
+
service.close?.();
|
|
160
|
+
}
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (subcommand === "sync") {
|
|
164
|
+
const syncPositional = positionals?.[0] ??
|
|
165
|
+
(typeof args._positional === "string" && args._positional !== "sync"
|
|
166
|
+
? args._positional
|
|
167
|
+
: undefined);
|
|
168
|
+
const filePath = typeof args["--file"] === "string" ? args["--file"] : syncPositional;
|
|
169
|
+
const isImport = Boolean(args["--import"]);
|
|
170
|
+
const service = new MemoryService({ dbPath, projectRoot });
|
|
171
|
+
try {
|
|
172
|
+
if (isImport) {
|
|
173
|
+
const result = service.importFromDisk(filePath);
|
|
174
|
+
console.log(`Imported ${result.imported} memories (skipped ${result.skipped} duplicates) from ${filePath ?? path.join(service.currentProject.root_path || process.cwd(), ".huginn", "memories.jsonl")}.`);
|
|
175
|
+
}
|
|
176
|
+
else {
|
|
177
|
+
const result = service.syncToDisk(filePath);
|
|
178
|
+
console.log(`Synced ${result.count} memories to ${result.path}.`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
finally {
|
|
182
|
+
service.close?.();
|
|
183
|
+
}
|
|
184
|
+
return;
|
|
185
|
+
}
|
|
186
|
+
if (subcommand === "brief") {
|
|
187
|
+
const rawPaths = typeof args["--paths"] === "string" ? args["--paths"] : undefined;
|
|
188
|
+
const paths = rawPaths === undefined
|
|
189
|
+
? undefined
|
|
190
|
+
: rawPaths
|
|
191
|
+
.split(",")
|
|
192
|
+
.map((p) => p.trim())
|
|
193
|
+
.filter(Boolean);
|
|
194
|
+
if (paths && paths.length > MAX_SESSION_BRIEF_PATHS) {
|
|
195
|
+
console.error(chalk.red(`Error: At most ${MAX_SESSION_BRIEF_PATHS} paths may be requested.`));
|
|
196
|
+
process.exitCode = 1;
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
let budgetChars;
|
|
200
|
+
if (typeof args["--budget"] === "string") {
|
|
201
|
+
const parsedBudget = Number(args["--budget"]);
|
|
202
|
+
if (!Number.isInteger(parsedBudget) ||
|
|
203
|
+
parsedBudget <= 0 ||
|
|
204
|
+
parsedBudget > MAX_SESSION_BRIEF_BUDGET) {
|
|
205
|
+
console.error(chalk.red(`Error: --budget must be a positive integer no greater than ${MAX_SESSION_BRIEF_BUDGET}.`));
|
|
206
|
+
process.exitCode = 1;
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
budgetChars = parsedBudget;
|
|
210
|
+
}
|
|
211
|
+
try {
|
|
212
|
+
const brief = readSessionBrief({
|
|
213
|
+
dbPath,
|
|
214
|
+
projectRoot,
|
|
215
|
+
paths,
|
|
216
|
+
budgetChars,
|
|
217
|
+
});
|
|
218
|
+
console.log(brief.markdown);
|
|
219
|
+
}
|
|
220
|
+
catch (err) {
|
|
221
|
+
console.error(chalk.red(`Error: ${err instanceof Error ? err.message : String(err)}`));
|
|
222
|
+
process.exitCode = 1;
|
|
223
|
+
}
|
|
224
|
+
return;
|
|
225
|
+
}
|
|
226
|
+
if (subcommand === "index") {
|
|
227
|
+
const rawFiles = positionals && positionals.length > 0
|
|
228
|
+
? positionals
|
|
229
|
+
: typeof args._positional === "string" && args._positional !== "index"
|
|
230
|
+
? [args._positional]
|
|
231
|
+
: [];
|
|
232
|
+
const service = new MemoryService({ dbPath, projectRoot });
|
|
233
|
+
try {
|
|
234
|
+
const root = service.currentProject.root_path || process.cwd();
|
|
235
|
+
const targetFiles = rawFiles.length > 0 ? rawFiles : findSourceFiles(root);
|
|
236
|
+
const result = indexFilesIntoMuninn(service, targetFiles, {
|
|
237
|
+
projectRoot: root,
|
|
238
|
+
});
|
|
239
|
+
console.log(chalk.green(`✔ Indexed ${result.indexedFiles} file(s) (${result.indexedSymbols} symbol(s), ${result.indexedDependencies} dependency link(s)) into Muninn memory.`));
|
|
240
|
+
}
|
|
241
|
+
finally {
|
|
242
|
+
service.close?.();
|
|
243
|
+
}
|
|
244
|
+
return;
|
|
245
|
+
}
|
|
246
|
+
console.error(chalk.red(`Unknown subcommand: ${subcommand}`));
|
|
247
|
+
printMemoryUsage();
|
|
248
|
+
process.exitCode = 1;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Logs to stderr without ever risking a second crash (ADR-30.3): once the
|
|
252
|
+
* parent pipe is gone, even the diagnostic write can fail with EPIPE.
|
|
253
|
+
*/
|
|
254
|
+
function logToStderr(line) {
|
|
255
|
+
try {
|
|
256
|
+
process.stderr.write(line.endsWith("\n") ? line : `${line}\n`);
|
|
257
|
+
}
|
|
258
|
+
catch {
|
|
259
|
+
/* stderr is gone too — the process is exiting anyway */
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Installs the stdio guards that keep `muninn mcp run` from crashing or hanging
|
|
264
|
+
* when its parent goes away (REQ-30 / AC-30.3):
|
|
265
|
+
*
|
|
266
|
+
* - an `'error'` handler on `process.stdout` so an EPIPE from a closed parent
|
|
267
|
+
* pipe is logged and turned into a clean shutdown instead of an unhandled
|
|
268
|
+
* exception that kills the server mid-response;
|
|
269
|
+
* - a no-op `'error'` handler on `process.stderr` for the same reason (a dead
|
|
270
|
+
* parent usually breaks both ends);
|
|
271
|
+
* - `'end'`/`'close'` on `process.stdin` — the SDK transport only observes
|
|
272
|
+
* `'data'`/`'error'`, so without this bridge a parent disconnect is invisible
|
|
273
|
+
* and the server would keep running forever.
|
|
274
|
+
*/
|
|
275
|
+
function installStdioGuards(onStdoutFailure) {
|
|
276
|
+
const onStdoutError = (err) => {
|
|
277
|
+
logToStderr(`[muninn] mcp run: stdout write failed (${sanitizeTerminalText(err.message)}); shutting down.`);
|
|
278
|
+
onStdoutFailure();
|
|
279
|
+
};
|
|
280
|
+
const onStderrError = () => {
|
|
281
|
+
/* a broken stderr must never crash the JSON-RPC server */
|
|
282
|
+
};
|
|
283
|
+
process.stdout.on("error", onStdoutError);
|
|
284
|
+
process.stderr.on("error", onStderrError);
|
|
285
|
+
return {
|
|
286
|
+
dispose() {
|
|
287
|
+
process.stdout.off("error", onStdoutError);
|
|
288
|
+
process.stderr.off("error", onStderrError);
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
}
|
|
292
|
+
export async function handleMcpCommand(subcommand, args) {
|
|
293
|
+
const dbPath = typeof args["--db"] === "string" ? args["--db"] : undefined;
|
|
294
|
+
const projectRoot = typeof args["--project"] === "string"
|
|
295
|
+
? args["--project"]
|
|
296
|
+
: typeof args["--root"] === "string"
|
|
297
|
+
? args["--root"]
|
|
298
|
+
: undefined;
|
|
299
|
+
if (!subcommand ||
|
|
300
|
+
args["--help"] ||
|
|
301
|
+
args["-h"] ||
|
|
302
|
+
subcommand === "help" ||
|
|
303
|
+
subcommand === "--help" ||
|
|
304
|
+
subcommand === "-h") {
|
|
305
|
+
printMcpUsage();
|
|
306
|
+
return;
|
|
307
|
+
}
|
|
308
|
+
if (subcommand === "run") {
|
|
309
|
+
const started = await startMcpServer({
|
|
310
|
+
dbPath,
|
|
311
|
+
projectRoot,
|
|
312
|
+
});
|
|
313
|
+
const { server, transport } = started;
|
|
314
|
+
try {
|
|
315
|
+
// Protocol failures were previously discarded (AC-30.3): surface them on
|
|
316
|
+
// stderr (never stdout — that stream carries JSON-RPC) without aborting.
|
|
317
|
+
if (server) {
|
|
318
|
+
server.onerror = (err) => {
|
|
319
|
+
logToStderr(`[muninn] mcp run: protocol error: ${sanitizeTerminalText(err.message)}`);
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
// Keep process alive while stdio transport is connected:
|
|
323
|
+
await new Promise((resolve) => {
|
|
324
|
+
let finished = false;
|
|
325
|
+
const onStdinClosed = () => {
|
|
326
|
+
if ((process.env.MUNINN_DEBUG || process.env.HUGINN_DEBUG)) {
|
|
327
|
+
logToStderr("[muninn] mcp run: stdin closed by the client; shutting down.");
|
|
328
|
+
}
|
|
329
|
+
done();
|
|
330
|
+
};
|
|
331
|
+
const guards = installStdioGuards(() => done());
|
|
332
|
+
const done = () => {
|
|
333
|
+
if (finished)
|
|
334
|
+
return;
|
|
335
|
+
finished = true;
|
|
336
|
+
process.removeListener("SIGINT", done);
|
|
337
|
+
process.removeListener("SIGTERM", done);
|
|
338
|
+
process.stdin.removeListener("end", onStdinClosed);
|
|
339
|
+
process.stdin.removeListener("close", onStdinClosed);
|
|
340
|
+
guards.dispose();
|
|
341
|
+
resolve();
|
|
342
|
+
};
|
|
343
|
+
if (transport) {
|
|
344
|
+
transport.onclose = () => done();
|
|
345
|
+
}
|
|
346
|
+
else {
|
|
347
|
+
done();
|
|
348
|
+
return;
|
|
349
|
+
}
|
|
350
|
+
// The parent disappearing is a lifecycle event, not a hang: bridge EOF
|
|
351
|
+
// (and an abruptly closed pipe) to the same shutdown path as onclose.
|
|
352
|
+
process.stdin.on("end", onStdinClosed);
|
|
353
|
+
process.stdin.on("close", onStdinClosed);
|
|
354
|
+
process.on("SIGINT", done);
|
|
355
|
+
process.on("SIGTERM", done);
|
|
356
|
+
});
|
|
357
|
+
}
|
|
358
|
+
finally {
|
|
359
|
+
if (typeof started.closeService === "function") {
|
|
360
|
+
started.closeService();
|
|
361
|
+
}
|
|
362
|
+
else {
|
|
363
|
+
// Compatibility with injected test doubles that predate the lazy handle.
|
|
364
|
+
started.service?.close?.();
|
|
365
|
+
}
|
|
366
|
+
await server?.close?.();
|
|
367
|
+
}
|
|
368
|
+
return;
|
|
369
|
+
}
|
|
370
|
+
console.error(chalk.red(`Unknown subcommand: ${subcommand}`));
|
|
371
|
+
printMcpUsage();
|
|
372
|
+
process.exitCode = 1;
|
|
373
|
+
}
|
|
374
|
+
//# sourceMappingURL=memory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/commands/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/commands/setup.ts"],"names":[],"mappings":"AAuCA,wBAAgB,eAAe,IAAI,IAAI,CAmBtC;AAgND,wBAAsB,kBAAkB,CACtC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,GACjD,OAAO,CAAC,IAAI,CAAC,CAgMf"}
|