@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.
Files changed (64) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +152 -2
  3. package/dist/cli.d.ts +23 -0
  4. package/dist/cli.d.ts.map +1 -0
  5. package/dist/cli.js +170 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +56 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/memory.d.ts +6 -0
  12. package/dist/commands/memory.d.ts.map +1 -0
  13. package/dist/commands/memory.js +325 -0
  14. package/dist/commands/memory.js.map +1 -0
  15. package/dist/contracts/compiler.d.ts +71 -0
  16. package/dist/contracts/compiler.d.ts.map +1 -0
  17. package/dist/contracts/compiler.js +362 -0
  18. package/dist/contracts/compiler.js.map +1 -0
  19. package/dist/contracts/index.d.ts +2 -0
  20. package/dist/contracts/index.d.ts.map +1 -0
  21. package/dist/contracts/index.js +2 -0
  22. package/dist/contracts/index.js.map +1 -0
  23. package/dist/db/client.d.ts +84 -0
  24. package/dist/db/client.d.ts.map +1 -0
  25. package/dist/db/client.js +264 -0
  26. package/dist/db/client.js.map +1 -0
  27. package/dist/db/schema.sql +97 -0
  28. package/dist/index.d.ts +23 -0
  29. package/dist/index.d.ts.map +1 -0
  30. package/dist/index.js +23 -0
  31. package/dist/index.js.map +1 -0
  32. package/dist/indexer/ast-indexer.d.ts +55 -0
  33. package/dist/indexer/ast-indexer.d.ts.map +1 -0
  34. package/dist/indexer/ast-indexer.js +445 -0
  35. package/dist/indexer/ast-indexer.js.map +1 -0
  36. package/dist/indexer/index.d.ts +2 -0
  37. package/dist/indexer/index.d.ts.map +1 -0
  38. package/dist/indexer/index.js +2 -0
  39. package/dist/indexer/index.js.map +1 -0
  40. package/dist/mcp/index.d.ts +2 -0
  41. package/dist/mcp/index.d.ts.map +1 -0
  42. package/dist/mcp/index.js +2 -0
  43. package/dist/mcp/index.js.map +1 -0
  44. package/dist/mcp/server.d.ts +233 -0
  45. package/dist/mcp/server.d.ts.map +1 -0
  46. package/dist/mcp/server.js +495 -0
  47. package/dist/mcp/server.js.map +1 -0
  48. package/dist/service/index.d.ts +2 -0
  49. package/dist/service/index.d.ts.map +1 -0
  50. package/dist/service/index.js +2 -0
  51. package/dist/service/index.js.map +1 -0
  52. package/dist/service/memory-service.d.ts +203 -0
  53. package/dist/service/memory-service.d.ts.map +1 -0
  54. package/dist/service/memory-service.js +891 -0
  55. package/dist/service/memory-service.js.map +1 -0
  56. package/dist/util/path-safety.d.ts +94 -0
  57. package/dist/util/path-safety.d.ts.map +1 -0
  58. package/dist/util/path-safety.js +162 -0
  59. package/dist/util/path-safety.js.map +1 -0
  60. package/dist/util/text.d.ts +9 -0
  61. package/dist/util/text.d.ts.map +1 -0
  62. package/dist/util/text.js +19 -0
  63. package/dist/util/text.js.map +1 -0
  64. package/package.json +87 -4
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-service.js","sourceRoot":"","sources":["../../src/service/memory-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,94 @@
1
+ /**
2
+ * H-1 — symlink-safe resolution of **document** paths (spec/adr/plan).
3
+ *
4
+ * A repository Muninn reads is attacker-controlled the moment it is not ours: a
5
+ * clone can ship `spec.md -> ~/.aws/credentials`, `adr.md -> /etc/passwd` or a
6
+ * `docs/` directory that points anywhere on the host. Both directions were open:
7
+ *
8
+ * - **read** — `readOptional`/`readFileBounded` followed the link, so the target's
9
+ * content was read and embedded in an agent prompt (an exfiltration channel
10
+ * straight out of the project), and
11
+ * - **write** — `writeDoc` followed it too, so the drafting step *overwrote* the
12
+ * link target (a `~/.aws/credentials` clobbered by a generated `spec.md`).
13
+ *
14
+ * The rule enforced here is deliberately simple and fail-closed:
15
+ *
16
+ * 1. The final path component is `lstat`ed and a **symlink is always refused** —
17
+ * the link is never followed, read or overwritten. This holds for every caller,
18
+ * including the ones whose doc genuinely lives outside the project, because
19
+ * "an explicitly configured path" is a reason to allow the *file*, never a
20
+ * reason to let a repo swap it for a link to somewhere else.
21
+ * 2. When the path is lexically **inside the project root** — the normal case, and
22
+ * the only one an attacker controls — the resolved path must stay inside the
23
+ * resolved project root as well: `realpath` resolves every component, so a
24
+ * symlinked *parent* (`docs/ -> /etc`) is caught too, and the containment test
25
+ * runs on the real paths so a project reached through a symlink (macOS
26
+ * `/var` → `/private/var`) is not mistaken for an escape.
27
+ *
28
+ * Legitimate out-of-project docs (`--spec /srv/shared/spec.md`) keep working: they
29
+ * are only symlink-screened, exactly as the pre-existing behaviour but without the
30
+ * link-following hole.
31
+ *
32
+ * A path that does not exist yet is accepted (plan mode drafts new documents):
33
+ * the nearest existing ancestor is resolved and the missing tail is re-joined, so
34
+ * containment is still decided on real paths.
35
+ *
36
+ * The same screen — it is a path rule, not a document rule — also guards the
37
+ * **operational** paths a cloned repository can ship as links just as easily as a
38
+ * document: the harness state, phase reports and progress page (SEC-102), the
39
+ * iteration receipts (SEC-102), the server log (SEC-101) and the update cache
40
+ * (SEC-105). Only the mechanism is reused: a symlink on the final component is
41
+ * always refused, and a project-relative path must resolve inside the project.
42
+ */
43
+ import { type Stats } from "node:fs";
44
+ /**
45
+ * `O_NOFOLLOW` where the platform defines it, `0` elsewhere (Windows). Callers
46
+ * that open a path they have just screened use it to close the check-then-open
47
+ * window: a symlink swapped in between still cannot be followed.
48
+ */
49
+ export declare const NO_FOLLOW: number;
50
+ /** Outcome of {@link checkDocPath}. */
51
+ export type DocPathCheck = {
52
+ ok: true;
53
+ path: string;
54
+ } | {
55
+ ok: false;
56
+ reason: string;
57
+ };
58
+ export interface DocPathOptions {
59
+ /**
60
+ * Project root. When the path is lexically inside it, the *resolved* path must
61
+ * be inside the resolved root too; when the path is outside, only the symlink
62
+ * screen applies (an explicitly configured document must keep working).
63
+ */
64
+ projectPath?: string;
65
+ /** Human label for the document, used in the error message (e.g. `spec doc`). */
66
+ label?: string;
67
+ /** What the caller is about to do, used in the error message (e.g. `write`). */
68
+ action?: string;
69
+ }
70
+ /** True when `child` is strictly under `root` (both must be absolute, resolved paths). */
71
+ export declare function isInside(child: string, root: string): boolean;
72
+ /** `lstat` without treating "does not exist" as a failure. */
73
+ export declare function lstatOrUndefined(path: string): Stats | undefined;
74
+ /**
75
+ * The path with every *existing* component `realpath`ed and the not-yet-existing
76
+ * tail re-joined, so containment is decided on real paths even for a document
77
+ * plan mode is about to create.
78
+ *
79
+ * The final component is not followed *as a link* by this function either: a
80
+ * symlink there is already refused by {@link checkDocPath}, and the callers that
81
+ * pass a resolved path do so only after that check.
82
+ */
83
+ export declare function realpathAllowingMissing(path: string): string;
84
+ /**
85
+ * Decide whether `path` may be read/written as a document (see the module
86
+ * header). Returns the canonical path to use — every existing component
87
+ * resolved, the final component untouched — or the reason it must be refused.
88
+ *
89
+ * On `ok: false` a caller must do *nothing* with the path: no read, no write.
90
+ */
91
+ export declare function checkDocPath(path: string, opts?: DocPathOptions): DocPathCheck;
92
+ /** {@link checkDocPath}, throwing on a refused path (fail-closed for writers). */
93
+ export declare function assertDocPath(path: string, opts?: DocPathOptions): string;
94
+ //# sourceMappingURL=path-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-safety.d.ts","sourceRoot":"","sources":["../../src/util/path-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AACH,OAAO,EAAqD,KAAK,KAAK,EAAE,MAAM,SAAS,CAAC;AAGxF;;;;GAIG;AACH,eAAO,MAAM,SAAS,QAA0E,CAAC;AAEjG,uCAAuC;AACvC,MAAM,MAAM,YAAY,GAAG;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iFAAiF;IACjF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,0FAA0F;AAC1F,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAOhE;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAiB5D;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,YAAY,CAuDlF;AAED,kFAAkF;AAClF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,cAAmB,GAAG,MAAM,CAI7E"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * H-1 — symlink-safe resolution of **document** paths (spec/adr/plan).
3
+ *
4
+ * A repository Muninn reads is attacker-controlled the moment it is not ours: a
5
+ * clone can ship `spec.md -> ~/.aws/credentials`, `adr.md -> /etc/passwd` or a
6
+ * `docs/` directory that points anywhere on the host. Both directions were open:
7
+ *
8
+ * - **read** — `readOptional`/`readFileBounded` followed the link, so the target's
9
+ * content was read and embedded in an agent prompt (an exfiltration channel
10
+ * straight out of the project), and
11
+ * - **write** — `writeDoc` followed it too, so the drafting step *overwrote* the
12
+ * link target (a `~/.aws/credentials` clobbered by a generated `spec.md`).
13
+ *
14
+ * The rule enforced here is deliberately simple and fail-closed:
15
+ *
16
+ * 1. The final path component is `lstat`ed and a **symlink is always refused** —
17
+ * the link is never followed, read or overwritten. This holds for every caller,
18
+ * including the ones whose doc genuinely lives outside the project, because
19
+ * "an explicitly configured path" is a reason to allow the *file*, never a
20
+ * reason to let a repo swap it for a link to somewhere else.
21
+ * 2. When the path is lexically **inside the project root** — the normal case, and
22
+ * the only one an attacker controls — the resolved path must stay inside the
23
+ * resolved project root as well: `realpath` resolves every component, so a
24
+ * symlinked *parent* (`docs/ -> /etc`) is caught too, and the containment test
25
+ * runs on the real paths so a project reached through a symlink (macOS
26
+ * `/var` → `/private/var`) is not mistaken for an escape.
27
+ *
28
+ * Legitimate out-of-project docs (`--spec /srv/shared/spec.md`) keep working: they
29
+ * are only symlink-screened, exactly as the pre-existing behaviour but without the
30
+ * link-following hole.
31
+ *
32
+ * A path that does not exist yet is accepted (plan mode drafts new documents):
33
+ * the nearest existing ancestor is resolved and the missing tail is re-joined, so
34
+ * containment is still decided on real paths.
35
+ *
36
+ * The same screen — it is a path rule, not a document rule — also guards the
37
+ * **operational** paths a cloned repository can ship as links just as easily as a
38
+ * document: the harness state, phase reports and progress page (SEC-102), the
39
+ * iteration receipts (SEC-102), the server log (SEC-101) and the update cache
40
+ * (SEC-105). Only the mechanism is reused: a symlink on the final component is
41
+ * always refused, and a project-relative path must resolve inside the project.
42
+ */
43
+ import { constants as fsConstants, lstatSync, realpathSync } from "node:fs";
44
+ import { basename, dirname, join, resolve, sep } from "node:path";
45
+ /**
46
+ * `O_NOFOLLOW` where the platform defines it, `0` elsewhere (Windows). Callers
47
+ * that open a path they have just screened use it to close the check-then-open
48
+ * window: a symlink swapped in between still cannot be followed.
49
+ */
50
+ export const NO_FOLLOW = typeof fsConstants.O_NOFOLLOW === "number" ? fsConstants.O_NOFOLLOW : 0;
51
+ /** True when `child` is strictly under `root` (both must be absolute, resolved paths). */
52
+ export function isInside(child, root) {
53
+ const base = root.endsWith(sep) ? root : `${root}${sep}`;
54
+ return child.startsWith(base);
55
+ }
56
+ /** `lstat` without treating "does not exist" as a failure. */
57
+ export function lstatOrUndefined(path) {
58
+ try {
59
+ return lstatSync(path);
60
+ }
61
+ catch (err) {
62
+ if (err?.code === "ENOENT")
63
+ return undefined;
64
+ throw err;
65
+ }
66
+ }
67
+ /**
68
+ * The path with every *existing* component `realpath`ed and the not-yet-existing
69
+ * tail re-joined, so containment is decided on real paths even for a document
70
+ * plan mode is about to create.
71
+ *
72
+ * The final component is not followed *as a link* by this function either: a
73
+ * symlink there is already refused by {@link checkDocPath}, and the callers that
74
+ * pass a resolved path do so only after that check.
75
+ */
76
+ export function realpathAllowingMissing(path) {
77
+ const tail = [];
78
+ let current = resolve(path);
79
+ for (;;) {
80
+ try {
81
+ const real = realpathSync(current);
82
+ return tail.length === 0 ? real : join(real, ...tail);
83
+ }
84
+ catch {
85
+ const parent = dirname(current);
86
+ // Walked up to the filesystem root without resolving anything (a mount
87
+ // that cannot be realpath'ed): keep the (bounded) lexical answer rather
88
+ // than looping. Containment then simply fails closed if it is required.
89
+ if (parent === current)
90
+ return join(current, ...tail);
91
+ tail.unshift(basename(current));
92
+ current = parent;
93
+ }
94
+ }
95
+ }
96
+ /**
97
+ * Decide whether `path` may be read/written as a document (see the module
98
+ * header). Returns the canonical path to use — every existing component
99
+ * resolved, the final component untouched — or the reason it must be refused.
100
+ *
101
+ * On `ok: false` a caller must do *nothing* with the path: no read, no write.
102
+ */
103
+ export function checkDocPath(path, opts = {}) {
104
+ const target = resolve(path);
105
+ const label = opts.label ?? "document";
106
+ const action = opts.action ?? "read or write";
107
+ let stat;
108
+ try {
109
+ stat = lstatOrUndefined(target);
110
+ }
111
+ catch (err) {
112
+ return { ok: false, reason: `cannot inspect ${label} ${target}: ${err.message}` };
113
+ }
114
+ if (stat?.isSymbolicLink()) {
115
+ return {
116
+ ok: false,
117
+ reason: `${label} ${target} is a symlink; refusing to ${action} through it ` +
118
+ `(a link shipped by the repository must never reach or clobber its target)`,
119
+ };
120
+ }
121
+ const projectPath = opts.projectPath === undefined ? undefined : resolve(opts.projectPath);
122
+ if (projectPath === undefined)
123
+ return { ok: true, path: realpathAllowingMissing(target) };
124
+ let realProject;
125
+ try {
126
+ realProject = realpathSync(projectPath);
127
+ }
128
+ catch {
129
+ realProject = undefined;
130
+ }
131
+ // Containment is only demanded where it means something: a path that is *not*
132
+ // inside the project was named explicitly by the user (`--spec /srv/…`) and may
133
+ // legitimately live elsewhere. (A sandboxed cycle is the same shape: the docs
134
+ // are read from the primary tree, not from the ephemeral worktree.)
135
+ const insideLexically = (target !== projectPath && isInside(target, projectPath)) ||
136
+ (realProject !== undefined && target !== realProject && isInside(target, realProject));
137
+ if (!insideLexically)
138
+ return { ok: true, path: realpathAllowingMissing(target) };
139
+ if (realProject === undefined) {
140
+ return {
141
+ ok: false,
142
+ reason: `cannot resolve the project root ${projectPath} to contain ${label} ${target}`,
143
+ };
144
+ }
145
+ const realTarget = realpathAllowingMissing(target);
146
+ if (!isInside(realTarget, realProject)) {
147
+ return {
148
+ ok: false,
149
+ reason: `${label} ${target} resolves to ${realTarget}, outside the project root ${realProject}; ` +
150
+ `refusing to ${action} it`,
151
+ };
152
+ }
153
+ return { ok: true, path: realTarget };
154
+ }
155
+ /** {@link checkDocPath}, throwing on a refused path (fail-closed for writers). */
156
+ export function assertDocPath(path, opts = {}) {
157
+ const check = checkDocPath(path, opts);
158
+ if (!check.ok)
159
+ throw new Error(check.reason);
160
+ return check.path;
161
+ }
162
+ //# sourceMappingURL=path-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-safety.js","sourceRoot":"","sources":["../../src/util/path-safety.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Strips ANSI escape sequences, non-printable control characters, and invisible
3
+ * text-spoofing controls — bidi overrides and zero-width joiners/spaces (SEC-001,
4
+ * SEC-307) — to prevent terminal injection, cursor hijacking, Trojan-Source
5
+ * reordering and log poisoning. Legitimate non-ASCII (accents, emoji, CJK) is
6
+ * left untouched.
7
+ */
8
+ export declare function sanitizeTerminalText(input: string): string;
9
+ //# sourceMappingURL=text.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../src/util/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAS1D"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Strips ANSI escape sequences, non-printable control characters, and invisible
3
+ * text-spoofing controls — bidi overrides and zero-width joiners/spaces (SEC-001,
4
+ * SEC-307) — to prevent terminal injection, cursor hijacking, Trojan-Source
5
+ * reordering and log poisoning. Legitimate non-ASCII (accents, emoji, CJK) is
6
+ * left untouched.
7
+ */
8
+ export function sanitizeTerminalText(input) {
9
+ if (typeof input !== "string")
10
+ return "";
11
+ return input
12
+ .replace(/[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g, "")
13
+ .replace(/[\x00-\x08\x0B-\x1F\x7F-\x9F]/g, "")
14
+ // SEC-307: bidi embedding/override/isolate controls (U+202A–U+202E,
15
+ // U+2066–U+2069) and zero-width/bidi-mark characters (U+200B–U+200F) can
16
+ // reorder or hide text in a terminal/log without being visible themselves.
17
+ .replace(/[\u200B-\u200F\u202A-\u202E\u2066-\u2069]/g, "");
18
+ }
19
+ //# sourceMappingURL=text.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"text.js","sourceRoot":"","sources":["../../src/util/text.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,MAAM,UAAU,oBAAoB,CAAC,KAAa;IAChD,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,EAAE,CAAC;IACzC,OAAO,KAAK;SACT,OAAO,CAAC,6EAA6E,EAAE,EAAE,CAAC;SAC1F,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;QAC9C,oEAAoE;QACpE,yEAAyE;QACzE,2EAA2E;SAC1E,OAAO,CAAC,4CAA4C,EAAE,EAAE,CAAC,CAAC;AAC/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,89 @@
1
1
  {
2
2
  "name": "@dahch/muninn",
3
- "version": "0.0.0-stage",
4
- "stub": true,
5
- "description": "Temporary package placeholder for staged publishing"
6
- }
3
+ "version": "0.1.0",
4
+ "description": "Persistent semantic and symbol memory for AI coding agents — SQLite + FTS5 with an MCP server",
5
+ "type": "module",
6
+ "license": "MIT",
7
+ "bin": {
8
+ "muninn": "./dist/cli.js"
9
+ },
10
+ "main": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "exports": {
13
+ ".": {
14
+ "types": "./dist/index.d.ts",
15
+ "import": "./dist/index.js"
16
+ },
17
+ "./db": {
18
+ "types": "./dist/db/client.d.ts",
19
+ "import": "./dist/db/client.js"
20
+ },
21
+ "./service": {
22
+ "types": "./dist/service/index.d.ts",
23
+ "import": "./dist/service/index.js"
24
+ },
25
+ "./indexer": {
26
+ "types": "./dist/indexer/index.d.ts",
27
+ "import": "./dist/indexer/index.js"
28
+ },
29
+ "./mcp": {
30
+ "types": "./dist/mcp/index.d.ts",
31
+ "import": "./dist/mcp/index.js"
32
+ },
33
+ "./contracts": {
34
+ "types": "./dist/contracts/index.d.ts",
35
+ "import": "./dist/contracts/index.js"
36
+ },
37
+ "./util": {
38
+ "types": "./dist/util/text.d.ts",
39
+ "import": "./dist/util/text.js"
40
+ }
41
+ },
42
+ "files": [
43
+ "dist",
44
+ "README.md",
45
+ "LICENSE"
46
+ ],
47
+ "scripts": {
48
+ "dev": "bun run src/cli.ts",
49
+ "build": "tsc -p tsconfig.build.json && cp src/db/schema.sql dist/db/schema.sql && chmod +x dist/cli.js",
50
+ "typecheck": "tsc --noEmit -p tsconfig.json",
51
+ "test": "vitest run",
52
+ "test:watch": "vitest",
53
+ "prepublishOnly": "npm run build && npm run test && npm run typecheck"
54
+ },
55
+ "dependencies": {
56
+ "@modelcontextprotocol/sdk": "^1.30.1",
57
+ "better-sqlite3": "^13.0.3",
58
+ "chalk": "^6.0.0",
59
+ "typescript": "^5.9.0",
60
+ "zod": "^4.4.3"
61
+ },
62
+ "devDependencies": {
63
+ "@types/better-sqlite3": "^9.6.0",
64
+ "@types/node": "^22.0.0",
65
+ "@vitest/coverage-v8": "^5.0.2",
66
+ "vitest": "^5.0.2"
67
+ },
68
+ "repository": {
69
+ "type": "git",
70
+ "url": "https://github.com/dahch/muninn"
71
+ },
72
+ "keywords": [
73
+ "muninn",
74
+ "memory",
75
+ "mcp",
76
+ "sqlite",
77
+ "fts5",
78
+ "ai-agents",
79
+ "code-intelligence",
80
+ "embeddings"
81
+ ],
82
+ "homepage": "https://github.com/dahch/muninn#readme",
83
+ "engines": {
84
+ "node": ">=20.0.0"
85
+ },
86
+ "publishConfig": {
87
+ "access": "public"
88
+ }
89
+ }