@dahch/muninn 0.0.0-stage → 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/LICENSE +21 -0
- package/README.md +152 -2
- package/dist/cli.d.ts +23 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +170 -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 +325 -0
- package/dist/commands/memory.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 +84 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +264 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.sql +97 -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 +233 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +495 -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 +203 -0
- package/dist/service/memory-service.d.ts.map +1 -0
- package/dist/service/memory-service.js +891 -0
- package/dist/service/memory-service.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,233 @@
|
|
|
1
|
+
import type { Readable, Writable } from "node:stream";
|
|
2
|
+
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
3
|
+
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
|
|
4
|
+
import { type JSONRPCMessage, type Tool } from "@modelcontextprotocol/sdk/types.js";
|
|
5
|
+
import { z } from "zod";
|
|
6
|
+
import { type IMemoryService, type MemoryServiceOptions } from "../service/index.js";
|
|
7
|
+
export { type IMemoryService };
|
|
8
|
+
/**
|
|
9
|
+
* Zod schema for symbol / entity objects.
|
|
10
|
+
*/
|
|
11
|
+
export declare const SymbolSchema: z.ZodObject<{
|
|
12
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
13
|
+
filePath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
14
|
+
file_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
15
|
+
identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
16
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
17
|
+
function: "function";
|
|
18
|
+
file: "file";
|
|
19
|
+
class: "class";
|
|
20
|
+
interface: "interface";
|
|
21
|
+
module: "module";
|
|
22
|
+
}>>>;
|
|
23
|
+
entity_type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
24
|
+
function: "function";
|
|
25
|
+
file: "file";
|
|
26
|
+
class: "class";
|
|
27
|
+
interface: "interface";
|
|
28
|
+
module: "module";
|
|
29
|
+
}>>>;
|
|
30
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
31
|
+
}, z.core.$loose>;
|
|
32
|
+
/**
|
|
33
|
+
* Schema for observation category.
|
|
34
|
+
*/
|
|
35
|
+
export declare const CategorySchema: z.ZodEnum<{
|
|
36
|
+
decision: "decision";
|
|
37
|
+
convention: "convention";
|
|
38
|
+
discovery: "discovery";
|
|
39
|
+
bugfix: "bugfix";
|
|
40
|
+
architecture: "architecture";
|
|
41
|
+
}>;
|
|
42
|
+
/**
|
|
43
|
+
* Zod schema for muninn_save tool arguments.
|
|
44
|
+
*/
|
|
45
|
+
export declare const MuninnSaveSchema: z.ZodObject<{
|
|
46
|
+
category: z.ZodEnum<{
|
|
47
|
+
decision: "decision";
|
|
48
|
+
convention: "convention";
|
|
49
|
+
discovery: "discovery";
|
|
50
|
+
bugfix: "bugfix";
|
|
51
|
+
architecture: "architecture";
|
|
52
|
+
}>;
|
|
53
|
+
title: z.ZodString;
|
|
54
|
+
content: z.ZodString;
|
|
55
|
+
topicKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
56
|
+
symbols: z.ZodOptional<z.ZodNullable<z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
57
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
58
|
+
filePath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
59
|
+
file_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
60
|
+
identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
61
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
62
|
+
function: "function";
|
|
63
|
+
file: "file";
|
|
64
|
+
class: "class";
|
|
65
|
+
interface: "interface";
|
|
66
|
+
module: "module";
|
|
67
|
+
}>>>;
|
|
68
|
+
entity_type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
69
|
+
function: "function";
|
|
70
|
+
file: "file";
|
|
71
|
+
class: "class";
|
|
72
|
+
interface: "interface";
|
|
73
|
+
module: "module";
|
|
74
|
+
}>>>;
|
|
75
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
76
|
+
}, z.core.$loose>]>>>>;
|
|
77
|
+
}, z.core.$strip>;
|
|
78
|
+
export type MuninnSaveInput = z.infer<typeof MuninnSaveSchema>;
|
|
79
|
+
/**
|
|
80
|
+
* Zod schema for muninn_search tool arguments.
|
|
81
|
+
*/
|
|
82
|
+
export declare const MuninnSearchSchema: z.ZodObject<{
|
|
83
|
+
query: z.ZodString;
|
|
84
|
+
category: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
85
|
+
decision: "decision";
|
|
86
|
+
convention: "convention";
|
|
87
|
+
discovery: "discovery";
|
|
88
|
+
bugfix: "bugfix";
|
|
89
|
+
architecture: "architecture";
|
|
90
|
+
}>>>;
|
|
91
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
92
|
+
allProjects: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
93
|
+
}, z.core.$strip>;
|
|
94
|
+
export type MuninnSearchInput = z.infer<typeof MuninnSearchSchema>;
|
|
95
|
+
/**
|
|
96
|
+
* Zod schema for muninn_context tool arguments.
|
|
97
|
+
*/
|
|
98
|
+
export declare const MuninnContextSchema: z.ZodObject<{
|
|
99
|
+
limit: z.ZodDefault<z.ZodOptional<z.ZodNullable<z.ZodNumber>>>;
|
|
100
|
+
category: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
101
|
+
decision: "decision";
|
|
102
|
+
convention: "convention";
|
|
103
|
+
discovery: "discovery";
|
|
104
|
+
bugfix: "bugfix";
|
|
105
|
+
architecture: "architecture";
|
|
106
|
+
}>>>;
|
|
107
|
+
topicKey: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
108
|
+
allProjects: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
109
|
+
}, z.core.$strip>;
|
|
110
|
+
export type MuninnContextInput = z.infer<typeof MuninnContextSchema>;
|
|
111
|
+
/**
|
|
112
|
+
* Zod schema for muninn_link_symbol tool arguments.
|
|
113
|
+
*/
|
|
114
|
+
export declare const MuninnLinkSymbolSchema: z.ZodObject<{
|
|
115
|
+
observationId: z.ZodString;
|
|
116
|
+
symbol: z.ZodUnion<readonly [z.ZodString, z.ZodObject<{
|
|
117
|
+
name: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
118
|
+
filePath: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
119
|
+
file_path: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
120
|
+
identifier: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
121
|
+
type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
122
|
+
function: "function";
|
|
123
|
+
file: "file";
|
|
124
|
+
class: "class";
|
|
125
|
+
interface: "interface";
|
|
126
|
+
module: "module";
|
|
127
|
+
}>>>;
|
|
128
|
+
entity_type: z.ZodOptional<z.ZodNullable<z.ZodEnum<{
|
|
129
|
+
function: "function";
|
|
130
|
+
file: "file";
|
|
131
|
+
class: "class";
|
|
132
|
+
interface: "interface";
|
|
133
|
+
module: "module";
|
|
134
|
+
}>>>;
|
|
135
|
+
id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
136
|
+
}, z.core.$loose>]>;
|
|
137
|
+
}, z.core.$strip>;
|
|
138
|
+
export type MuninnLinkSymbolInput = z.infer<typeof MuninnLinkSymbolSchema>;
|
|
139
|
+
/**
|
|
140
|
+
* Zod schema for muninn_stats tool arguments.
|
|
141
|
+
*/
|
|
142
|
+
export declare const MuninnStatsSchema: z.ZodObject<{
|
|
143
|
+
allProjects: z.ZodOptional<z.ZodNullable<z.ZodBoolean>>;
|
|
144
|
+
}, z.core.$strip>;
|
|
145
|
+
export type MuninnStatsInput = z.infer<typeof MuninnStatsSchema>;
|
|
146
|
+
/**
|
|
147
|
+
* Zod schema for muninn_inspect_symbol tool arguments.
|
|
148
|
+
*/
|
|
149
|
+
export declare const MuninnInspectSymbolSchema: z.ZodObject<{
|
|
150
|
+
symbol: z.ZodString;
|
|
151
|
+
projectId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
152
|
+
project_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
153
|
+
}, z.core.$strip>;
|
|
154
|
+
export type MuninnInspectSymbolInput = z.infer<typeof MuninnInspectSymbolSchema>;
|
|
155
|
+
/**
|
|
156
|
+
* Zod schema for muninn_verify_contract tool arguments.
|
|
157
|
+
*/
|
|
158
|
+
export declare const MuninnVerifyContractSchema: z.ZodObject<{
|
|
159
|
+
files: z.ZodOptional<z.ZodNullable<z.ZodPipe<z.ZodUnion<readonly [z.ZodString, z.ZodArray<z.ZodString>]>, z.ZodTransform<string[], string | string[]>>>>;
|
|
160
|
+
projectRoot: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
161
|
+
project_root: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
162
|
+
}, z.core.$strip>;
|
|
163
|
+
export type MuninnVerifyContractInput = z.infer<typeof MuninnVerifyContractSchema>;
|
|
164
|
+
/**
|
|
165
|
+
* Helper to format Zod validation errors into a human-readable string.
|
|
166
|
+
*/
|
|
167
|
+
export declare function formatZodErrors(error: z.ZodError): string;
|
|
168
|
+
export interface ToolDefinition<TSchema extends z.ZodTypeAny = any, TOutput = unknown> {
|
|
169
|
+
name: string;
|
|
170
|
+
description: string;
|
|
171
|
+
schema: TSchema;
|
|
172
|
+
handler: (service: IMemoryService, input: z.infer<TSchema>) => TOutput | Promise<TOutput>;
|
|
173
|
+
}
|
|
174
|
+
export declare const TOOL_REGISTRY: Record<string, ToolDefinition>;
|
|
175
|
+
/**
|
|
176
|
+
* Metadata definition for all Muninn MCP tools.
|
|
177
|
+
*/
|
|
178
|
+
export declare const MUNINN_TOOLS: Tool[];
|
|
179
|
+
export declare const TOOL_NAMES: readonly ["muninn_save", "muninn_search", "muninn_context", "muninn_link_symbol", "muninn_stats", "muninn_inspect_symbol", "muninn_verify_contract"];
|
|
180
|
+
export type ToolName = (typeof TOOL_NAMES)[number];
|
|
181
|
+
/**
|
|
182
|
+
* Normalizes input arguments (handling snake_case fallbacks and null/undefined values),
|
|
183
|
+
* hardened against prototype pollution by skipping __proto__, constructor, and prototype keys.
|
|
184
|
+
*/
|
|
185
|
+
export declare function normalizeArgs(args: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
186
|
+
/**
|
|
187
|
+
* Type guard to check if an object satisfies the IMemoryService interface.
|
|
188
|
+
*/
|
|
189
|
+
export declare function isMemoryService(obj: unknown): obj is IMemoryService;
|
|
190
|
+
export type MuninnServer = Server & {
|
|
191
|
+
service: IMemoryService;
|
|
192
|
+
memoryService: IMemoryService;
|
|
193
|
+
};
|
|
194
|
+
/**
|
|
195
|
+
* Deadline for a single JSON-RPC write (AC-30.3 / ADR-30.3). The SDK transport
|
|
196
|
+
* resolves `send()` on `'drain'`, which a *broken* stdout pipe never emits, so
|
|
197
|
+
* an unbounded write would hang the pending request forever.
|
|
198
|
+
*/
|
|
199
|
+
export declare const MCP_WRITE_TIMEOUT_MS = 5000;
|
|
200
|
+
export interface BoundedStdioTransportOptions {
|
|
201
|
+
/** Read-buffer ceiling (SDK default: 10 MB). */
|
|
202
|
+
maxBufferSize?: number;
|
|
203
|
+
/** Write deadline before the pending request is rejected; ≤ 0 disables it. */
|
|
204
|
+
writeTimeoutMs?: number;
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* `StdioServerTransport` with a *bounded* write path (REQ-30 / AC-30.3).
|
|
208
|
+
*
|
|
209
|
+
* `send()` races the SDK's write against (i) a short deadline and (ii) an error
|
|
210
|
+
* on the output stream (EPIPE / ERR_STREAM_DESTROYED). Either one **rejects**,
|
|
211
|
+
* so a broken parent pipe fails the pending request with a clear error instead
|
|
212
|
+
* of awaiting a `'drain'` that can never arrive. The reader side (`start()`,
|
|
213
|
+
* buffering, framing) is untouched.
|
|
214
|
+
*/
|
|
215
|
+
export declare class BoundedStdioServerTransport extends StdioServerTransport {
|
|
216
|
+
private readonly output;
|
|
217
|
+
private readonly writeTimeoutMs;
|
|
218
|
+
constructor(stdin?: Readable, stdout?: Writable, options?: BoundedStdioTransportOptions);
|
|
219
|
+
send(message: JSONRPCMessage): Promise<void>;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Creates and configures a Model Context Protocol (MCP) server for Muninn memory.
|
|
223
|
+
*/
|
|
224
|
+
export declare function createMcpServer(serviceOrOptions?: IMemoryService | MemoryServiceOptions): MuninnServer;
|
|
225
|
+
/**
|
|
226
|
+
* Starts the Muninn MCP server using the bounded {@link BoundedStdioServerTransport}.
|
|
227
|
+
*/
|
|
228
|
+
export declare function startMcpServer(options?: MemoryServiceOptions | IMemoryService, transportOptions?: BoundedStdioTransportOptions): Promise<{
|
|
229
|
+
server: MuninnServer;
|
|
230
|
+
transport: BoundedStdioServerTransport;
|
|
231
|
+
service: IMemoryService;
|
|
232
|
+
}>;
|
|
233
|
+
//# sourceMappingURL=server.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/mcp/server.ts"],"names":[],"mappings":"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"}
|