@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,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
exports.parseRemote = parseRemote;
|
|
37
|
+
exports.remoteSlug = remoteSlug;
|
|
38
|
+
exports.fetchRemoteRepomem = fetchRemoteRepomem;
|
|
39
|
+
const fs = __importStar(require("fs"));
|
|
40
|
+
const path = __importStar(require("path"));
|
|
41
|
+
/**
|
|
42
|
+
* Parse a `linked` entry into a RemoteRef, or return null when it is a local
|
|
43
|
+
* path (the existing behaviour). Recognised remote forms:
|
|
44
|
+
* github:owner/repo
|
|
45
|
+
* github:owner/repo#ref
|
|
46
|
+
* https://github.com/owner/repo
|
|
47
|
+
* https://github.com/owner/repo/tree/ref
|
|
48
|
+
* git@github.com:owner/repo.git
|
|
49
|
+
*/
|
|
50
|
+
function parseRemote(spec) {
|
|
51
|
+
const s = spec.trim();
|
|
52
|
+
// github:owner/repo[#ref]
|
|
53
|
+
let m = s.match(/^github:([^/\s]+)\/([^#\s]+?)(?:#(.+))?$/i);
|
|
54
|
+
if (m)
|
|
55
|
+
return ref(m[1], m[2], m[3]);
|
|
56
|
+
// https://github.com/owner/repo[/tree/ref][...]
|
|
57
|
+
m = s.match(/^https?:\/\/github\.com\/([^/\s]+)\/([^/\s#]+?)(?:\.git)?(?:\/tree\/([^/\s#]+))?(?:[/#?].*)?$/i);
|
|
58
|
+
if (m)
|
|
59
|
+
return ref(m[1], m[2], m[3]);
|
|
60
|
+
// git@github.com:owner/repo.git
|
|
61
|
+
m = s.match(/^git@github\.com:([^/\s]+)\/([^/\s#]+?)(?:\.git)?$/i);
|
|
62
|
+
if (m)
|
|
63
|
+
return ref(m[1], m[2], undefined);
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
function ref(owner, name, r) {
|
|
67
|
+
return { owner, name: name.replace(/\.git$/i, ""), ref: r && r.trim() ? r.trim() : "HEAD" };
|
|
68
|
+
}
|
|
69
|
+
/** A filesystem-safe cache directory name for a remote. */
|
|
70
|
+
function remoteSlug(r) {
|
|
71
|
+
const raw = `${r.owner}-${r.name}${r.ref === "HEAD" ? "" : "-" + r.ref}`;
|
|
72
|
+
return raw.replace(/[^a-zA-Z0-9._-]+/g, "-");
|
|
73
|
+
}
|
|
74
|
+
const MEMORY_DIR_RE = /^\.repomem\/(decisions|sessions|patterns|issues)\/.+\.md$/;
|
|
75
|
+
/**
|
|
76
|
+
* Fetch a remote repo's .repomem/ memory files into `destRepomemDir` (which
|
|
77
|
+
* should be the `.repomem` directory inside a cache root). Returns the number
|
|
78
|
+
* of files written. Uses the GitHub API and honours a token for private repos
|
|
79
|
+
* and higher rate limits.
|
|
80
|
+
*/
|
|
81
|
+
async function fetchRemoteRepomem(r, destRepomemDir, token) {
|
|
82
|
+
const headers = {
|
|
83
|
+
Accept: "application/vnd.github+json",
|
|
84
|
+
"User-Agent": "repomem",
|
|
85
|
+
"X-GitHub-Api-Version": "2022-11-28",
|
|
86
|
+
};
|
|
87
|
+
if (token)
|
|
88
|
+
headers.Authorization = `Bearer ${token}`;
|
|
89
|
+
const treeUrl = `https://api.github.com/repos/${r.owner}/${r.name}/git/trees/${encodeURIComponent(r.ref)}?recursive=1`;
|
|
90
|
+
const treeRes = await fetch(treeUrl, { headers });
|
|
91
|
+
if (!treeRes.ok) {
|
|
92
|
+
throw new Error(`GitHub API ${treeRes.status} for ${r.owner}/${r.name}@${r.ref}` +
|
|
93
|
+
(treeRes.status === 404
|
|
94
|
+
? " — repo/ref not found (or private without a token)."
|
|
95
|
+
: treeRes.status === 403
|
|
96
|
+
? " — rate limited; set GITHUB_TOKEN."
|
|
97
|
+
: ""));
|
|
98
|
+
}
|
|
99
|
+
const tree = (await treeRes.json());
|
|
100
|
+
const entries = (tree.tree ?? []).filter((e) => e.type === "blob" && MEMORY_DIR_RE.test(e.path));
|
|
101
|
+
let written = 0;
|
|
102
|
+
for (const entry of entries) {
|
|
103
|
+
const blobRes = await fetch(`https://api.github.com/repos/${r.owner}/${r.name}/git/blobs/${entry.sha}`, { headers });
|
|
104
|
+
if (!blobRes.ok)
|
|
105
|
+
continue;
|
|
106
|
+
const blob = (await blobRes.json());
|
|
107
|
+
const content = blob.encoding === "base64" && blob.content
|
|
108
|
+
? Buffer.from(blob.content, "base64").toString("utf8")
|
|
109
|
+
: blob.content ?? "";
|
|
110
|
+
const rel = entry.path.slice(".repomem/".length);
|
|
111
|
+
const dest = path.join(destRepomemDir, rel);
|
|
112
|
+
fs.mkdirSync(path.dirname(dest), { recursive: true });
|
|
113
|
+
fs.writeFileSync(dest, content, "utf8");
|
|
114
|
+
written++;
|
|
115
|
+
}
|
|
116
|
+
return written;
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=remote.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote.js","sourceRoot":"","sources":["../../src/store/remote.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-context.d.ts","sourceRoot":"","sources":["../../src/tools/mem-context.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6BpC,eAAO,MAAM,UAAU,EAAE,OA2ExB,CAAC"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memContext = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
const config_js_1 = require("../config/config.js");
|
|
6
|
+
/** Strip YAML front matter for cleaner inlining. */
|
|
7
|
+
function body(raw) {
|
|
8
|
+
if (raw.startsWith("---")) {
|
|
9
|
+
const end = raw.indexOf("\n---", 3);
|
|
10
|
+
if (end !== -1) {
|
|
11
|
+
const after = raw.indexOf("\n", end + 1);
|
|
12
|
+
return after !== -1 ? raw.slice(after + 1).trim() : "";
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
return raw.trim();
|
|
16
|
+
}
|
|
17
|
+
function firstHeading(raw, fallback) {
|
|
18
|
+
const m = raw.match(/^#\s+(.+)$/m);
|
|
19
|
+
return m ? m[1].trim() : fallback;
|
|
20
|
+
}
|
|
21
|
+
function readNewest(type, projectRoot, limit) {
|
|
22
|
+
return (0, file_store_js_1.listFiles)(type, projectRoot)
|
|
23
|
+
.slice(0, limit)
|
|
24
|
+
.map((filename) => ({ filename, raw: (0, file_store_js_1.readFile)(type, filename, projectRoot) ?? "" }));
|
|
25
|
+
}
|
|
26
|
+
exports.memContext = {
|
|
27
|
+
name: "mem_context",
|
|
28
|
+
description: "Assemble a full project context packet at the start of a session: the latest " +
|
|
29
|
+
"session notes, all patterns, open issues, the 5 most recent decisions, and " +
|
|
30
|
+
"workspace context. Call this first so you don't have to re-explain the project. " +
|
|
31
|
+
"Set brief=true for a one-paragraph summary.",
|
|
32
|
+
inputSchema: {
|
|
33
|
+
type: "object",
|
|
34
|
+
properties: {
|
|
35
|
+
brief: {
|
|
36
|
+
type: "boolean",
|
|
37
|
+
description: "Return a compact one-paragraph summary instead of the full packet.",
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
},
|
|
41
|
+
handler(args, projectRoot) {
|
|
42
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
43
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
44
|
+
}
|
|
45
|
+
const config = (0, config_js_1.loadConfig)(projectRoot);
|
|
46
|
+
const c = (0, file_store_js_1.counts)(projectRoot);
|
|
47
|
+
if (args.brief === true) {
|
|
48
|
+
const latestSession = readNewest("sessions", projectRoot, 1)[0];
|
|
49
|
+
const last = latestSession
|
|
50
|
+
? firstHeading(latestSession.raw, latestSession.filename)
|
|
51
|
+
: "no sessions yet";
|
|
52
|
+
return (`${config.project}: ${c.decisions} decisions, ${c.patterns} patterns, ` +
|
|
53
|
+
`${c.issues} issues, ${c.sessions} sessions. Last session: ${last}.`);
|
|
54
|
+
}
|
|
55
|
+
// Full packet, but token-lean: the latest session is inlined (it holds the
|
|
56
|
+
// "what's next"); everything else is a one-line summary the agent can expand
|
|
57
|
+
// on demand with mem_get. This keeps session-start context small.
|
|
58
|
+
const out = [];
|
|
59
|
+
out.push(`# Context for ${config.project}`, "");
|
|
60
|
+
// Latest session — inlined in full.
|
|
61
|
+
const session = readNewest("sessions", projectRoot, 1)[0];
|
|
62
|
+
out.push("## Last session");
|
|
63
|
+
out.push(session ? `### ${session.filename}\n\n${body(session.raw)}` : "_none yet_");
|
|
64
|
+
out.push("");
|
|
65
|
+
const summaryList = (type, heading, limit) => {
|
|
66
|
+
out.push(`## ${heading}`);
|
|
67
|
+
const entries = readNewest(type, projectRoot, limit);
|
|
68
|
+
if (entries.length === 0)
|
|
69
|
+
out.push("_none yet_");
|
|
70
|
+
for (const e of entries) {
|
|
71
|
+
out.push(`- ${firstHeading(e.raw, e.filename)} — ${(0, file_store_js_1.summaryOf)(e.raw, e.filename)} (${type}/${e.filename})`);
|
|
72
|
+
}
|
|
73
|
+
out.push("");
|
|
74
|
+
};
|
|
75
|
+
summaryList("decisions", "Recent decisions", 5);
|
|
76
|
+
summaryList("patterns", "Patterns", 100);
|
|
77
|
+
summaryList("issues", "Known issues", 100);
|
|
78
|
+
out.push("_Expand any entry with mem_get(\"type/filename\"). Search with mem_search._");
|
|
79
|
+
// Workspace pointer.
|
|
80
|
+
if (config.workspace || config.linked.length) {
|
|
81
|
+
out.push("");
|
|
82
|
+
out.push("## Linked context");
|
|
83
|
+
if (config.workspace)
|
|
84
|
+
out.push(`- workspace: ${config.workspace}`);
|
|
85
|
+
for (const l of config.linked) {
|
|
86
|
+
out.push(`- ${l.repo}${l.relation ? ` (${l.relation})` : ""}`);
|
|
87
|
+
}
|
|
88
|
+
out.push("_Use mem_search with linked=true to search these._");
|
|
89
|
+
}
|
|
90
|
+
return out.join("\n").trim();
|
|
91
|
+
},
|
|
92
|
+
};
|
|
93
|
+
//# sourceMappingURL=mem-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-context.js","sourceRoot":"","sources":["../../src/tools/mem-context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-get.d.ts","sourceRoot":"","sources":["../../src/tools/mem-get.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AAkBzC,eAAO,MAAM,MAAM,EAAE,OAsCpB,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memGet = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
/** Resolve a "type/filename", bare filename, or [[slug]] to a concrete entry. */
|
|
7
|
+
function resolve(ref, projectRoot) {
|
|
8
|
+
const cleaned = ref.replace(/^\[\[|\]\]$/g, "").trim();
|
|
9
|
+
if (cleaned.includes("/")) {
|
|
10
|
+
const [type, filename] = cleaned.split("/", 2);
|
|
11
|
+
if (file_store_js_1.MEMORY_TYPES.includes(type) && filename) {
|
|
12
|
+
return { type: type, filename };
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
const hit = (0, file_store_js_1.resolveLink)(cleaned, projectRoot);
|
|
16
|
+
return hit ? { type: hit.type, filename: hit.filename } : null;
|
|
17
|
+
}
|
|
18
|
+
exports.memGet = {
|
|
19
|
+
name: "mem_get",
|
|
20
|
+
description: "Fetch the full text of a single memory entry by its file (e.g. " +
|
|
21
|
+
"'decisions/2026-06-01-use-postgres.md'), bare filename, or [[wikilink]] slug. " +
|
|
22
|
+
"Use after mem_context or mem_search to expand only the entries you actually " +
|
|
23
|
+
"need — this keeps context small.",
|
|
24
|
+
inputSchema: {
|
|
25
|
+
type: "object",
|
|
26
|
+
properties: {
|
|
27
|
+
file: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "type/filename, a bare filename, or a [[wikilink]] slug.",
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
required: ["file"],
|
|
33
|
+
},
|
|
34
|
+
handler(args, projectRoot) {
|
|
35
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
36
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
37
|
+
}
|
|
38
|
+
const ref = (0, util_js_1.str)(args.file);
|
|
39
|
+
if (!ref)
|
|
40
|
+
return "✖ A file reference is required.";
|
|
41
|
+
const target = resolve(ref, projectRoot);
|
|
42
|
+
if (!target)
|
|
43
|
+
return `✖ No memory entry matches "${ref}".`;
|
|
44
|
+
const raw = (0, file_store_js_1.readFile)(target.type, target.filename, projectRoot);
|
|
45
|
+
if (raw == null)
|
|
46
|
+
return `✖ Could not read ${target.type}/${target.filename}.`;
|
|
47
|
+
const related = (0, file_store_js_1.relatedOf)(raw, projectRoot);
|
|
48
|
+
const out = [`# ${target.type}/${target.filename}`, "", raw.trim()];
|
|
49
|
+
if (related.length) {
|
|
50
|
+
out.push("", "---", "Related entries (fetch with mem_get):");
|
|
51
|
+
for (const r of related)
|
|
52
|
+
out.push(`- ${r.title} · ${r.type}/${r.filename}`);
|
|
53
|
+
}
|
|
54
|
+
return out.join("\n");
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=mem-get.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-get.js","sourceRoot":"","sources":["../../src/tools/mem-get.ts"],"names":[],"mappings":";;;AAAA,0DAOgC;AAChC,uCAAyC;AAEzC,iFAAiF;AACjF,SAAS,OAAO,CACd,GAAW,EACX,WAAmB;IAEnB,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IACvD,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC/C,IAAK,4BAAyB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE,CAAC;YAC1D,OAAO,EAAE,IAAI,EAAE,IAAkB,EAAE,QAAQ,EAAE,CAAC;QAChD,CAAC;IACH,CAAC;IACD,MAAM,GAAG,GAAG,IAAA,2BAAW,EAAC,OAAO,EAAE,WAAW,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACjE,CAAC;AAEY,QAAA,MAAM,GAAY;IAC7B,IAAI,EAAE,SAAS;IACf,WAAW,EACT,iEAAiE;QACjE,gFAAgF;QAChF,8EAA8E;QAC9E,kCAAkC;IACpC,WAAW,EAAE;QACX,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE;YACV,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,yDAAyD;aACvE;SACF;QACD,QAAQ,EAAE,CAAC,MAAM,CAAC;KACnB;IACD,OAAO,CAAC,IAAI,EAAE,WAAW;QACvB,IAAI,CAAC,IAAA,6BAAa,EAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,kEAAkE,CAAC;QAC5E,CAAC;QACD,MAAM,GAAG,GAAG,IAAA,aAAG,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG;YAAE,OAAO,iCAAiC,CAAC;QAEnD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM;YAAE,OAAO,8BAA8B,GAAG,IAAI,CAAC;QAE1D,MAAM,GAAG,GAAG,IAAA,wBAAQ,EAAC,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,QAAQ,EAAE,WAAW,CAAC,CAAC;QAChE,IAAI,GAAG,IAAI,IAAI;YAAE,OAAO,oBAAoB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,GAAG,CAAC;QAE9E,MAAM,OAAO,GAAG,IAAA,yBAAS,EAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG,CAAC,KAAK,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;QACpE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,uCAAuC,CAAC,CAAC;YAC7D,KAAK,MAAM,CAAC,IAAI,OAAO;gBAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,KAAK,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAChF,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-handoff.d.ts","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAmC,MAAM,WAAW,CAAC;AAErE,eAAO,MAAM,UAAU,EAAE,OAoExB,CAAC"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memHandoff = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
const util_js_1 = require("./util.js");
|
|
6
|
+
exports.memHandoff = {
|
|
7
|
+
name: "mem_handoff",
|
|
8
|
+
description: "Close out a session: write a structured handoff to sessions/YYYY-MM-DD.md so " +
|
|
9
|
+
"the next session (you, a teammate, or a different agent) picks up exactly where " +
|
|
10
|
+
"this one left off. Records what was done, what's next, and any blockers.",
|
|
11
|
+
inputSchema: {
|
|
12
|
+
type: "object",
|
|
13
|
+
properties: {
|
|
14
|
+
summary: { type: "string", description: "What was worked on this session." },
|
|
15
|
+
done: {
|
|
16
|
+
type: "array",
|
|
17
|
+
items: { type: "string" },
|
|
18
|
+
description: "Completed items.",
|
|
19
|
+
},
|
|
20
|
+
next: {
|
|
21
|
+
type: "array",
|
|
22
|
+
items: { type: "string" },
|
|
23
|
+
description: "What to do next session.",
|
|
24
|
+
},
|
|
25
|
+
blockers: {
|
|
26
|
+
type: "array",
|
|
27
|
+
items: { type: "string" },
|
|
28
|
+
description: "Open blockers or gotchas.",
|
|
29
|
+
},
|
|
30
|
+
},
|
|
31
|
+
required: ["summary"],
|
|
32
|
+
},
|
|
33
|
+
handler(args, projectRoot) {
|
|
34
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
35
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
36
|
+
}
|
|
37
|
+
const summary = (0, util_js_1.str)(args.summary);
|
|
38
|
+
if (!summary)
|
|
39
|
+
return "✖ A summary is required.";
|
|
40
|
+
const done = (0, util_js_1.strArray)(args.done);
|
|
41
|
+
const next = (0, util_js_1.strArray)(args.next);
|
|
42
|
+
const blockers = (0, util_js_1.strArray)(args.blockers);
|
|
43
|
+
const lines = [];
|
|
44
|
+
lines.push(`\n## ${(0, util_js_1.timestamp)()} — Handoff`, "");
|
|
45
|
+
lines.push(summary, "");
|
|
46
|
+
if (done.length) {
|
|
47
|
+
lines.push("**Done:**");
|
|
48
|
+
for (const d of done)
|
|
49
|
+
lines.push(`- ${d}`);
|
|
50
|
+
lines.push("");
|
|
51
|
+
}
|
|
52
|
+
if (next.length) {
|
|
53
|
+
lines.push("**Next:**");
|
|
54
|
+
for (const n of next)
|
|
55
|
+
lines.push(`- ${n}`);
|
|
56
|
+
lines.push("");
|
|
57
|
+
}
|
|
58
|
+
if (blockers.length) {
|
|
59
|
+
lines.push("**Blockers:**");
|
|
60
|
+
for (const b of blockers)
|
|
61
|
+
lines.push(`- ${b}`);
|
|
62
|
+
lines.push("");
|
|
63
|
+
}
|
|
64
|
+
const filename = `${(0, util_js_1.today)()}.md`;
|
|
65
|
+
(0, file_store_js_1.writeFile)("sessions", filename, lines.join("\n"), { append: true }, projectRoot);
|
|
66
|
+
(0, file_store_js_1.generateIndex)(projectRoot);
|
|
67
|
+
return (`✔ Handoff written to sessions/${filename}\n\n` +
|
|
68
|
+
"Commit it so your team and next session inherit it:\n" +
|
|
69
|
+
` git add .repomem/ && git commit -m "memory: session handoff ${(0, util_js_1.today)()}"`);
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
//# sourceMappingURL=mem-handoff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-handoff.js","sourceRoot":"","sources":["../../src/tools/mem-handoff.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-prime.d.ts","sourceRoot":"","sources":["../../src/tools/mem-prime.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,QAAQ,EAAE,OAsDtB,CAAC"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.memPrime = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
exports.memPrime = {
|
|
6
|
+
name: "mem_prime",
|
|
7
|
+
description: "Bootstrap memory for a project that already has lots of context. Gathers " +
|
|
8
|
+
"existing docs (CLAUDE.md, AGENTS.md, README, docs/**) and returns them with " +
|
|
9
|
+
"instructions to distil durable decisions, patterns, and issues into memory " +
|
|
10
|
+
"via mem_save. Run once when adopting repomem on an existing repo.",
|
|
11
|
+
inputSchema: { type: "object", properties: {} },
|
|
12
|
+
handler(_args, projectRoot) {
|
|
13
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
14
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
15
|
+
}
|
|
16
|
+
const existing = (0, file_store_js_1.counts)(projectRoot);
|
|
17
|
+
const total = existing.decisions + existing.patterns + existing.issues + existing.sessions;
|
|
18
|
+
const docs = (0, file_store_js_1.readProjectDocs)(projectRoot);
|
|
19
|
+
if (docs.length === 0) {
|
|
20
|
+
return ("No source docs found to prime from (looked for CLAUDE.md, AGENTS.md, " +
|
|
21
|
+
"GEMINI.md, README.md, docs/**.md).\n\n" +
|
|
22
|
+
"Nothing to bootstrap automatically — save memories as you work with mem_save.");
|
|
23
|
+
}
|
|
24
|
+
const out = [];
|
|
25
|
+
out.push("# repomem priming packet");
|
|
26
|
+
out.push("");
|
|
27
|
+
out.push(total > 0
|
|
28
|
+
? `This project already has ${total} memory ${total === 1 ? "entry" : "entries"}. Only add what is missing — do not duplicate.`
|
|
29
|
+
: "This project has no memory yet. Seed it from the sources below.");
|
|
30
|
+
out.push("");
|
|
31
|
+
out.push("## Instructions");
|
|
32
|
+
out.push("Read the sources below and extract DURABLE, reusable project knowledge. " +
|
|
33
|
+
"For each item, call mem_save with the right type:");
|
|
34
|
+
out.push("- decision — an architectural choice and *why* (include a `supersedes` if it replaces one)");
|
|
35
|
+
out.push("- pattern — a convention/idiom to follow in this codebase");
|
|
36
|
+
out.push("- issue — a known gotcha or do-not-repeat mistake");
|
|
37
|
+
out.push("");
|
|
38
|
+
out.push("Keep each entry short and add a one-line `summary`. Link related entries with " +
|
|
39
|
+
"`links`. Skip transient details, changelog noise, and anything obvious from the code.");
|
|
40
|
+
out.push("");
|
|
41
|
+
out.push("## Sources");
|
|
42
|
+
for (const doc of docs) {
|
|
43
|
+
out.push("", `### ${doc.rel}`, "", "```", doc.text.trimEnd(), "```");
|
|
44
|
+
}
|
|
45
|
+
return out.join("\n");
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=mem-prime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-prime.js","sourceRoot":"","sources":["../../src/tools/mem-prime.ts"],"names":[],"mappings":";;;AAAA,0DAAgF;AAGnE,QAAA,QAAQ,GAAY;IAC/B,IAAI,EAAE,WAAW;IACjB,WAAW,EACT,2EAA2E;QAC3E,8EAA8E;QAC9E,6EAA6E;QAC7E,mEAAmE;IACrE,WAAW,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,EAAE,EAAE;IAC/C,OAAO,CAAC,KAAK,EAAE,WAAW;QACxB,IAAI,CAAC,IAAA,6BAAa,EAAC,WAAW,CAAC,EAAE,CAAC;YAChC,OAAO,kEAAkE,CAAC;QAC5E,CAAC;QAED,MAAM,QAAQ,GAAG,IAAA,sBAAM,EAAC,WAAW,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,SAAS,GAAG,QAAQ,CAAC,QAAQ,GAAG,QAAQ,CAAC,MAAM,GAAG,QAAQ,CAAC,QAAQ,CAAC;QAC3F,MAAM,IAAI,GAAG,IAAA,+BAAe,EAAC,WAAW,CAAC,CAAC;QAE1C,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CACL,uEAAuE;gBACvE,wCAAwC;gBACxC,+EAA+E,CAChF,CAAC;QACJ,CAAC;QAED,MAAM,GAAG,GAAa,EAAE,CAAC;QACzB,GAAG,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;QACrC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CACN,KAAK,GAAG,CAAC;YACP,CAAC,CAAC,4BAA4B,KAAK,WAAW,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,gDAAgD;YAC/H,CAAC,CAAC,iEAAiE,CACtE,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC5B,GAAG,CAAC,IAAI,CACN,0EAA0E;YACxE,mDAAmD,CACtD,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,4FAA4F,CAAC,CAAC;QACvG,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC;QACtE,GAAG,CAAC,IAAI,CAAC,mDAAmD,CAAC,CAAC;QAC9D,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CACN,gFAAgF;YAC9E,uFAAuF,CAC1F,CAAC;QACF,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACb,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvB,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,GAAG,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,GAAG,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,KAAK,CAAC,CAAC;QACvE,CAAC;QACD,OAAO,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC;CACF,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-save.d.ts","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,YAAY,EAIb,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,OAAO,EAA4C,MAAM,WAAW,CAAC;AAa9E,eAAO,MAAM,OAAO,EAAE,OA4FrB,CAAC;AAGF,OAAO,EAAE,YAAY,EAAE,CAAC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.MEMORY_TYPES = exports.memSave = void 0;
|
|
4
|
+
const file_store_js_1 = require("../store/file-store.js");
|
|
5
|
+
Object.defineProperty(exports, "MEMORY_TYPES", { enumerable: true, get: function () { return file_store_js_1.MEMORY_TYPES; } });
|
|
6
|
+
const util_js_1 = require("./util.js");
|
|
7
|
+
const TYPE_ALIASES = {
|
|
8
|
+
decision: "decisions",
|
|
9
|
+
decisions: "decisions",
|
|
10
|
+
session: "sessions",
|
|
11
|
+
sessions: "sessions",
|
|
12
|
+
pattern: "patterns",
|
|
13
|
+
patterns: "patterns",
|
|
14
|
+
issue: "issues",
|
|
15
|
+
issues: "issues",
|
|
16
|
+
};
|
|
17
|
+
exports.memSave = {
|
|
18
|
+
name: "mem_save",
|
|
19
|
+
description: "Save a memory to .repomem/. type is one of decision|session|pattern|issue. " +
|
|
20
|
+
"Use this to capture architectural decisions, reusable patterns, known issues, " +
|
|
21
|
+
"or session notes so they persist with the repo and travel to teammates.",
|
|
22
|
+
inputSchema: {
|
|
23
|
+
type: "object",
|
|
24
|
+
properties: {
|
|
25
|
+
type: {
|
|
26
|
+
type: "string",
|
|
27
|
+
enum: ["decision", "session", "pattern", "issue"],
|
|
28
|
+
description: "Kind of memory to save.",
|
|
29
|
+
},
|
|
30
|
+
title: { type: "string", description: "Short title for this memory." },
|
|
31
|
+
content: { type: "string", description: "The memory body, in markdown." },
|
|
32
|
+
summary: {
|
|
33
|
+
type: "string",
|
|
34
|
+
description: "Optional one-line summary. Surfaced by mem_context/mem_search so agents " +
|
|
35
|
+
"can scan without loading the full body. Auto-derived when omitted.",
|
|
36
|
+
},
|
|
37
|
+
tags: {
|
|
38
|
+
type: "array",
|
|
39
|
+
items: { type: "string" },
|
|
40
|
+
description: "Optional tags for retrieval.",
|
|
41
|
+
},
|
|
42
|
+
links: {
|
|
43
|
+
type: "array",
|
|
44
|
+
items: { type: "string" },
|
|
45
|
+
description: "Optional slugs of related memories to link (e.g. 'use-postgres'). " +
|
|
46
|
+
"Renders as [[wikilinks]] so context can traverse related entries.",
|
|
47
|
+
},
|
|
48
|
+
supersedes: {
|
|
49
|
+
type: "string",
|
|
50
|
+
description: "Optional filename of a prior decision this one replaces (decisions only).",
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
required: ["type", "title", "content"],
|
|
54
|
+
},
|
|
55
|
+
handler(args, projectRoot) {
|
|
56
|
+
if (!(0, file_store_js_1.isInitialized)(projectRoot)) {
|
|
57
|
+
return "✖ .repomem/ not found. Run `repomem init` in your project first.";
|
|
58
|
+
}
|
|
59
|
+
const rawType = (0, util_js_1.str)(args.type).toLowerCase();
|
|
60
|
+
const type = TYPE_ALIASES[rawType];
|
|
61
|
+
if (!type) {
|
|
62
|
+
return `✖ Unknown type "${(0, util_js_1.str)(args.type)}". Use one of: decision, session, pattern, issue.`;
|
|
63
|
+
}
|
|
64
|
+
const title = (0, util_js_1.str)(args.title);
|
|
65
|
+
const content = (0, util_js_1.str)(args.content);
|
|
66
|
+
if (!title)
|
|
67
|
+
return "✖ A title is required.";
|
|
68
|
+
if (!content)
|
|
69
|
+
return "✖ Content is required.";
|
|
70
|
+
const tags = (0, util_js_1.strArray)(args.tags);
|
|
71
|
+
const supersedes = (0, util_js_1.str)(args.supersedes);
|
|
72
|
+
const summary = (0, util_js_1.str)(args.summary);
|
|
73
|
+
const links = (0, util_js_1.strArray)(args.links);
|
|
74
|
+
const linkLine = links.length
|
|
75
|
+
? `\nRelated: ${links.map((l) => `[[${(0, util_js_1.slugify)(l)}]]`).join(" ")}\n`
|
|
76
|
+
: "";
|
|
77
|
+
// Sessions are date-keyed and appended to across a single day.
|
|
78
|
+
if (type === "sessions") {
|
|
79
|
+
const filename = `${(0, util_js_1.today)()}.md`;
|
|
80
|
+
const block = `\n## ${(0, util_js_1.timestamp)()} — ${title}\n\n` +
|
|
81
|
+
(tags.length ? `_tags: ${tags.join(", ")}_\n\n` : "") +
|
|
82
|
+
`${content}\n${linkLine}`;
|
|
83
|
+
(0, file_store_js_1.writeFile)(type, filename, block, { append: true }, projectRoot);
|
|
84
|
+
(0, file_store_js_1.generateIndex)(projectRoot);
|
|
85
|
+
return `✔ Appended to sessions/${filename}\n\nRemember to: git add .repomem/ && git commit`;
|
|
86
|
+
}
|
|
87
|
+
const filename = `${(0, util_js_1.today)()}-${(0, util_js_1.slugify)(title)}.md`;
|
|
88
|
+
const fm = ["---", `date: ${(0, util_js_1.today)()}`];
|
|
89
|
+
if (summary)
|
|
90
|
+
fm.push(`summary: ${summary.replace(/\n+/g, " ").trim()}`);
|
|
91
|
+
if (tags.length)
|
|
92
|
+
fm.push(`tags: [${tags.join(", ")}]`);
|
|
93
|
+
if (supersedes)
|
|
94
|
+
fm.push(`supersedes: ${supersedes}`);
|
|
95
|
+
fm.push("---", "");
|
|
96
|
+
const body = `# ${title}\n\n${content}\n${linkLine}`;
|
|
97
|
+
(0, file_store_js_1.writeFile)(type, filename, fm.join("\n") + body, {}, projectRoot);
|
|
98
|
+
(0, file_store_js_1.generateIndex)(projectRoot);
|
|
99
|
+
const note = supersedes ? ` (supersedes ${supersedes})` : "";
|
|
100
|
+
return `✔ Saved ${type}/${filename}${note}\n\nRemember to: git add .repomem/ && git commit`;
|
|
101
|
+
},
|
|
102
|
+
};
|
|
103
|
+
//# sourceMappingURL=mem-save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-save.js","sourceRoot":"","sources":["../../src/tools/mem-save.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mem-search.d.ts","sourceRoot":"","sources":["../../src/tools/mem-search.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAO,MAAM,WAAW,CAAC;AAEzC,eAAO,MAAM,SAAS,EAAE,OA6CvB,CAAC"}
|