@repomem/memory 0.0.0-stage → 0.1.1
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 +208 -2
- package/assets/kiro/hooks/repomem-validate.sh +10 -0
- package/assets/kiro/skills/repomem-distill/SKILL.md +56 -0
- package/assets/kiro/skills/repomem-memory/SKILL.md +41 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +194 -0
- package/dist/cli.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +43 -0
- package/dist/index.js.map +1 -0
- package/dist/schema.d.ts +97 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +86 -0
- package/dist/schema.js.map +1 -0
- package/dist/search.d.ts +55 -0
- package/dist/search.d.ts.map +1 -0
- package/dist/search.js +160 -0
- package/dist/search.js.map +1 -0
- package/dist/server.d.ts +26 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +176 -0
- package/dist/server.js.map +1 -0
- package/dist/setup/spec.d.ts +11 -0
- package/dist/setup/spec.d.ts.map +1 -0
- package/dist/setup/spec.js +44 -0
- package/dist/setup/spec.js.map +1 -0
- package/dist/store.d.ts +119 -0
- package/dist/store.d.ts.map +1 -0
- package/dist/store.js +350 -0
- package/dist/store.js.map +1 -0
- package/dist/validate.d.ts +42 -0
- package/dist/validate.d.ts.map +1 -0
- package/dist/validate.js +164 -0
- package/dist/validate.js.map +1 -0
- package/package.json +67 -4
- package/templates/context.md +25 -0
- package/templates/convention.md +16 -0
- package/templates/decision.md +20 -0
- package/templates/learning.md +16 -0
- package/templates/limitation.md +16 -0
package/dist/validate.js
ADDED
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* validate.ts — pure validation logic for `repomem validate`.
|
|
3
|
+
*
|
|
4
|
+
* Checks performed:
|
|
5
|
+
* 1. Every `.md` entry under the memory root has valid frontmatter.
|
|
6
|
+
* 2. Every `supersedes` reference points at an existing entry id.
|
|
7
|
+
* 3. No obvious secrets (API keys, tokens, private keys) appear in any entry.
|
|
8
|
+
*
|
|
9
|
+
* This module is I/O-light and returns a structured report; the CLI decides
|
|
10
|
+
* the process exit code. Nothing here writes to stdout.
|
|
11
|
+
*/
|
|
12
|
+
import { promises as fs } from "node:fs";
|
|
13
|
+
import path from "node:path";
|
|
14
|
+
import matter from "gray-matter";
|
|
15
|
+
import { frontmatterSchema, TYPE_DIRS, ENTRY_TYPES, } from "./schema.js";
|
|
16
|
+
/**
|
|
17
|
+
* High-confidence secret patterns. Tuned to minimize false positives; this is
|
|
18
|
+
* a safety net, not a replacement for a dedicated secret scanner.
|
|
19
|
+
*/
|
|
20
|
+
export const SECRET_PATTERNS = [
|
|
21
|
+
{ rule: "aws-access-key-id", re: /\bAKIA[0-9A-Z]{16}\b/ },
|
|
22
|
+
{ rule: "github-token", re: /\bgh[pousr]_[A-Za-z0-9]{36,}\b/ },
|
|
23
|
+
{ rule: "slack-token", re: /\bxox[baprs]-[A-Za-z0-9-]{10,}\b/ },
|
|
24
|
+
{ rule: "google-api-key", re: /\bAIza[0-9A-Za-z_\-]{35}\b/ },
|
|
25
|
+
{ rule: "private-key-block", re: /-----BEGIN (?:RSA |EC |OPENSSH |DSA |PGP )?PRIVATE KEY-----/ },
|
|
26
|
+
{
|
|
27
|
+
rule: "generic-secret-assignment",
|
|
28
|
+
// key-like name = long opaque value (>= 16 chars, no spaces)
|
|
29
|
+
re: /\b(?:api[_-]?key|secret|token|passwd|password|access[_-]?key)\b\s*[:=]\s*["']?[A-Za-z0-9+/_\-]{16,}["']?/i,
|
|
30
|
+
},
|
|
31
|
+
];
|
|
32
|
+
/** Scan a block of text for secrets, returning one finding per match line. */
|
|
33
|
+
export function scanSecrets(text, file) {
|
|
34
|
+
const findings = [];
|
|
35
|
+
const lines = text.split(/\r?\n/);
|
|
36
|
+
lines.forEach((lineText, idx) => {
|
|
37
|
+
for (const { rule, re } of SECRET_PATTERNS) {
|
|
38
|
+
if (re.test(lineText)) {
|
|
39
|
+
findings.push({
|
|
40
|
+
severity: "error",
|
|
41
|
+
file,
|
|
42
|
+
line: idx + 1,
|
|
43
|
+
rule: `secret:${rule}`,
|
|
44
|
+
message: `possible secret detected (${rule})`,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
return findings;
|
|
50
|
+
}
|
|
51
|
+
/** Collect every .md file under the memory root, grouped by its folder type. */
|
|
52
|
+
async function collectFiles(root) {
|
|
53
|
+
const out = [];
|
|
54
|
+
for (const type of ENTRY_TYPES) {
|
|
55
|
+
const dir = path.join(root, TYPE_DIRS[type]);
|
|
56
|
+
let names;
|
|
57
|
+
try {
|
|
58
|
+
names = await fs.readdir(dir);
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
for (const name of names) {
|
|
64
|
+
if (name.endsWith(".md"))
|
|
65
|
+
out.push({ file: path.join(dir, name), type });
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return out;
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* Validate every entry under `root`. Returns a structured report. `ok` is true
|
|
72
|
+
* only when there are no error-severity findings.
|
|
73
|
+
*/
|
|
74
|
+
export async function validateRoot(root) {
|
|
75
|
+
const findings = [];
|
|
76
|
+
const files = await collectFiles(root);
|
|
77
|
+
const validEntries = [];
|
|
78
|
+
const knownIds = new Set();
|
|
79
|
+
for (const { file, type } of files) {
|
|
80
|
+
const id = path.basename(file, ".md");
|
|
81
|
+
let raw;
|
|
82
|
+
try {
|
|
83
|
+
raw = await fs.readFile(file, "utf8");
|
|
84
|
+
}
|
|
85
|
+
catch (err) {
|
|
86
|
+
findings.push({
|
|
87
|
+
severity: "error",
|
|
88
|
+
file,
|
|
89
|
+
rule: "io",
|
|
90
|
+
message: `could not read file: ${err.message}`,
|
|
91
|
+
});
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
// Secret scan runs over the whole file regardless of frontmatter validity.
|
|
95
|
+
findings.push(...scanSecrets(raw, file));
|
|
96
|
+
let parsed;
|
|
97
|
+
try {
|
|
98
|
+
parsed = matter(raw);
|
|
99
|
+
}
|
|
100
|
+
catch (err) {
|
|
101
|
+
findings.push({
|
|
102
|
+
severity: "error",
|
|
103
|
+
file,
|
|
104
|
+
rule: "frontmatter",
|
|
105
|
+
message: `unparseable frontmatter: ${err.message}`,
|
|
106
|
+
});
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
const result = frontmatterSchema.safeParse(parsed.data);
|
|
110
|
+
if (!result.success) {
|
|
111
|
+
for (const issue of result.error.issues) {
|
|
112
|
+
findings.push({
|
|
113
|
+
severity: "error",
|
|
114
|
+
file,
|
|
115
|
+
rule: "frontmatter",
|
|
116
|
+
message: `${issue.path.join(".") || "(root)"}: ${issue.message}`,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
if (result.data.type !== type) {
|
|
122
|
+
findings.push({
|
|
123
|
+
severity: "error",
|
|
124
|
+
file,
|
|
125
|
+
rule: "type-folder-mismatch",
|
|
126
|
+
message: `declared type "${result.data.type}" does not match folder "${TYPE_DIRS[type]}"`,
|
|
127
|
+
});
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
knownIds.add(id);
|
|
131
|
+
validEntries.push({ file, id, type, data: result.data, raw });
|
|
132
|
+
}
|
|
133
|
+
// supersedes references must resolve to a known id.
|
|
134
|
+
for (const entry of validEntries) {
|
|
135
|
+
const supersedes = entry.data.supersedes;
|
|
136
|
+
if (supersedes && !knownIds.has(supersedes)) {
|
|
137
|
+
findings.push({
|
|
138
|
+
severity: "error",
|
|
139
|
+
file: entry.file,
|
|
140
|
+
rule: "dangling-supersedes",
|
|
141
|
+
message: `supersedes "${supersedes}" does not match any existing entry id`,
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
const ok = !findings.some((f) => f.severity === "error");
|
|
146
|
+
return { findings, checked: files.length, ok };
|
|
147
|
+
}
|
|
148
|
+
/** Format a report as human-readable lines (for stderr/stdout in the CLI). */
|
|
149
|
+
export function formatReport(report, root) {
|
|
150
|
+
const lines = [];
|
|
151
|
+
lines.push(`Validated ${report.checked} entr${report.checked === 1 ? "y" : "ies"} under ${root}`);
|
|
152
|
+
if (report.findings.length === 0) {
|
|
153
|
+
lines.push("No issues found.");
|
|
154
|
+
return lines.join("\n");
|
|
155
|
+
}
|
|
156
|
+
for (const f of report.findings) {
|
|
157
|
+
const where = f.line ? `${f.file}:${f.line}` : f.file;
|
|
158
|
+
lines.push(` [${f.severity}] ${where} (${f.rule}): ${f.message}`);
|
|
159
|
+
}
|
|
160
|
+
const errors = report.findings.filter((f) => f.severity === "error").length;
|
|
161
|
+
lines.push(`${errors} error(s), ${report.findings.length - errors} warning(s).`);
|
|
162
|
+
return lines.join("\n");
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validate.js","sourceRoot":"","sources":["../src/validate.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,69 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@repomem/memory",
|
|
3
|
-
"version": "0.
|
|
4
|
-
"
|
|
5
|
-
"
|
|
6
|
-
|
|
3
|
+
"version": "0.1.1",
|
|
4
|
+
"description": "Your repo's memory, available to every AI tool your team uses. A local MCP server that turns a memory/ folder into searchable shared context.",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"author": "Nicolás Rickert",
|
|
7
|
+
"type": "module",
|
|
8
|
+
"engines": {
|
|
9
|
+
"node": ">=22"
|
|
10
|
+
},
|
|
11
|
+
"bin": {
|
|
12
|
+
"repomem-memory": "dist/cli.js"
|
|
13
|
+
},
|
|
14
|
+
"main": "dist/index.js",
|
|
15
|
+
"exports": {
|
|
16
|
+
".": "./dist/index.js",
|
|
17
|
+
"./setup": "./dist/setup/spec.js"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist",
|
|
21
|
+
"templates",
|
|
22
|
+
"assets",
|
|
23
|
+
"README.md",
|
|
24
|
+
"LICENSE"
|
|
25
|
+
],
|
|
26
|
+
"publishConfig": {
|
|
27
|
+
"access": "public"
|
|
28
|
+
},
|
|
29
|
+
"repository": {
|
|
30
|
+
"type": "git",
|
|
31
|
+
"url": "git+https://github.com/nicorickert/repomem.git",
|
|
32
|
+
"directory": "packages/memory"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/nicorickert/repomem/tree/main/packages/memory#readme",
|
|
35
|
+
"bugs": {
|
|
36
|
+
"url": "https://github.com/nicorickert/repomem/issues"
|
|
37
|
+
},
|
|
38
|
+
"keywords": [
|
|
39
|
+
"repomem",
|
|
40
|
+
"mcp",
|
|
41
|
+
"memory",
|
|
42
|
+
"ai",
|
|
43
|
+
"context",
|
|
44
|
+
"model-context-protocol"
|
|
45
|
+
],
|
|
46
|
+
"scripts": {
|
|
47
|
+
"build": "tsc",
|
|
48
|
+
"clean": "rm -rf dist",
|
|
49
|
+
"start": "node dist/cli.js serve",
|
|
50
|
+
"test": "vitest run",
|
|
51
|
+
"test:watch": "vitest",
|
|
52
|
+
"typecheck": "tsc --noEmit"
|
|
53
|
+
},
|
|
54
|
+
"dependencies": {
|
|
55
|
+
"@modelcontextprotocol/sdk": "^1.32.0",
|
|
56
|
+
"@repomem/core": "^0.1.0",
|
|
57
|
+
"fast-glob": "^3.3.2",
|
|
58
|
+
"gray-matter": "^4.0.3",
|
|
59
|
+
"minisearch": "^7.1.0",
|
|
60
|
+
"picomatch": "^4.0.2",
|
|
61
|
+
"zod": "^4.6.5"
|
|
62
|
+
},
|
|
63
|
+
"devDependencies": {
|
|
64
|
+
"@types/node": "^22.0.0",
|
|
65
|
+
"@types/picomatch": "^3.0.1",
|
|
66
|
+
"typescript": "^5.6.0",
|
|
67
|
+
"vitest": "^4.1.11"
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: context
|
|
3
|
+
title: Short context title
|
|
4
|
+
status: draft
|
|
5
|
+
date: 2026-01-01
|
|
6
|
+
scope: project
|
|
7
|
+
tags: []
|
|
8
|
+
related_paths: []
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## What this is
|
|
12
|
+
|
|
13
|
+
The project or module this entry describes, in a sentence or two.
|
|
14
|
+
|
|
15
|
+
## Why it exists
|
|
16
|
+
|
|
17
|
+
The purpose, the problem it solves, and who it serves.
|
|
18
|
+
|
|
19
|
+
## How it works
|
|
20
|
+
|
|
21
|
+
The shape of the thing: main components, flows, and how they fit together.
|
|
22
|
+
|
|
23
|
+
## Key constraints
|
|
24
|
+
|
|
25
|
+
Boundaries, assumptions, and things to keep in mind when working here.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: convention
|
|
3
|
+
title: Short convention title
|
|
4
|
+
status: draft
|
|
5
|
+
date: 2026-01-01
|
|
6
|
+
tags: []
|
|
7
|
+
related_paths: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Rule
|
|
11
|
+
|
|
12
|
+
State the convention as a clear, actionable rule.
|
|
13
|
+
|
|
14
|
+
## Rationale
|
|
15
|
+
|
|
16
|
+
Why this convention exists and what it prevents.
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: decision
|
|
3
|
+
title: Short decision title
|
|
4
|
+
status: draft
|
|
5
|
+
date: 2026-01-01
|
|
6
|
+
tags: []
|
|
7
|
+
related_paths: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Context
|
|
11
|
+
|
|
12
|
+
What problem or situation prompted this decision?
|
|
13
|
+
|
|
14
|
+
## Decision
|
|
15
|
+
|
|
16
|
+
What did we decide, stated plainly?
|
|
17
|
+
|
|
18
|
+
## Consequences
|
|
19
|
+
|
|
20
|
+
What follows from this — tradeoffs, follow-ups, things to watch.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: learning
|
|
3
|
+
title: Short learning title
|
|
4
|
+
status: draft
|
|
5
|
+
date: 2026-01-01
|
|
6
|
+
tags: []
|
|
7
|
+
related_paths: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## What happened
|
|
11
|
+
|
|
12
|
+
The situation and what surprised us.
|
|
13
|
+
|
|
14
|
+
## Takeaway
|
|
15
|
+
|
|
16
|
+
The durable lesson worth remembering.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
---
|
|
2
|
+
type: limitation
|
|
3
|
+
title: Short limitation title
|
|
4
|
+
status: draft
|
|
5
|
+
date: 2026-01-01
|
|
6
|
+
tags: []
|
|
7
|
+
related_paths: []
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
## Limitation
|
|
11
|
+
|
|
12
|
+
What the system cannot (currently) do, or where it breaks down.
|
|
13
|
+
|
|
14
|
+
## Impact / Workaround
|
|
15
|
+
|
|
16
|
+
Who it affects and how to work around it, if at all.
|