@saleem11kh/repomem 0.1.1 → 0.3.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 +212 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +335 -0
- package/dist/cli.js.map +1 -0
- package/dist/config/config.d.ts +24 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +100 -0
- package/dist/config/config.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +75 -0
- package/dist/index.js.map +1 -0
- package/dist/store/file-store.d.ts +83 -0
- package/dist/store/file-store.d.ts.map +1 -0
- package/dist/store/file-store.js +509 -0
- package/dist/store/file-store.js.map +1 -0
- package/dist/store/remote.d.ts +30 -0
- package/dist/store/remote.d.ts.map +1 -0
- package/dist/store/remote.js +118 -0
- package/dist/store/remote.js.map +1 -0
- package/dist/tools/mem-context.d.ts +3 -0
- package/dist/tools/mem-context.d.ts.map +1 -0
- package/dist/tools/mem-context.js +93 -0
- package/dist/tools/mem-context.js.map +1 -0
- package/dist/tools/mem-get.d.ts +3 -0
- package/dist/tools/mem-get.d.ts.map +1 -0
- package/dist/tools/mem-get.js +57 -0
- package/dist/tools/mem-get.js.map +1 -0
- package/dist/tools/mem-handoff.d.ts +3 -0
- package/dist/tools/mem-handoff.d.ts.map +1 -0
- package/dist/tools/mem-handoff.js +72 -0
- package/dist/tools/mem-handoff.js.map +1 -0
- package/dist/tools/mem-prime.d.ts +3 -0
- package/dist/tools/mem-prime.d.ts.map +1 -0
- package/dist/tools/mem-prime.js +48 -0
- package/dist/tools/mem-prime.js.map +1 -0
- package/dist/tools/mem-save.d.ts +5 -0
- package/dist/tools/mem-save.d.ts.map +1 -0
- package/dist/tools/mem-save.js +103 -0
- package/dist/tools/mem-save.js.map +1 -0
- package/dist/tools/mem-search.d.ts +3 -0
- package/dist/tools/mem-search.d.ts.map +1 -0
- package/dist/tools/mem-search.js +50 -0
- package/dist/tools/mem-search.js.map +1 -0
- package/dist/tools/util.d.ts +18 -0
- package/dist/tools/util.d.ts.map +1 -0
- package/dist/tools/util.js +42 -0
- package/dist/tools/util.js.map +1 -0
- package/package.json +25 -4
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memSearch = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
exports.memSearch = {
|
|
7
|
+
name: "mem_search",
|
|
8
|
+
description: "Search across all saved memory (decisions, sessions, patterns, issues), " +
|
|
9
|
+
"ranked by relevance (TF-IDF) and recency. Set linked=true to also search " +
|
|
10
|
+
"linked repos (local paths and remote GitHub repos pulled via `repomem pull`) " +
|
|
11
|
+
"and the workspace declared in repomem.config.json. Returns the top matches " +
|
|
12
|
+
"with a short excerpt each, labelled by source scope.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
type: "object",
|
|
15
|
+
properties: {
|
|
16
|
+
query: { type: "string", description: "Search terms." },
|
|
17
|
+
linked: {
|
|
18
|
+
type: "boolean",
|
|
19
|
+
description: "Also search linked repos and workspace. Default false.",
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
required: ["query"],
|
|
23
|
+
},
|
|
24
|
+
handler(args, projectRoot) {
|
|
25
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
26
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
27
|
+
}
|
|
28
|
+
const query = (0, util_js_1.str)(args.query);
|
|
29
|
+
if (!query)
|
|
30
|
+
return "✖ A search query is required.";
|
|
31
|
+
const includeLinked = args.linked === true;
|
|
32
|
+
const results = includeLinked
|
|
33
|
+
? (0, file_store_js_1.searchAllRepos)(query, projectRoot)
|
|
34
|
+
: (0, file_store_js_1.searchFiles)(query, projectRoot);
|
|
35
|
+
if (results.length === 0) {
|
|
36
|
+
return `No memory found for "${query}".`;
|
|
37
|
+
}
|
|
38
|
+
const lines = [`Found ${results.length} match(es) for "${query}":`, ""];
|
|
39
|
+
for (const r of results) {
|
|
40
|
+
lines.push(`${r.scope} ${r.title} · ${r.file}`);
|
|
41
|
+
lines.push(` ${r.excerpt}`);
|
|
42
|
+
if (r.related.length)
|
|
43
|
+
lines.push(` → related: ${r.related.join(", ")}`);
|
|
44
|
+
lines.push("");
|
|
45
|
+
}
|
|
46
|
+
lines.push('_Expand any entry with mem_get("type/filename")._');
|
|
47
|
+
return lines.join("\n").trimEnd();
|
|
48
|
+
},
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=mem-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-search.js","sourceRoot":"","sources":["../../src/tools/mem-search.ts"],"names":[],"mappings":";;;AAAA,0DAAoF;AACpF,uCAAyC;AAE5B,QAAA,SAAS,GAAY;IAChC,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,0EAA0E;QAC1E,2EAA2E;QAC3E,+EAA+E;QAC/E,6EAA6E;QAC7E,sDAAsD;IACxD,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,eAAe,EAAE;YACvD,MAAM,EAAE;gBACN,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,wDAAwD;aACtE;SACF;QACD,QAAQ,EAAE,CAAC,OAAO,CAAC;KACpB;IACD,OAAO,CAAC,IAAI,EAAE,WAAW;QACvB,IAAI,CAAC,IAAA,6BAAa,EAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,kEAAkE,CAAC;QAC5E,CAAC;QACD,MAAM,KAAK,GAAG,IAAA,aAAG,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,OAAO,+BAA+B,CAAC;QAEnD,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;QAC3C,MAAM,OAAO,GAAG,aAAa;YAC3B,CAAC,CAAC,IAAA,8BAAc,EAAC,KAAK,EAAE,WAAW,CAAC;YACpC,CAAC,CAAC,IAAA,2BAAW,EAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAEpC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,wBAAwB,KAAK,IAAI,CAAC;QAC3C,CAAC;QAED,MAAM,KAAK,GAAG,CAAC,SAAS,OAAO,CAAC,MAAM,mBAAmB,KAAK,IAAI,EAAE,EAAE,CAAC,CAAC;QACxE,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC;YAC9B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM;gBAAE,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC1E,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjB,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAChE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Shared helpers for repomem MCP tools. */
|
|
2
|
+
export interface ToolDef {
|
|
3
|
+
name: string;
|
|
4
|
+
description: string;
|
|
5
|
+
inputSchema: Record<string, unknown>;
|
|
6
|
+
handler: (args: Record<string, unknown>, projectRoot: string) => string;
|
|
7
|
+
}
|
|
8
|
+
/** YYYY-MM-DD in local time. */
|
|
9
|
+
export declare function today(): string;
|
|
10
|
+
/** ISO-ish local timestamp for in-file headings. */
|
|
11
|
+
export declare function timestamp(): string;
|
|
12
|
+
/** Turn a title into a filesystem-safe kebab slug. */
|
|
13
|
+
export declare function slugify(title: string): string;
|
|
14
|
+
/** Coerce an unknown arg into a trimmed string (empty when absent). */
|
|
15
|
+
export declare function str(v: unknown): string;
|
|
16
|
+
/** Coerce an unknown arg into a string array. */
|
|
17
|
+
export declare function strArray(v: unknown): string[];
|
|
18
|
+
//# sourceMappingURL=util.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../src/tools/util.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,OAAO,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,MAAM,KAAK,MAAM,CAAC;CACzE;AAED,gCAAgC;AAChC,wBAAgB,KAAK,IAAI,MAAM,CAI9B;AAED,oDAAoD;AACpD,wBAAgB,SAAS,IAAI,MAAM,CAIlC;AAED,sDAAsD;AACtD,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,uEAAuE;AACvE,wBAAgB,GAAG,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,CAEtC;AAED,iDAAiD;AACjD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,OAAO,GAAG,MAAM,EAAE,CAM7C"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/** Shared helpers for repomem MCP tools. */
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.today = today;
|
|
5
|
+
exports.timestamp = timestamp;
|
|
6
|
+
exports.slugify = slugify;
|
|
7
|
+
exports.str = str;
|
|
8
|
+
exports.strArray = strArray;
|
|
9
|
+
/** YYYY-MM-DD in local time. */
|
|
10
|
+
function today() {
|
|
11
|
+
const d = new Date();
|
|
12
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
13
|
+
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())}`;
|
|
14
|
+
}
|
|
15
|
+
/** ISO-ish local timestamp for in-file headings. */
|
|
16
|
+
function timestamp() {
|
|
17
|
+
const d = new Date();
|
|
18
|
+
const pad = (n) => String(n).padStart(2, "0");
|
|
19
|
+
return `${today()} ${pad(d.getHours())}:${pad(d.getMinutes())}`;
|
|
20
|
+
}
|
|
21
|
+
/** Turn a title into a filesystem-safe kebab slug. */
|
|
22
|
+
function slugify(title) {
|
|
23
|
+
return title
|
|
24
|
+
.toLowerCase()
|
|
25
|
+
.replace(/[^a-z0-9]+/g, "-")
|
|
26
|
+
.replace(/^-+|-+$/g, "")
|
|
27
|
+
.slice(0, 60) || "untitled";
|
|
28
|
+
}
|
|
29
|
+
/** Coerce an unknown arg into a trimmed string (empty when absent). */
|
|
30
|
+
function str(v) {
|
|
31
|
+
return typeof v === "string" ? v.trim() : "";
|
|
32
|
+
}
|
|
33
|
+
/** Coerce an unknown arg into a string array. */
|
|
34
|
+
function strArray(v) {
|
|
35
|
+
if (Array.isArray(v))
|
|
36
|
+
return v.map((x) => String(x).trim()).filter(Boolean);
|
|
37
|
+
if (typeof v === "string" && v.trim()) {
|
|
38
|
+
return v.split(",").map((x) => x.trim()).filter(Boolean);
|
|
39
|
+
}
|
|
40
|
+
return [];
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=util.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../src/tools/util.ts"],"names":[],"mappings":";AAAA,4CAA4C;;AAU5C,sBAIC;AAGD,8BAIC;AAGD,0BAMC;AAGD,kBAEC;AAGD,4BAMC;AAnCD,gCAAgC;AAChC,SAAgB,KAAK;IACnB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;AAC3E,CAAC;AAED,oDAAoD;AACpD,SAAgB,SAAS;IACvB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,EAAE,CAAC;AAClE,CAAC;AAED,sDAAsD;AACtD,SAAgB,OAAO,CAAC,KAAa;IACnC,OAAO,KAAK;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,UAAU,CAAC;AAChC,CAAC;AAED,uEAAuE;AACvE,SAAgB,GAAG,CAAC,CAAU;IAC5B,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC/C,CAAC;AAED,iDAAiD;AACjD,SAAgB,QAAQ,CAAC,CAAU;IACjC,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC5E,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACtC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,EAAE,CAAC;AACZ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,21 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@saleem11kh/repomem",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "Git-native memory for AI coding agents. .repomem/ commits with your code, clones with your team, works with Claude Code, Cursor, Gemini CLI and more.",
|
|
5
|
-
"main": "index.js",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"bin": {
|
|
8
|
+
"repomem": "dist/cli.js"
|
|
9
|
+
},
|
|
10
|
+
"files": [
|
|
11
|
+
"dist"
|
|
12
|
+
],
|
|
6
13
|
"scripts": {
|
|
7
|
-
"
|
|
14
|
+
"build": "rimraf dist && tsc",
|
|
15
|
+
"dev": "ts-node src/cli.ts",
|
|
16
|
+
"start": "node dist/cli.js",
|
|
17
|
+
"test": "npm run build && node --test",
|
|
18
|
+
"prepare": "npm run build"
|
|
8
19
|
},
|
|
9
20
|
"keywords": [
|
|
10
21
|
"mcp",
|
|
@@ -33,5 +44,15 @@
|
|
|
33
44
|
"type": "commonjs",
|
|
34
45
|
"engines": {
|
|
35
46
|
"node": ">=18.0.0"
|
|
47
|
+
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
50
|
+
"zod": "^4.4.3"
|
|
51
|
+
},
|
|
52
|
+
"devDependencies": {
|
|
53
|
+
"@types/node": "^26.0.1",
|
|
54
|
+
"rimraf": "^6.1.3",
|
|
55
|
+
"ts-node": "^10.9.2",
|
|
56
|
+
"typescript": "^6.0.3"
|
|
36
57
|
}
|
|
37
|
-
}
|
|
58
|
+
}
|