agent-recall-mcp 3.2.3 → 3.3.2
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/README.md +276 -218
- package/dist/helpers/journal-files.d.ts +30 -0
- package/dist/helpers/journal-files.d.ts.map +1 -0
- package/dist/helpers/journal-files.js +96 -0
- package/dist/helpers/journal-files.js.map +1 -0
- package/dist/helpers/sections.d.ts +12 -0
- package/dist/helpers/sections.d.ts.map +1 -0
- package/dist/helpers/sections.js +84 -0
- package/dist/helpers/sections.js.map +1 -0
- package/dist/index.js +59 -1199
- package/dist/index.js.map +1 -1
- package/dist/palace/awareness.d.ts +67 -0
- package/dist/palace/awareness.d.ts.map +1 -0
- package/dist/palace/awareness.js +231 -0
- package/dist/palace/awareness.js.map +1 -0
- package/dist/palace/consolidate.d.ts +28 -0
- package/dist/palace/consolidate.d.ts.map +1 -0
- package/dist/palace/consolidate.js +129 -0
- package/dist/palace/consolidate.js.map +1 -0
- package/dist/palace/fan-out.d.ts +15 -0
- package/dist/palace/fan-out.d.ts.map +1 -0
- package/dist/palace/fan-out.js +78 -0
- package/dist/palace/fan-out.js.map +1 -0
- package/dist/palace/graph.d.ts +11 -0
- package/dist/palace/graph.d.ts.map +1 -0
- package/dist/palace/graph.js +59 -0
- package/dist/palace/graph.js.map +1 -0
- package/dist/palace/identity.d.ts +6 -0
- package/dist/palace/identity.d.ts.map +1 -0
- package/dist/palace/identity.js +18 -0
- package/dist/palace/identity.js.map +1 -0
- package/dist/palace/index-manager.d.ts +7 -0
- package/dist/palace/index-manager.d.ts.map +1 -0
- package/dist/palace/index-manager.js +46 -0
- package/dist/palace/index-manager.js.map +1 -0
- package/dist/palace/insights-index.d.ts +39 -0
- package/dist/palace/insights-index.d.ts.map +1 -0
- package/dist/palace/insights-index.js +101 -0
- package/dist/palace/insights-index.js.map +1 -0
- package/dist/palace/log.d.ts +9 -0
- package/dist/palace/log.d.ts.map +1 -0
- package/dist/palace/log.js +28 -0
- package/dist/palace/log.js.map +1 -0
- package/dist/palace/obsidian.d.ts +12 -0
- package/dist/palace/obsidian.d.ts.map +1 -0
- package/dist/palace/obsidian.js +76 -0
- package/dist/palace/obsidian.js.map +1 -0
- package/dist/palace/rooms.d.ts +14 -0
- package/dist/palace/rooms.d.ts.map +1 -0
- package/dist/palace/rooms.js +117 -0
- package/dist/palace/rooms.js.map +1 -0
- package/dist/palace/salience.d.ts +15 -0
- package/dist/palace/salience.d.ts.map +1 -0
- package/dist/palace/salience.js +33 -0
- package/dist/palace/salience.js.map +1 -0
- package/dist/resources/journal-resources.d.ts +3 -0
- package/dist/resources/journal-resources.d.ts.map +1 -0
- package/dist/resources/journal-resources.js +72 -0
- package/dist/resources/journal-resources.js.map +1 -0
- package/dist/server.d.ts +4 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +7 -0
- package/dist/server.js.map +1 -0
- package/dist/storage/fs-utils.d.ts +8 -0
- package/dist/storage/fs-utils.d.ts.map +1 -0
- package/dist/storage/fs-utils.js +28 -0
- package/dist/storage/fs-utils.js.map +1 -0
- package/dist/storage/paths.d.ts +21 -0
- package/dist/storage/paths.d.ts.map +1 -0
- package/dist/storage/paths.js +59 -0
- package/dist/storage/paths.js.map +1 -0
- package/dist/storage/project.d.ts +17 -0
- package/dist/storage/project.d.ts.map +1 -0
- package/dist/storage/project.js +130 -0
- package/dist/storage/project.js.map +1 -0
- package/dist/tools/alignment-check.d.ts +3 -0
- package/dist/tools/alignment-check.d.ts.map +1 -0
- package/dist/tools/alignment-check.js +73 -0
- package/dist/tools/alignment-check.js.map +1 -0
- package/dist/tools/awareness-update.d.ts +9 -0
- package/dist/tools/awareness-update.d.ts.map +1 -0
- package/dist/tools/awareness-update.js +90 -0
- package/dist/tools/awareness-update.js.map +1 -0
- package/dist/tools/context-synthesize.d.ts +3 -0
- package/dist/tools/context-synthesize.d.ts.map +1 -0
- package/dist/tools/context-synthesize.js +204 -0
- package/dist/tools/context-synthesize.js.map +1 -0
- package/dist/tools/journal-archive.d.ts +3 -0
- package/dist/tools/journal-archive.d.ts.map +1 -0
- package/dist/tools/journal-archive.js +62 -0
- package/dist/tools/journal-archive.js.map +1 -0
- package/dist/tools/journal-capture.d.ts +3 -0
- package/dist/tools/journal-capture.d.ts.map +1 -0
- package/dist/tools/journal-capture.js +87 -0
- package/dist/tools/journal-capture.js.map +1 -0
- package/dist/tools/journal-cold-start.d.ts +3 -0
- package/dist/tools/journal-cold-start.d.ts.map +1 -0
- package/dist/tools/journal-cold-start.js +70 -0
- package/dist/tools/journal-cold-start.js.map +1 -0
- package/dist/tools/journal-list.d.ts +3 -0
- package/dist/tools/journal-list.d.ts.map +1 -0
- package/dist/tools/journal-list.js +43 -0
- package/dist/tools/journal-list.js.map +1 -0
- package/dist/tools/journal-projects.d.ts +3 -0
- package/dist/tools/journal-projects.d.ts.map +1 -0
- package/dist/tools/journal-projects.js +25 -0
- package/dist/tools/journal-projects.js.map +1 -0
- package/dist/tools/journal-read.d.ts +3 -0
- package/dist/tools/journal-read.d.ts.map +1 -0
- package/dist/tools/journal-read.js +72 -0
- package/dist/tools/journal-read.js.map +1 -0
- package/dist/tools/journal-search.d.ts +3 -0
- package/dist/tools/journal-search.d.ts.map +1 -0
- package/dist/tools/journal-search.js +113 -0
- package/dist/tools/journal-search.js.map +1 -0
- package/dist/tools/journal-state.d.ts +6 -0
- package/dist/tools/journal-state.d.ts.map +1 -0
- package/dist/tools/journal-state.js +111 -0
- package/dist/tools/journal-state.js.map +1 -0
- package/dist/tools/journal-write.d.ts +3 -0
- package/dist/tools/journal-write.d.ts.map +1 -0
- package/dist/tools/journal-write.js +88 -0
- package/dist/tools/journal-write.js.map +1 -0
- package/dist/tools/knowledge-read.d.ts +3 -0
- package/dist/tools/knowledge-read.d.ts.map +1 -0
- package/dist/tools/knowledge-read.js +118 -0
- package/dist/tools/knowledge-read.js.map +1 -0
- package/dist/tools/knowledge-write.d.ts +3 -0
- package/dist/tools/knowledge-write.d.ts.map +1 -0
- package/dist/tools/knowledge-write.js +89 -0
- package/dist/tools/knowledge-write.js.map +1 -0
- package/dist/tools/nudge.d.ts +3 -0
- package/dist/tools/nudge.d.ts.map +1 -0
- package/dist/tools/nudge.js +41 -0
- package/dist/tools/nudge.js.map +1 -0
- package/dist/tools/palace-lint.d.ts +7 -0
- package/dist/tools/palace-lint.d.ts.map +1 -0
- package/dist/tools/palace-lint.js +149 -0
- package/dist/tools/palace-lint.js.map +1 -0
- package/dist/tools/palace-read.d.ts +6 -0
- package/dist/tools/palace-read.d.ts.map +1 -0
- package/dist/tools/palace-read.js +78 -0
- package/dist/tools/palace-read.js.map +1 -0
- package/dist/tools/palace-search.d.ts +6 -0
- package/dist/tools/palace-search.d.ts.map +1 -0
- package/dist/tools/palace-search.js +81 -0
- package/dist/tools/palace-search.js.map +1 -0
- package/dist/tools/palace-walk.d.ts +12 -0
- package/dist/tools/palace-walk.d.ts.map +1 -0
- package/dist/tools/palace-walk.js +167 -0
- package/dist/tools/palace-walk.js.map +1 -0
- package/dist/tools/palace-write.d.ts +6 -0
- package/dist/tools/palace-write.d.ts.map +1 -0
- package/dist/tools/palace-write.js +108 -0
- package/dist/tools/palace-write.js.map +1 -0
- package/dist/tools/recall-insight.d.ts +9 -0
- package/dist/tools/recall-insight.d.ts.map +1 -0
- package/dist/tools/recall-insight.js +51 -0
- package/dist/tools/recall-insight.js.map +1 -0
- package/dist/types.d.ts +112 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +31 -0
- package/dist/types.js.map +1 -0
- package/package.json +8 -4
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: palace_search — Search across palace rooms, ranked by salience.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import * as z from "zod/v4";
|
|
7
|
+
import { resolveProject } from "../storage/project.js";
|
|
8
|
+
import { palaceDir } from "../storage/paths.js";
|
|
9
|
+
import { ensurePalaceInitialized, listRooms, recordAccess } from "../palace/rooms.js";
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.registerTool("palace_search", {
|
|
12
|
+
title: "Search Memory Palace",
|
|
13
|
+
description: "Full-text search across all palace rooms. Results are ranked by room salience. " +
|
|
14
|
+
"Optionally filter to a specific room.",
|
|
15
|
+
inputSchema: {
|
|
16
|
+
query: z.string().describe("Search term (case-insensitive)"),
|
|
17
|
+
room: z.string().optional().describe("Limit search to a specific room"),
|
|
18
|
+
project: z.string().default("auto"),
|
|
19
|
+
},
|
|
20
|
+
}, async ({ query, room, project }) => {
|
|
21
|
+
const slug = await resolveProject(project);
|
|
22
|
+
ensurePalaceInitialized(slug);
|
|
23
|
+
const rooms = listRooms(slug);
|
|
24
|
+
const pd = palaceDir(slug);
|
|
25
|
+
const queryLower = query.toLowerCase();
|
|
26
|
+
const results = [];
|
|
27
|
+
const targetRooms = room
|
|
28
|
+
? rooms.filter((r) => r.slug === room)
|
|
29
|
+
: rooms;
|
|
30
|
+
for (const roomMeta of targetRooms) {
|
|
31
|
+
const roomPath = path.join(pd, "rooms", roomMeta.slug);
|
|
32
|
+
if (!fs.existsSync(roomPath))
|
|
33
|
+
continue;
|
|
34
|
+
const files = fs.readdirSync(roomPath).filter((f) => f.endsWith(".md"));
|
|
35
|
+
for (const file of files) {
|
|
36
|
+
const filePath = path.join(roomPath, file);
|
|
37
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
38
|
+
const lines = content.split("\n");
|
|
39
|
+
for (let i = 0; i < lines.length; i++) {
|
|
40
|
+
if (lines[i].toLowerCase().includes(queryLower)) {
|
|
41
|
+
const line = lines[i];
|
|
42
|
+
const matchIdx = line.toLowerCase().indexOf(queryLower);
|
|
43
|
+
const start = Math.max(0, matchIdx - 40);
|
|
44
|
+
const end = Math.min(line.length, matchIdx + query.length + 40);
|
|
45
|
+
let excerpt = line.slice(start, end).trim();
|
|
46
|
+
if (start > 0)
|
|
47
|
+
excerpt = "..." + excerpt;
|
|
48
|
+
if (end < line.length)
|
|
49
|
+
excerpt = excerpt + "...";
|
|
50
|
+
results.push({
|
|
51
|
+
room: roomMeta.slug,
|
|
52
|
+
file: file.replace(".md", ""),
|
|
53
|
+
salience: roomMeta.salience,
|
|
54
|
+
excerpt,
|
|
55
|
+
line: i + 1,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
if (results.some((r) => r.room === roomMeta.slug)) {
|
|
61
|
+
recordAccess(slug, roomMeta.slug);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// Sort by salience descending, then by line number
|
|
65
|
+
results.sort((a, b) => b.salience - a.salience || a.line - b.line);
|
|
66
|
+
// Limit to 20 results
|
|
67
|
+
const limited = results.slice(0, 20);
|
|
68
|
+
return {
|
|
69
|
+
content: [{
|
|
70
|
+
type: "text",
|
|
71
|
+
text: JSON.stringify({
|
|
72
|
+
project: slug,
|
|
73
|
+
query,
|
|
74
|
+
results: limited,
|
|
75
|
+
total_matches: results.length,
|
|
76
|
+
}),
|
|
77
|
+
}],
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=palace-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palace-search.js","sourceRoot":"","sources":["../../src/tools/palace-search.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAUtF,MAAM,UAAU,QAAQ,CAAC,MAAkB;IACzC,MAAM,CAAC,YAAY,CAAC,eAAe,EAAE;QACnC,KAAK,EAAE,sBAAsB;QAC7B,WAAW,EACT,iFAAiF;YACjF,uCAAuC;QACzC,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;YAC5D,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;YACvE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC;KACF,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE;QACpC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC3B,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;QACvC,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,MAAM,WAAW,GAAG,IAAI;YACtB,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC;YACtC,CAAC,CAAC,KAAK,CAAC;QAEV,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACvD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YAEvC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;YAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;gBAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;oBACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;wBAChD,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;wBACtB,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;wBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;wBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;wBAChE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;wBAC5C,IAAI,KAAK,GAAG,CAAC;4BAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;wBACzC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;4BAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;wBAEjD,OAAO,CAAC,IAAI,CAAC;4BACX,IAAI,EAAE,QAAQ,CAAC,IAAI;4BACnB,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;4BAC7B,QAAQ,EAAE,QAAQ,CAAC,QAAQ;4BAC3B,OAAO;4BACP,IAAI,EAAE,CAAC,GAAG,CAAC;yBACZ,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;YAED,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClD,YAAY,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACpC,CAAC;QACH,CAAC;QAED,mDAAmD;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;QAEnE,sBAAsB;QACtB,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAErC,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,IAAI;wBACb,KAAK;wBACL,OAAO,EAAE,OAAO;wBAChB,aAAa,EAAE,OAAO,CAAC,MAAM;qBAC9B,CAAC;iBACH,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: palace_walk — Progressive context loading for cold-start.
|
|
3
|
+
*
|
|
4
|
+
* Depths:
|
|
5
|
+
* identity (~50 tokens): project name, purpose, last session
|
|
6
|
+
* active (~200 tokens): identity + top 3 rooms by salience
|
|
7
|
+
* relevant (~500 tokens): active + rooms matching focus query + key memories
|
|
8
|
+
* full (~2000 tokens): all rooms with full content
|
|
9
|
+
*/
|
|
10
|
+
import type { ServerType } from "../server.js";
|
|
11
|
+
export declare function register(server: ServerType): void;
|
|
12
|
+
//# sourceMappingURL=palace-walk.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palace-walk.d.ts","sourceRoot":"","sources":["../../src/tools/palace-walk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAkC/C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CA8IjD"}
|
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: palace_walk — Progressive context loading for cold-start.
|
|
3
|
+
*
|
|
4
|
+
* Depths:
|
|
5
|
+
* identity (~50 tokens): project name, purpose, last session
|
|
6
|
+
* active (~200 tokens): identity + top 3 rooms by salience
|
|
7
|
+
* relevant (~500 tokens): active + rooms matching focus query + key memories
|
|
8
|
+
* full (~2000 tokens): all rooms with full content
|
|
9
|
+
*/
|
|
10
|
+
import * as fs from "node:fs";
|
|
11
|
+
import * as path from "node:path";
|
|
12
|
+
import * as z from "zod/v4";
|
|
13
|
+
import { resolveProject } from "../storage/project.js";
|
|
14
|
+
import { palaceDir } from "../storage/paths.js";
|
|
15
|
+
import { ensurePalaceInitialized, listRooms, recordAccess } from "../palace/rooms.js";
|
|
16
|
+
import { readIdentity } from "../palace/identity.js";
|
|
17
|
+
import { readAwareness } from "../palace/awareness.js";
|
|
18
|
+
function roomSummary(meta) {
|
|
19
|
+
return `- **${meta.name}** (salience: ${meta.salience}) — ${meta.description}`;
|
|
20
|
+
}
|
|
21
|
+
function readRoomContent(project, room) {
|
|
22
|
+
const pd = palaceDir(project);
|
|
23
|
+
const roomPath = path.join(pd, "rooms", room.slug);
|
|
24
|
+
if (!fs.existsSync(roomPath))
|
|
25
|
+
return "";
|
|
26
|
+
const files = fs.readdirSync(roomPath)
|
|
27
|
+
.filter((f) => f.endsWith(".md"))
|
|
28
|
+
.sort();
|
|
29
|
+
let content = `### ${room.name}\n\n`;
|
|
30
|
+
for (const file of files) {
|
|
31
|
+
const filePath = path.join(roomPath, file);
|
|
32
|
+
const text = fs.readFileSync(filePath, "utf-8");
|
|
33
|
+
// Truncate individual files at 500 chars for full depth
|
|
34
|
+
const truncated = text.length > 500 ? text.slice(0, 500) + "\n...(truncated)" : text;
|
|
35
|
+
content += truncated + "\n\n";
|
|
36
|
+
}
|
|
37
|
+
return content;
|
|
38
|
+
}
|
|
39
|
+
export function register(server) {
|
|
40
|
+
server.registerTool("palace_walk", {
|
|
41
|
+
title: "Walk the Memory Palace",
|
|
42
|
+
description: "Progressive context loading for cold-start. " +
|
|
43
|
+
"identity (~50 tokens) → active (~200) → relevant (~500) → full (~2000). " +
|
|
44
|
+
"Start at 'identity' and deepen as needed.",
|
|
45
|
+
inputSchema: {
|
|
46
|
+
depth: z.enum(["identity", "active", "relevant", "full"]).default("active")
|
|
47
|
+
.describe("How deep to walk. Start with 'identity' or 'active'."),
|
|
48
|
+
focus: z.string().optional()
|
|
49
|
+
.describe("For 'relevant' depth: focus query to match rooms (e.g., 'authentication', 'deployment')"),
|
|
50
|
+
project: z.string().default("auto"),
|
|
51
|
+
},
|
|
52
|
+
}, async ({ depth, focus, project }) => {
|
|
53
|
+
const slug = await resolveProject(project);
|
|
54
|
+
ensurePalaceInitialized(slug);
|
|
55
|
+
const rooms = listRooms(slug);
|
|
56
|
+
let output = "";
|
|
57
|
+
// Identity: always included
|
|
58
|
+
const identity = readIdentity(slug);
|
|
59
|
+
// Strip YAML frontmatter for token efficiency
|
|
60
|
+
const identityContent = identity.replace(/^---[\s\S]*?---\n*/, "").trim();
|
|
61
|
+
output += identityContent + "\n\n";
|
|
62
|
+
// Awareness: always included (compact — top insights only)
|
|
63
|
+
const awarenessRaw = readAwareness();
|
|
64
|
+
if (awarenessRaw) {
|
|
65
|
+
// Extract just the top insights section (compact)
|
|
66
|
+
const awarenessLines = awarenessRaw.split("\n");
|
|
67
|
+
const topIdx = awarenessLines.findIndex((l) => l.startsWith("## Top Insights"));
|
|
68
|
+
const compIdx = awarenessLines.findIndex((l) => l.startsWith("## Compound") || l.startsWith("## Trajectory"));
|
|
69
|
+
if (topIdx >= 0) {
|
|
70
|
+
const end = compIdx > topIdx ? compIdx : Math.min(topIdx + 30, awarenessLines.length);
|
|
71
|
+
output += awarenessLines.slice(topIdx, end).join("\n").trim() + "\n\n";
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
if (depth === "identity") {
|
|
75
|
+
return {
|
|
76
|
+
content: [{
|
|
77
|
+
type: "text",
|
|
78
|
+
text: JSON.stringify({
|
|
79
|
+
project: slug,
|
|
80
|
+
depth,
|
|
81
|
+
rooms_count: rooms.length,
|
|
82
|
+
content: output.trim(),
|
|
83
|
+
}),
|
|
84
|
+
}],
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
// Active: top 3 rooms by salience
|
|
88
|
+
const topRooms = rooms.slice(0, 3);
|
|
89
|
+
output += "## Active Rooms\n\n";
|
|
90
|
+
for (const room of topRooms) {
|
|
91
|
+
output += roomSummary(room) + "\n";
|
|
92
|
+
recordAccess(slug, room.slug);
|
|
93
|
+
}
|
|
94
|
+
output += "\n";
|
|
95
|
+
if (depth === "active") {
|
|
96
|
+
return {
|
|
97
|
+
content: [{
|
|
98
|
+
type: "text",
|
|
99
|
+
text: JSON.stringify({
|
|
100
|
+
project: slug,
|
|
101
|
+
depth,
|
|
102
|
+
rooms_count: rooms.length,
|
|
103
|
+
top_rooms: topRooms.map((r) => r.slug),
|
|
104
|
+
content: output.trim(),
|
|
105
|
+
}),
|
|
106
|
+
}],
|
|
107
|
+
};
|
|
108
|
+
}
|
|
109
|
+
// Relevant: active + rooms matching focus
|
|
110
|
+
if (focus) {
|
|
111
|
+
const focusLower = focus.toLowerCase();
|
|
112
|
+
const matchingRooms = rooms.filter((r) => !topRooms.includes(r) &&
|
|
113
|
+
(r.name.toLowerCase().includes(focusLower) ||
|
|
114
|
+
r.description.toLowerCase().includes(focusLower) ||
|
|
115
|
+
r.tags.some((t) => t.toLowerCase().includes(focusLower))));
|
|
116
|
+
if (matchingRooms.length > 0) {
|
|
117
|
+
output += "## Relevant Rooms\n\n";
|
|
118
|
+
for (const room of matchingRooms.slice(0, 5)) {
|
|
119
|
+
output += roomSummary(room) + "\n";
|
|
120
|
+
// Include key content (first 200 chars of README)
|
|
121
|
+
const pd = palaceDir(slug);
|
|
122
|
+
const readmePath = path.join(pd, "rooms", room.slug, "README.md");
|
|
123
|
+
if (fs.existsSync(readmePath)) {
|
|
124
|
+
const readme = fs.readFileSync(readmePath, "utf-8")
|
|
125
|
+
.replace(/^---[\s\S]*?---\n*/, "")
|
|
126
|
+
.trim();
|
|
127
|
+
output += " " + readme.slice(0, 200) + "\n";
|
|
128
|
+
}
|
|
129
|
+
recordAccess(slug, room.slug);
|
|
130
|
+
}
|
|
131
|
+
output += "\n";
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
if (depth === "relevant") {
|
|
135
|
+
return {
|
|
136
|
+
content: [{
|
|
137
|
+
type: "text",
|
|
138
|
+
text: JSON.stringify({
|
|
139
|
+
project: slug,
|
|
140
|
+
depth,
|
|
141
|
+
focus: focus ?? null,
|
|
142
|
+
rooms_count: rooms.length,
|
|
143
|
+
content: output.trim(),
|
|
144
|
+
}),
|
|
145
|
+
}],
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
// Full: all rooms with content
|
|
149
|
+
output += "## All Rooms\n\n";
|
|
150
|
+
for (const room of rooms) {
|
|
151
|
+
output += readRoomContent(slug, room);
|
|
152
|
+
recordAccess(slug, room.slug);
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
content: [{
|
|
156
|
+
type: "text",
|
|
157
|
+
text: JSON.stringify({
|
|
158
|
+
project: slug,
|
|
159
|
+
depth,
|
|
160
|
+
rooms_count: rooms.length,
|
|
161
|
+
content: output.trim(),
|
|
162
|
+
}),
|
|
163
|
+
}],
|
|
164
|
+
};
|
|
165
|
+
});
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=palace-walk.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palace-walk.js","sourceRoot":"","sources":["../../src/tools/palace-walk.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACtF,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAGvD,SAAS,WAAW,CAAC,IAAc;IACjC,OAAO,OAAO,IAAI,CAAC,IAAI,iBAAiB,IAAI,CAAC,QAAQ,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;AACjF,CAAC;AAED,SAAS,eAAe,CAAC,OAAe,EAAE,IAAc;IACtD,MAAM,EAAE,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,QAAQ,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;SAChC,IAAI,EAAE,CAAC;IAEV,IAAI,OAAO,GAAG,OAAO,IAAI,CAAC,IAAI,MAAM,CAAC;IAErC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QAChD,wDAAwD;QACxD,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,kBAAkB,CAAC,CAAC,CAAC,IAAI,CAAC;QACrF,OAAO,IAAI,SAAS,GAAG,MAAM,CAAC;IAChC,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,MAAkB;IACzC,MAAM,CAAC,YAAY,CAAC,aAAa,EAAE;QACjC,KAAK,EAAE,wBAAwB;QAC/B,WAAW,EACT,8CAA8C;YAC9C,0EAA0E;YAC1E,2CAA2C;QAC7C,WAAW,EAAE;YACX,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;iBACxE,QAAQ,CAAC,sDAAsD,CAAC;YACnE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;iBACzB,QAAQ,CAAC,yFAAyF,CAAC;YACtG,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC;KACF,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE;QACrC,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,CAAC,CAAC;QAC3C,uBAAuB,CAAC,IAAI,CAAC,CAAC;QAE9B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,4BAA4B;QAC5B,MAAM,QAAQ,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QACpC,8CAA8C;QAC9C,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1E,MAAM,IAAI,eAAe,GAAG,MAAM,CAAC;QAEnC,2DAA2D;QAC3D,MAAM,YAAY,GAAG,aAAa,EAAE,CAAC;QACrC,IAAI,YAAY,EAAE,CAAC;YACjB,kDAAkD;YAClD,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,iBAAiB,CAAC,CAAC,CAAC;YAChF,MAAM,OAAO,GAAG,cAAc,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,UAAU,CAAC,eAAe,CAAC,CAAC,CAAC;YAC9G,IAAI,MAAM,IAAI,CAAC,EAAE,CAAC;gBAChB,MAAM,GAAG,GAAG,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,GAAG,EAAE,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;gBACtF,MAAM,IAAI,cAAc,CAAC,KAAK,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,GAAG,MAAM,CAAC;YACzE,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,IAAI;4BACb,KAAK;4BACL,WAAW,EAAE,KAAK,CAAC,MAAM;4BACzB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;yBACvB,CAAC;qBACH,CAAC;aACH,CAAC;QACJ,CAAC;QAED,kCAAkC;QAClC,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACnC,MAAM,IAAI,qBAAqB,CAAC;QAChC,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;YACnC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QACD,MAAM,IAAI,IAAI,CAAC;QAEf,IAAI,KAAK,KAAK,QAAQ,EAAE,CAAC;YACvB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,IAAI;4BACb,KAAK;4BACL,WAAW,EAAE,KAAK,CAAC,MAAM;4BACzB,SAAS,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;4BACtC,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;yBACvB,CAAC;qBACH,CAAC;aACH,CAAC;QACJ,CAAC;QAED,0CAA0C;QAC1C,IAAI,KAAK,EAAE,CAAC;YACV,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;YACvC,MAAM,aAAa,GAAG,KAAK,CAAC,MAAM,CAChC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;gBACrB,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;oBACxC,CAAC,CAAC,WAAW,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC;oBAChD,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC,CAC9D,CAAC;YAEF,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC7B,MAAM,IAAI,uBAAuB,CAAC;gBAClC,KAAK,MAAM,IAAI,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;oBAC7C,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;oBACnC,kDAAkD;oBAClD,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;oBAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;oBAClE,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;wBAC9B,MAAM,MAAM,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC;6BAChD,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;6BACjC,IAAI,EAAE,CAAC;wBACV,MAAM,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;oBAC/C,CAAC;oBACD,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAChC,CAAC;gBACD,MAAM,IAAI,IAAI,CAAC;YACjB,CAAC;QACH,CAAC;QAED,IAAI,KAAK,KAAK,UAAU,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE,CAAC;wBACR,IAAI,EAAE,MAAe;wBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;4BACnB,OAAO,EAAE,IAAI;4BACb,KAAK;4BACL,KAAK,EAAE,KAAK,IAAI,IAAI;4BACpB,WAAW,EAAE,KAAK,CAAC,MAAM;4BACzB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;yBACvB,CAAC;qBACH,CAAC;aACH,CAAC;QACJ,CAAC;QAED,+BAA+B;QAC/B,MAAM,IAAI,kBAAkB,CAAC;QAC7B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACtC,YAAY,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO,EAAE,IAAI;wBACb,KAAK;wBACL,WAAW,EAAE,KAAK,CAAC,MAAM;wBACzB,OAAO,EAAE,MAAM,CAAC,IAAI,EAAE;qBACvB,CAAC;iBACH,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palace-write.d.ts","sourceRoot":"","sources":["../../src/tools/palace-write.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAW/C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CA6GjD"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: palace_write — Write a memory to a room with fan-out cross-referencing.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import * as z from "zod/v4";
|
|
7
|
+
import { resolveProject } from "../storage/project.js";
|
|
8
|
+
import { palaceDir } from "../storage/paths.js";
|
|
9
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
10
|
+
import { ensurePalaceInitialized, createRoom, roomExists, updateRoomMeta } from "../palace/rooms.js";
|
|
11
|
+
import { fanOut } from "../palace/fan-out.js";
|
|
12
|
+
import { updatePalaceIndex } from "../palace/index-manager.js";
|
|
13
|
+
import { generateFrontmatter } from "../palace/obsidian.js";
|
|
14
|
+
import { appendToLog } from "../palace/log.js";
|
|
15
|
+
export function register(server) {
|
|
16
|
+
server.registerTool("palace_write", {
|
|
17
|
+
title: "Write to Palace Room",
|
|
18
|
+
description: "Write a memory to a palace room. Triggers fan-out: cross-references are updated in connected rooms. " +
|
|
19
|
+
"Use [[wikilinks]] in content to create connections, or pass explicit connections.",
|
|
20
|
+
inputSchema: {
|
|
21
|
+
room: z.string().describe("Target room slug (e.g., 'goals', 'architecture'). Auto-created if doesn't exist."),
|
|
22
|
+
topic: z.string().optional().describe("Topic file within the room (e.g., 'decisions'). Omit to append to README."),
|
|
23
|
+
content: z.string().describe("Markdown content to write. Use [[room/topic]] for cross-references."),
|
|
24
|
+
connections: z.array(z.string()).optional().describe("Explicit room connections (e.g., ['goals', 'blockers'])"),
|
|
25
|
+
importance: z.enum(["high", "medium", "low"]).default("medium").describe("Memory importance for salience scoring"),
|
|
26
|
+
project: z.string().default("auto"),
|
|
27
|
+
},
|
|
28
|
+
}, async ({ room, topic, content, connections, importance, project }) => {
|
|
29
|
+
const slug = await resolveProject(project);
|
|
30
|
+
ensurePalaceInitialized(slug);
|
|
31
|
+
// Auto-create room if it doesn't exist
|
|
32
|
+
if (!roomExists(slug, room)) {
|
|
33
|
+
createRoom(slug, room, room.charAt(0).toUpperCase() + room.slice(1), `Auto-created room for ${room}`, []);
|
|
34
|
+
}
|
|
35
|
+
const pd = palaceDir(slug);
|
|
36
|
+
const targetTopic = topic ?? "README";
|
|
37
|
+
const targetFile = path.join(pd, "rooms", room, `${targetTopic}.md`);
|
|
38
|
+
ensureDir(path.dirname(targetFile));
|
|
39
|
+
const timestamp = new Date().toISOString();
|
|
40
|
+
if (targetTopic === "README") {
|
|
41
|
+
// Append to README under the Memories section
|
|
42
|
+
let existing = fs.existsSync(targetFile)
|
|
43
|
+
? fs.readFileSync(targetFile, "utf-8")
|
|
44
|
+
: "";
|
|
45
|
+
const entry = `\n### ${timestamp.slice(0, 10)} — ${importance}\n\n${content}\n`;
|
|
46
|
+
if (existing.includes("## Memories")) {
|
|
47
|
+
// Append after the Memories section header
|
|
48
|
+
const idx = existing.indexOf("## Memories");
|
|
49
|
+
const afterHeader = existing.indexOf("\n", idx);
|
|
50
|
+
existing =
|
|
51
|
+
existing.slice(0, afterHeader + 1) +
|
|
52
|
+
entry +
|
|
53
|
+
existing.slice(afterHeader + 1);
|
|
54
|
+
}
|
|
55
|
+
else {
|
|
56
|
+
existing += `\n## Memories\n${entry}`;
|
|
57
|
+
}
|
|
58
|
+
fs.writeFileSync(targetFile, existing, "utf-8");
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
// Write to topic file (create or append)
|
|
62
|
+
if (fs.existsSync(targetFile)) {
|
|
63
|
+
const existing = fs.readFileSync(targetFile, "utf-8");
|
|
64
|
+
const entry = `\n### ${timestamp.slice(0, 10)} — ${importance}\n\n${content}\n`;
|
|
65
|
+
fs.writeFileSync(targetFile, existing + entry, "utf-8");
|
|
66
|
+
}
|
|
67
|
+
else {
|
|
68
|
+
const fm = generateFrontmatter({
|
|
69
|
+
room,
|
|
70
|
+
topic: targetTopic,
|
|
71
|
+
created: timestamp,
|
|
72
|
+
importance,
|
|
73
|
+
});
|
|
74
|
+
fs.writeFileSync(targetFile, `${fm}# ${room} / ${targetTopic}\n\n${content}\n`, "utf-8");
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Update room metadata
|
|
78
|
+
updateRoomMeta(slug, room, { updated: timestamp });
|
|
79
|
+
// Fan-out: update cross-references
|
|
80
|
+
const fanOutResult = fanOut(slug, room, targetTopic, content, connections ?? [], importance);
|
|
81
|
+
// Update palace index
|
|
82
|
+
updatePalaceIndex(slug);
|
|
83
|
+
// Log the operation
|
|
84
|
+
appendToLog(slug, "palace_write", {
|
|
85
|
+
room,
|
|
86
|
+
topic: targetTopic,
|
|
87
|
+
importance,
|
|
88
|
+
fan_out_rooms: fanOutResult.updatedRooms,
|
|
89
|
+
});
|
|
90
|
+
return {
|
|
91
|
+
content: [{
|
|
92
|
+
type: "text",
|
|
93
|
+
text: JSON.stringify({
|
|
94
|
+
success: true,
|
|
95
|
+
room,
|
|
96
|
+
topic: targetTopic,
|
|
97
|
+
project: slug,
|
|
98
|
+
importance,
|
|
99
|
+
fan_out: {
|
|
100
|
+
updated_rooms: fanOutResult.updatedRooms,
|
|
101
|
+
new_edges: fanOutResult.newEdges,
|
|
102
|
+
},
|
|
103
|
+
}),
|
|
104
|
+
}],
|
|
105
|
+
};
|
|
106
|
+
});
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=palace-write.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"palace-write.js","sourceRoot":"","sources":["../../src/tools/palace-write.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: recall_insight — Recall relevant insights for the current task.
|
|
3
|
+
*
|
|
4
|
+
* Cross-project: searches the global insights index.
|
|
5
|
+
* Returns insights ranked by relevance to the given context.
|
|
6
|
+
*/
|
|
7
|
+
import type { ServerType } from "../server.js";
|
|
8
|
+
export declare function register(server: ServerType): void;
|
|
9
|
+
//# sourceMappingURL=recall-insight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall-insight.d.ts","sourceRoot":"","sources":["../../src/tools/recall-insight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAI/C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CA2CjD"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: recall_insight — Recall relevant insights for the current task.
|
|
3
|
+
*
|
|
4
|
+
* Cross-project: searches the global insights index.
|
|
5
|
+
* Returns insights ranked by relevance to the given context.
|
|
6
|
+
*/
|
|
7
|
+
import * as z from "zod/v4";
|
|
8
|
+
import { recallInsights } from "../palace/insights-index.js";
|
|
9
|
+
import { readAwareness } from "../palace/awareness.js";
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.registerTool("recall_insight", {
|
|
12
|
+
title: "Recall Relevant Insights",
|
|
13
|
+
description: "Before starting a task, recall cross-project insights that apply. " +
|
|
14
|
+
"Matches your task description against the insights index. " +
|
|
15
|
+
"Also returns the current awareness summary.",
|
|
16
|
+
inputSchema: {
|
|
17
|
+
context: z.string().describe("Describe the current task or situation (1-2 sentences)"),
|
|
18
|
+
limit: z.number().int().default(5).describe("Max insights to return"),
|
|
19
|
+
include_awareness: z.boolean().default(true).describe("Also return the awareness.md summary"),
|
|
20
|
+
},
|
|
21
|
+
}, async ({ context, limit, include_awareness }) => {
|
|
22
|
+
const insights = recallInsights(context, limit);
|
|
23
|
+
let awareness = null;
|
|
24
|
+
if (include_awareness) {
|
|
25
|
+
const raw = readAwareness();
|
|
26
|
+
if (raw) {
|
|
27
|
+
// Return first 100 lines (identity + top insights + trajectory)
|
|
28
|
+
awareness = raw.split("\n").slice(0, 100).join("\n");
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
content: [{
|
|
33
|
+
type: "text",
|
|
34
|
+
text: JSON.stringify({
|
|
35
|
+
context,
|
|
36
|
+
matching_insights: insights.map((i) => ({
|
|
37
|
+
title: i.title,
|
|
38
|
+
relevance: Math.round(i.relevance * 100) / 100,
|
|
39
|
+
severity: i.severity,
|
|
40
|
+
applies_when: i.applies_when,
|
|
41
|
+
confirmed: i.confirmed_count,
|
|
42
|
+
file: i.file ?? null,
|
|
43
|
+
})),
|
|
44
|
+
total_in_index: (await import("../palace/insights-index.js")).readInsightsIndex().insights.length,
|
|
45
|
+
awareness: awareness,
|
|
46
|
+
}),
|
|
47
|
+
}],
|
|
48
|
+
};
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=recall-insight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall-insight.js","sourceRoot":"","sources":["../../src/tools/recall-insight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC;AAE5B,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,MAAM,UAAU,QAAQ,CAAC,MAAkB;IACzC,MAAM,CAAC,YAAY,CAAC,gBAAgB,EAAE;QACpC,KAAK,EAAE,0BAA0B;QACjC,WAAW,EACT,oEAAoE;YACpE,4DAA4D;YAC5D,6CAA6C;QAC/C,WAAW,EAAE;YACX,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,wDAAwD,CAAC;YACtF,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,wBAAwB,CAAC;YACrE,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC;SAC9F;KACF,EAAE,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,iBAAiB,EAAE,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,cAAc,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAEhD,IAAI,SAAS,GAAkB,IAAI,CAAC;QACpC,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,GAAG,GAAG,aAAa,EAAE,CAAC;YAC5B,IAAI,GAAG,EAAE,CAAC;gBACR,gEAAgE;gBAChE,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvD,CAAC;QACH,CAAC;QAED,OAAO;YACL,OAAO,EAAE,CAAC;oBACR,IAAI,EAAE,MAAe;oBACrB,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;wBACnB,OAAO;wBACP,iBAAiB,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;4BACtC,KAAK,EAAE,CAAC,CAAC,KAAK;4BACd,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,GAAG,GAAG,CAAC,GAAG,GAAG;4BAC9C,QAAQ,EAAE,CAAC,CAAC,QAAQ;4BACpB,YAAY,EAAE,CAAC,CAAC,YAAY;4BAC5B,SAAS,EAAE,CAAC,CAAC,eAAe;4BAC5B,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,IAAI;yBACrB,CAAC,CAAC;wBACH,cAAc,EAAE,CAAC,MAAM,MAAM,CAAC,6BAA6B,CAAC,CAAC,CAAC,iBAAiB,EAAE,CAAC,QAAQ,CAAC,MAAM;wBACjG,SAAS,EAAE,SAAS;qBACrB,CAAC;iBACH,CAAC;SACH,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types, interfaces, and constants for agent-recall-mcp.
|
|
3
|
+
*/
|
|
4
|
+
export declare const VERSION = "3.3.2";
|
|
5
|
+
export declare const JOURNAL_ROOT: string;
|
|
6
|
+
export declare const LEGACY_ROOT: string;
|
|
7
|
+
export declare const SECTION_HEADERS: Record<string, string>;
|
|
8
|
+
export declare const DEFAULT_PALACE_ROOMS: readonly [{
|
|
9
|
+
readonly slug: "goals";
|
|
10
|
+
readonly name: "Goals";
|
|
11
|
+
readonly description: "Active goals, completed goals, goal evolution";
|
|
12
|
+
readonly tags: readonly ["planning"];
|
|
13
|
+
}, {
|
|
14
|
+
readonly slug: "architecture";
|
|
15
|
+
readonly name: "Architecture";
|
|
16
|
+
readonly description: "Technical decisions, patterns, tech stack";
|
|
17
|
+
readonly tags: readonly ["technical"];
|
|
18
|
+
}, {
|
|
19
|
+
readonly slug: "blockers";
|
|
20
|
+
readonly name: "Blockers";
|
|
21
|
+
readonly description: "Current and resolved blockers";
|
|
22
|
+
readonly tags: readonly ["status"];
|
|
23
|
+
}, {
|
|
24
|
+
readonly slug: "alignment";
|
|
25
|
+
readonly name: "Alignment";
|
|
26
|
+
readonly description: "Frequently misunderstood areas, human corrections";
|
|
27
|
+
readonly tags: readonly ["communication"];
|
|
28
|
+
}, {
|
|
29
|
+
readonly slug: "knowledge";
|
|
30
|
+
readonly name: "Knowledge";
|
|
31
|
+
readonly description: "Learned lessons by category";
|
|
32
|
+
readonly tags: readonly ["learning"];
|
|
33
|
+
}];
|
|
34
|
+
export interface JournalEntry {
|
|
35
|
+
date: string;
|
|
36
|
+
file: string;
|
|
37
|
+
dir: string;
|
|
38
|
+
}
|
|
39
|
+
export interface ProjectInfo {
|
|
40
|
+
slug: string;
|
|
41
|
+
lastEntry: string;
|
|
42
|
+
entryCount: number;
|
|
43
|
+
}
|
|
44
|
+
export interface SessionState {
|
|
45
|
+
version: string;
|
|
46
|
+
date: string;
|
|
47
|
+
project: string;
|
|
48
|
+
timestamp: string;
|
|
49
|
+
completed: Array<{
|
|
50
|
+
task: string;
|
|
51
|
+
result: string;
|
|
52
|
+
files_changed?: string[];
|
|
53
|
+
}>;
|
|
54
|
+
failures: Array<{
|
|
55
|
+
task: string;
|
|
56
|
+
what_went_wrong: string;
|
|
57
|
+
root_cause: string;
|
|
58
|
+
fixed: boolean;
|
|
59
|
+
}>;
|
|
60
|
+
state: Record<string, {
|
|
61
|
+
status: string;
|
|
62
|
+
details: string;
|
|
63
|
+
}>;
|
|
64
|
+
next_actions: Array<{
|
|
65
|
+
priority: string;
|
|
66
|
+
task: string;
|
|
67
|
+
}>;
|
|
68
|
+
insights: Array<{
|
|
69
|
+
claim: string;
|
|
70
|
+
confidence: string;
|
|
71
|
+
evidence: string;
|
|
72
|
+
}>;
|
|
73
|
+
counts: Record<string, number>;
|
|
74
|
+
}
|
|
75
|
+
export interface RoomMeta {
|
|
76
|
+
slug: string;
|
|
77
|
+
name: string;
|
|
78
|
+
description: string;
|
|
79
|
+
created: string;
|
|
80
|
+
updated: string;
|
|
81
|
+
salience: number;
|
|
82
|
+
access_count: number;
|
|
83
|
+
last_accessed: string;
|
|
84
|
+
tags: string[];
|
|
85
|
+
connections: string[];
|
|
86
|
+
}
|
|
87
|
+
export interface PalaceIndex {
|
|
88
|
+
version: string;
|
|
89
|
+
project: string;
|
|
90
|
+
created: string;
|
|
91
|
+
rooms: Record<string, {
|
|
92
|
+
salience: number;
|
|
93
|
+
memory_count: number;
|
|
94
|
+
last_updated: string;
|
|
95
|
+
}>;
|
|
96
|
+
identity_hash: string;
|
|
97
|
+
last_lint: string;
|
|
98
|
+
}
|
|
99
|
+
export interface GraphEdge {
|
|
100
|
+
from: string;
|
|
101
|
+
to: string;
|
|
102
|
+
type: string;
|
|
103
|
+
weight: number;
|
|
104
|
+
created: string;
|
|
105
|
+
}
|
|
106
|
+
export interface PalaceGraph {
|
|
107
|
+
edges: GraphEdge[];
|
|
108
|
+
}
|
|
109
|
+
export type Importance = "high" | "medium" | "low";
|
|
110
|
+
export type Confidence = "high" | "medium" | "low";
|
|
111
|
+
export type WalkDepth = "identity" | "active" | "relevant" | "full";
|
|
112
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH,eAAO,MAAM,OAAO,UAAU,CAAC;AAE/B,eAAO,MAAM,YAAY,QACkD,CAAC;AAE5E,eAAO,MAAM,WAAW,QAAiD,CAAC;AAE1E,eAAO,MAAM,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAWlD,CAAC;AAEF,eAAO,MAAM,oBAAoB;;;;;;;;;;;;;;;;;;;;;;;;;EAMvB,CAAC;AAMX,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IAC7E,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,eAAe,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC/F,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3D,YAAY,EAAE,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAChC;AAED,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxF,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnD,MAAM,MAAM,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;AACnD,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,CAAC"}
|
package/dist/types.js
ADDED
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared types, interfaces, and constants for agent-recall-mcp.
|
|
3
|
+
*/
|
|
4
|
+
import * as path from "node:path";
|
|
5
|
+
import * as os from "node:os";
|
|
6
|
+
// ---------------------------------------------------------------------------
|
|
7
|
+
// Constants
|
|
8
|
+
// ---------------------------------------------------------------------------
|
|
9
|
+
export const VERSION = "3.3.2";
|
|
10
|
+
export const JOURNAL_ROOT = process.env.AGENT_RECALL_ROOT || path.join(os.homedir(), ".agent-recall");
|
|
11
|
+
export const LEGACY_ROOT = path.join(os.homedir(), ".claude", "projects");
|
|
12
|
+
export const SECTION_HEADERS = {
|
|
13
|
+
brief: "## Brief",
|
|
14
|
+
qa: "## Q&A Log",
|
|
15
|
+
completed: "## Completed",
|
|
16
|
+
status: "## Status",
|
|
17
|
+
blockers: "## Blockers",
|
|
18
|
+
next: "## Next",
|
|
19
|
+
decisions: "## Decisions",
|
|
20
|
+
reflection: "## Reflection",
|
|
21
|
+
files: "## Files Changed",
|
|
22
|
+
observations: "## Observations",
|
|
23
|
+
};
|
|
24
|
+
export const DEFAULT_PALACE_ROOMS = [
|
|
25
|
+
{ slug: "goals", name: "Goals", description: "Active goals, completed goals, goal evolution", tags: ["planning"] },
|
|
26
|
+
{ slug: "architecture", name: "Architecture", description: "Technical decisions, patterns, tech stack", tags: ["technical"] },
|
|
27
|
+
{ slug: "blockers", name: "Blockers", description: "Current and resolved blockers", tags: ["status"] },
|
|
28
|
+
{ slug: "alignment", name: "Alignment", description: "Frequently misunderstood areas, human corrections", tags: ["communication"] },
|
|
29
|
+
{ slug: "knowledge", name: "Knowledge", description: "Learned lessons by category", tags: ["learning"] },
|
|
30
|
+
];
|
|
31
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,8EAA8E;AAC9E,YAAY;AACZ,8EAA8E;AAE9E,MAAM,CAAC,MAAM,OAAO,GAAG,OAAO,CAAC;AAE/B,MAAM,CAAC,MAAM,YAAY,GACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,eAAe,CAAC,CAAC;AAE5E,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,eAAe,GAA2B;IACrD,KAAK,EAAE,UAAU;IACjB,EAAE,EAAE,YAAY;IAChB,SAAS,EAAE,cAAc;IACzB,MAAM,EAAE,WAAW;IACnB,QAAQ,EAAE,aAAa;IACvB,IAAI,EAAE,SAAS;IACf,SAAS,EAAE,cAAc;IACzB,UAAU,EAAE,eAAe;IAC3B,KAAK,EAAE,kBAAkB;IACzB,YAAY,EAAE,iBAAiB;CAChC,CAAC;AAEF,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,WAAW,EAAE,+CAA+C,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE;IAClH,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,cAAc,EAAE,WAAW,EAAE,2CAA2C,EAAE,IAAI,EAAE,CAAC,WAAW,CAAC,EAAE;IAC7H,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,WAAW,EAAE,+BAA+B,EAAE,IAAI,EAAE,CAAC,QAAQ,CAAC,EAAE;IACtG,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,mDAAmD,EAAE,IAAI,EAAE,CAAC,eAAe,CAAC,EAAE;IACnI,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,6BAA6B,EAAE,IAAI,EAAE,CAAC,UAAU,CAAC,EAAE;CAChG,CAAC"}
|