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,117 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Palace room management — create, list, read, update rooms.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { DEFAULT_PALACE_ROOMS, VERSION } from "../types.js";
|
|
7
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
8
|
+
import { palaceDir } from "../storage/paths.js";
|
|
9
|
+
import { readJsonSafe, writeJsonAtomic } from "../storage/fs-utils.js";
|
|
10
|
+
import { roomReadmeContent } from "./obsidian.js";
|
|
11
|
+
function roomMetaPath(projectPalaceDir, roomSlug) {
|
|
12
|
+
return path.join(projectPalaceDir, "rooms", roomSlug, "_room.json");
|
|
13
|
+
}
|
|
14
|
+
export function createRoom(project, slug, name, description, tags = [], connections = []) {
|
|
15
|
+
const pd = palaceDir(project);
|
|
16
|
+
const roomPath = path.join(pd, "rooms", slug);
|
|
17
|
+
ensureDir(roomPath);
|
|
18
|
+
const now = new Date().toISOString();
|
|
19
|
+
const meta = {
|
|
20
|
+
slug,
|
|
21
|
+
name,
|
|
22
|
+
description,
|
|
23
|
+
created: now,
|
|
24
|
+
updated: now,
|
|
25
|
+
salience: 0.5,
|
|
26
|
+
access_count: 0,
|
|
27
|
+
last_accessed: now,
|
|
28
|
+
tags,
|
|
29
|
+
connections,
|
|
30
|
+
};
|
|
31
|
+
writeJsonAtomic(path.join(roomPath, "_room.json"), meta);
|
|
32
|
+
// Create README.md with Obsidian-compatible frontmatter
|
|
33
|
+
const readmePath = path.join(roomPath, "README.md");
|
|
34
|
+
if (!fs.existsSync(readmePath)) {
|
|
35
|
+
fs.writeFileSync(readmePath, roomReadmeContent(meta), "utf-8");
|
|
36
|
+
}
|
|
37
|
+
return meta;
|
|
38
|
+
}
|
|
39
|
+
export function getRoomMeta(project, roomSlug) {
|
|
40
|
+
const pd = palaceDir(project);
|
|
41
|
+
return readJsonSafe(roomMetaPath(pd, roomSlug));
|
|
42
|
+
}
|
|
43
|
+
export function updateRoomMeta(project, roomSlug, updates) {
|
|
44
|
+
const pd = palaceDir(project);
|
|
45
|
+
const metaPath = roomMetaPath(pd, roomSlug);
|
|
46
|
+
const existing = readJsonSafe(metaPath);
|
|
47
|
+
if (!existing)
|
|
48
|
+
return null;
|
|
49
|
+
const updated = { ...existing, ...updates, updated: new Date().toISOString() };
|
|
50
|
+
writeJsonAtomic(metaPath, updated);
|
|
51
|
+
return updated;
|
|
52
|
+
}
|
|
53
|
+
export function listRooms(project) {
|
|
54
|
+
const pd = palaceDir(project);
|
|
55
|
+
const roomsDir = path.join(pd, "rooms");
|
|
56
|
+
if (!fs.existsSync(roomsDir))
|
|
57
|
+
return [];
|
|
58
|
+
const rooms = [];
|
|
59
|
+
const entries = fs.readdirSync(roomsDir);
|
|
60
|
+
for (const entry of entries) {
|
|
61
|
+
const metaPath = path.join(roomsDir, entry, "_room.json");
|
|
62
|
+
const meta = readJsonSafe(metaPath);
|
|
63
|
+
if (meta)
|
|
64
|
+
rooms.push(meta);
|
|
65
|
+
}
|
|
66
|
+
// Sort by salience descending
|
|
67
|
+
rooms.sort((a, b) => b.salience - a.salience);
|
|
68
|
+
return rooms;
|
|
69
|
+
}
|
|
70
|
+
export function roomExists(project, roomSlug) {
|
|
71
|
+
const pd = palaceDir(project);
|
|
72
|
+
return fs.existsSync(roomMetaPath(pd, roomSlug));
|
|
73
|
+
}
|
|
74
|
+
/** Initialize default palace rooms if palace doesn't exist yet. */
|
|
75
|
+
export function ensurePalaceInitialized(project) {
|
|
76
|
+
const pd = palaceDir(project);
|
|
77
|
+
const indexPath = path.join(pd, "palace-index.json");
|
|
78
|
+
if (fs.existsSync(indexPath))
|
|
79
|
+
return; // already initialized
|
|
80
|
+
ensureDir(pd);
|
|
81
|
+
ensureDir(path.join(pd, "rooms"));
|
|
82
|
+
// Create default rooms
|
|
83
|
+
for (const room of DEFAULT_PALACE_ROOMS) {
|
|
84
|
+
createRoom(project, room.slug, room.name, room.description, [...room.tags]);
|
|
85
|
+
}
|
|
86
|
+
// Create identity.md
|
|
87
|
+
const identityPath = path.join(pd, "identity.md");
|
|
88
|
+
if (!fs.existsSync(identityPath)) {
|
|
89
|
+
fs.writeFileSync(identityPath, `---\nproject: ${project}\ncreated: ${new Date().toISOString()}\n---\n\n# ${project}\n\n> _(fill in: 1-line purpose, primary language, key constraint)_\n`, "utf-8");
|
|
90
|
+
}
|
|
91
|
+
// Create palace-index.json
|
|
92
|
+
const rooms = {};
|
|
93
|
+
for (const room of DEFAULT_PALACE_ROOMS) {
|
|
94
|
+
rooms[room.slug] = { salience: 0.5, memory_count: 0, last_updated: new Date().toISOString() };
|
|
95
|
+
}
|
|
96
|
+
writeJsonAtomic(indexPath, {
|
|
97
|
+
version: VERSION,
|
|
98
|
+
project,
|
|
99
|
+
created: new Date().toISOString(),
|
|
100
|
+
rooms,
|
|
101
|
+
identity_hash: "",
|
|
102
|
+
last_lint: "",
|
|
103
|
+
});
|
|
104
|
+
// Create graph.json
|
|
105
|
+
writeJsonAtomic(path.join(pd, "graph.json"), { edges: [] });
|
|
106
|
+
}
|
|
107
|
+
/** Record an access (bump access_count and last_accessed). */
|
|
108
|
+
export function recordAccess(project, roomSlug) {
|
|
109
|
+
const meta = getRoomMeta(project, roomSlug);
|
|
110
|
+
if (!meta)
|
|
111
|
+
return;
|
|
112
|
+
updateRoomMeta(project, roomSlug, {
|
|
113
|
+
access_count: meta.access_count + 1,
|
|
114
|
+
last_accessed: new Date().toISOString(),
|
|
115
|
+
});
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=rooms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rooms.js","sourceRoot":"","sources":["../../src/palace/rooms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Salience scoring for palace memories and rooms.
|
|
3
|
+
*
|
|
4
|
+
* Formula: salience = (importance × 0.4) + (recency × 0.3) + (access_freq × 0.2) + (connections × 0.1)
|
|
5
|
+
*/
|
|
6
|
+
import type { Importance } from "../types.js";
|
|
7
|
+
export declare function computeSalience(params: {
|
|
8
|
+
importance: Importance;
|
|
9
|
+
lastUpdated: string;
|
|
10
|
+
accessCount: number;
|
|
11
|
+
connectionCount: number;
|
|
12
|
+
}): number;
|
|
13
|
+
export declare const ARCHIVE_THRESHOLD = 0.15;
|
|
14
|
+
export declare const AUTO_ARCHIVE_THRESHOLD = 0.05;
|
|
15
|
+
//# sourceMappingURL=salience.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salience.d.ts","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAyB9C,wBAAgB,eAAe,CAAC,MAAM,EAAE;IACtC,UAAU,EAAE,UAAU,CAAC;IACvB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,eAAe,EAAE,MAAM,CAAC;CACzB,GAAG,MAAM,CAMT;AAED,eAAO,MAAM,iBAAiB,OAAO,CAAC;AACtC,eAAO,MAAM,sBAAsB,OAAO,CAAC"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Salience scoring for palace memories and rooms.
|
|
3
|
+
*
|
|
4
|
+
* Formula: salience = (importance × 0.4) + (recency × 0.3) + (access_freq × 0.2) + (connections × 0.1)
|
|
5
|
+
*/
|
|
6
|
+
const IMPORTANCE_WEIGHTS = {
|
|
7
|
+
high: 1.0,
|
|
8
|
+
medium: 0.6,
|
|
9
|
+
low: 0.3,
|
|
10
|
+
};
|
|
11
|
+
/** Exponential decay: 0.95^days, floor at 0.05. */
|
|
12
|
+
function recencyScore(lastUpdated) {
|
|
13
|
+
const days = (Date.now() - new Date(lastUpdated).getTime()) / (1000 * 60 * 60 * 24);
|
|
14
|
+
return Math.max(0.05, Math.pow(0.95, days));
|
|
15
|
+
}
|
|
16
|
+
/** Normalized access frequency: min(1.0, count / 20). */
|
|
17
|
+
function accessScore(accessCount) {
|
|
18
|
+
return Math.min(1.0, accessCount / 20);
|
|
19
|
+
}
|
|
20
|
+
/** Connection score: min(1.0, edgeCount / 10). */
|
|
21
|
+
function connectionScore(edgeCount) {
|
|
22
|
+
return Math.min(1.0, edgeCount / 10);
|
|
23
|
+
}
|
|
24
|
+
export function computeSalience(params) {
|
|
25
|
+
const imp = IMPORTANCE_WEIGHTS[params.importance] * 0.4;
|
|
26
|
+
const rec = recencyScore(params.lastUpdated) * 0.3;
|
|
27
|
+
const acc = accessScore(params.accessCount) * 0.2;
|
|
28
|
+
const con = connectionScore(params.connectionCount) * 0.1;
|
|
29
|
+
return Math.round((imp + rec + acc + con) * 1000) / 1000;
|
|
30
|
+
}
|
|
31
|
+
export const ARCHIVE_THRESHOLD = 0.15;
|
|
32
|
+
export const AUTO_ARCHIVE_THRESHOLD = 0.05;
|
|
33
|
+
//# sourceMappingURL=salience.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"salience.js","sourceRoot":"","sources":["../../src/palace/salience.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,MAAM,kBAAkB,GAA+B;IACrD,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,GAAG;IACX,GAAG,EAAE,GAAG;CACT,CAAC;AAEF,mDAAmD;AACnD,SAAS,YAAY,CAAC,WAAmB;IACvC,MAAM,IAAI,GACR,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;IACzE,OAAO,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AAC9C,CAAC;AAED,yDAAyD;AACzD,SAAS,WAAW,CAAC,WAAmB;IACtC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,GAAG,EAAE,CAAC,CAAC;AACzC,CAAC;AAED,kDAAkD;AAClD,SAAS,eAAe,CAAC,SAAiB;IACxC,OAAO,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,SAAS,GAAG,EAAE,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAK/B;IACC,MAAM,GAAG,GAAG,kBAAkB,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC;IACxD,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;IACnD,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,WAAW,CAAC,GAAG,GAAG,CAAC;IAClD,MAAM,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,eAAe,CAAC,GAAG,GAAG,CAAC;IAC1D,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,GAAG,IAAI,CAAC;AAC3D,CAAC;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC;AACtC,MAAM,CAAC,MAAM,sBAAsB,GAAG,IAAI,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-resources.d.ts","sourceRoot":"","sources":["../../src/resources/journal-resources.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAyEhD"}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { journalDir } from "../storage/paths.js";
|
|
5
|
+
import { todayISO } from "../storage/fs-utils.js";
|
|
6
|
+
import { listAllProjects } from "../storage/project.js";
|
|
7
|
+
import { listJournalFiles, readJournalFile } from "../helpers/journal-files.js";
|
|
8
|
+
export function register(server) {
|
|
9
|
+
// Resource: project index
|
|
10
|
+
server.registerResource("Journal Index", new ResourceTemplate("agent-recall://{project}/index", {
|
|
11
|
+
list: async () => {
|
|
12
|
+
const projects = listAllProjects();
|
|
13
|
+
return {
|
|
14
|
+
resources: projects.map((p) => ({
|
|
15
|
+
uri: `agent-recall://${p.slug}/index`,
|
|
16
|
+
name: `${p.slug} — Journal Index`,
|
|
17
|
+
mimeType: "text/markdown",
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
},
|
|
21
|
+
}), { description: "Journal index for a project", mimeType: "text/markdown" }, async (uri, { project }) => {
|
|
22
|
+
const slug = Array.isArray(project) ? project[0] : (project || "unknown");
|
|
23
|
+
const indexPath = path.join(journalDir(slug), "index.md");
|
|
24
|
+
let content = "";
|
|
25
|
+
if (fs.existsSync(indexPath)) {
|
|
26
|
+
content = fs.readFileSync(indexPath, "utf-8");
|
|
27
|
+
}
|
|
28
|
+
else {
|
|
29
|
+
content = `# ${slug} — No journal index found\n`;
|
|
30
|
+
}
|
|
31
|
+
return {
|
|
32
|
+
contents: [{
|
|
33
|
+
uri: uri.href,
|
|
34
|
+
text: content,
|
|
35
|
+
mimeType: "text/markdown",
|
|
36
|
+
}],
|
|
37
|
+
};
|
|
38
|
+
});
|
|
39
|
+
// Resource: specific date entry
|
|
40
|
+
server.registerResource("Journal Entry", new ResourceTemplate("agent-recall://{project}/{date}", {
|
|
41
|
+
list: async () => {
|
|
42
|
+
const projects = listAllProjects();
|
|
43
|
+
const resources = [];
|
|
44
|
+
for (const p of projects) {
|
|
45
|
+
const entries = listJournalFiles(p.slug).slice(0, 5);
|
|
46
|
+
for (const e of entries) {
|
|
47
|
+
resources.push({
|
|
48
|
+
uri: `agent-recall://${p.slug}/${e.date}`,
|
|
49
|
+
name: `${p.slug} — ${e.date}`,
|
|
50
|
+
mimeType: "text/markdown",
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
return { resources };
|
|
55
|
+
},
|
|
56
|
+
}), {
|
|
57
|
+
description: "A specific journal entry by date",
|
|
58
|
+
mimeType: "text/markdown",
|
|
59
|
+
}, async (uri, { project, date }) => {
|
|
60
|
+
const slug = Array.isArray(project) ? project[0] : (project || "unknown");
|
|
61
|
+
const entryDate = Array.isArray(date) ? date[0] : (date || todayISO());
|
|
62
|
+
const content = readJournalFile(slug, entryDate);
|
|
63
|
+
return {
|
|
64
|
+
contents: [{
|
|
65
|
+
uri: uri.href,
|
|
66
|
+
text: content || `# No entry for ${entryDate}\n`,
|
|
67
|
+
mimeType: "text/markdown",
|
|
68
|
+
}],
|
|
69
|
+
};
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
//# sourceMappingURL=journal-resources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-resources.js","sourceRoot":"","sources":["../../src/resources/journal-resources.ts"],"names":[],"mappings":"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"}
|
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAGpE,eAAO,MAAM,MAAM,WAGjB,CAAC;AAEH,MAAM,MAAM,UAAU,GAAG,OAAO,MAAM,CAAC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,MAAM,CAAC,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC;IAClC,IAAI,EAAE,cAAc;IACpB,OAAO,EAAE,OAAO;CACjB,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem utility functions.
|
|
3
|
+
*/
|
|
4
|
+
export declare function ensureDir(dir: string): void;
|
|
5
|
+
export declare function todayISO(): string;
|
|
6
|
+
export declare function readJsonSafe<T>(filePath: string): T | null;
|
|
7
|
+
export declare function writeJsonAtomic(filePath: string, data: unknown): void;
|
|
8
|
+
//# sourceMappingURL=fs-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.d.ts","sourceRoot":"","sources":["../../src/storage/fs-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAI3C;AAED,wBAAgB,QAAQ,IAAI,MAAM,CAEjC;AAED,wBAAgB,YAAY,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,GAAG,CAAC,GAAG,IAAI,CAO1D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,IAAI,CAGrE"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem utility functions.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
export function ensureDir(dir) {
|
|
7
|
+
if (!fs.existsSync(dir)) {
|
|
8
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export function todayISO() {
|
|
12
|
+
return new Date().toISOString().slice(0, 10);
|
|
13
|
+
}
|
|
14
|
+
export function readJsonSafe(filePath) {
|
|
15
|
+
if (!fs.existsSync(filePath))
|
|
16
|
+
return null;
|
|
17
|
+
try {
|
|
18
|
+
return JSON.parse(fs.readFileSync(filePath, "utf-8"));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return null;
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function writeJsonAtomic(filePath, data) {
|
|
25
|
+
ensureDir(path.dirname(filePath));
|
|
26
|
+
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), "utf-8");
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=fs-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fs-utils.js","sourceRoot":"","sources":["../../src/storage/fs-utils.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,MAAM,UAAU,SAAS,CAAC,GAAW;IACnC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED,MAAM,UAAU,QAAQ;IACtB,OAAO,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED,MAAM,UAAU,YAAY,CAAI,QAAgB;IAC9C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1C,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAM,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,QAAgB,EAAE,IAAa;IAC7D,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;IAClC,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACrE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Journal and palace directory path resolution.
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Resolve the journal directory for a project.
|
|
6
|
+
* For writes, always use the new location.
|
|
7
|
+
*/
|
|
8
|
+
export declare function journalDir(project: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Find all journal directories for a project (new + legacy fallback).
|
|
11
|
+
*/
|
|
12
|
+
export declare function journalDirs(project: string): string[];
|
|
13
|
+
/**
|
|
14
|
+
* Resolve the palace directory for a project.
|
|
15
|
+
*/
|
|
16
|
+
export declare function palaceDir(project: string): string;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve a room directory within a project's palace.
|
|
19
|
+
*/
|
|
20
|
+
export declare function roomDir(project: string, roomSlug: string): string;
|
|
21
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAOlD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CA4BrD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEjE"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Journal and palace directory path resolution.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { JOURNAL_ROOT, LEGACY_ROOT } from "../types.js";
|
|
7
|
+
/**
|
|
8
|
+
* Resolve the journal directory for a project.
|
|
9
|
+
* For writes, always use the new location.
|
|
10
|
+
*/
|
|
11
|
+
export function journalDir(project) {
|
|
12
|
+
const safe = project.replace(/[^a-zA-Z0-9_\-\.]/g, "-");
|
|
13
|
+
const resolved = path.join(JOURNAL_ROOT, "projects", safe, "journal");
|
|
14
|
+
if (!resolved.startsWith(JOURNAL_ROOT)) {
|
|
15
|
+
throw new Error(`Invalid project name: ${project}`);
|
|
16
|
+
}
|
|
17
|
+
return resolved;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Find all journal directories for a project (new + legacy fallback).
|
|
21
|
+
*/
|
|
22
|
+
export function journalDirs(project) {
|
|
23
|
+
const dirs = [];
|
|
24
|
+
const primary = journalDir(project);
|
|
25
|
+
if (fs.existsSync(primary))
|
|
26
|
+
dirs.push(primary);
|
|
27
|
+
// Legacy: ~/.claude/projects/*/memory/journal/
|
|
28
|
+
if (fs.existsSync(LEGACY_ROOT)) {
|
|
29
|
+
try {
|
|
30
|
+
const entries = fs.readdirSync(LEGACY_ROOT);
|
|
31
|
+
for (const entry of entries) {
|
|
32
|
+
if (entry.includes(project)) {
|
|
33
|
+
const legacyJournal = path.join(LEGACY_ROOT, entry, "memory", "journal");
|
|
34
|
+
if (fs.existsSync(legacyJournal)) {
|
|
35
|
+
dirs.push(legacyJournal);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
// ignore
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return dirs;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Resolve the palace directory for a project.
|
|
48
|
+
*/
|
|
49
|
+
export function palaceDir(project) {
|
|
50
|
+
const safe = project.replace(/[^a-zA-Z0-9_\-\.]/g, "-");
|
|
51
|
+
return path.join(JOURNAL_ROOT, "projects", safe, "palace");
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Resolve a room directory within a project's palace.
|
|
55
|
+
*/
|
|
56
|
+
export function roomDir(project, roomSlug) {
|
|
57
|
+
return path.join(palaceDir(project), "rooms", roomSlug);
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/storage/paths.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAExD;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACxD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;IACtE,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,yBAAyB,OAAO,EAAE,CAAC,CAAC;IACtD,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,OAAe;IACzC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,IAAI,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAE/C,+CAA+C;IAC/C,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC/B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;YAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;gBAC5B,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAC7B,WAAW,EACX,KAAK,EACL,QAAQ,EACR,SAAS,CACV,CAAC;oBACF,IAAI,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;wBACjC,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;oBAC3B,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,OAAe;IACvC,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,oBAAoB,EAAE,GAAG,CAAC,CAAC;IACxD,OAAO,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,OAAO,CAAC,OAAe,EAAE,QAAgB;IACvD,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;AAC1D,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project detection and listing.
|
|
3
|
+
*/
|
|
4
|
+
import type { ProjectInfo } from "../types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Auto-detect project slug from environment, git, or cwd.
|
|
7
|
+
*/
|
|
8
|
+
export declare function detectProject(): Promise<string>;
|
|
9
|
+
/**
|
|
10
|
+
* Resolve "auto" project to actual slug.
|
|
11
|
+
*/
|
|
12
|
+
export declare function resolveProject(project: string | undefined): Promise<string>;
|
|
13
|
+
/**
|
|
14
|
+
* List all projects (from both new and legacy locations).
|
|
15
|
+
*/
|
|
16
|
+
export declare function listAllProjects(): ProjectInfo[];
|
|
17
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/storage/project.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAM/C;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC,CA0CrD;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAKjF;AAED;;GAEG;AACH,wBAAgB,eAAe,IAAI,WAAW,EAAE,CA0D/C"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Project detection and listing.
|
|
3
|
+
*/
|
|
4
|
+
import * as fs from "node:fs";
|
|
5
|
+
import * as path from "node:path";
|
|
6
|
+
import { execFile } from "node:child_process";
|
|
7
|
+
import { promisify } from "node:util";
|
|
8
|
+
import { JOURNAL_ROOT, LEGACY_ROOT } from "../types.js";
|
|
9
|
+
const execFileAsync = promisify(execFile);
|
|
10
|
+
let _cachedProject = null;
|
|
11
|
+
/**
|
|
12
|
+
* Auto-detect project slug from environment, git, or cwd.
|
|
13
|
+
*/
|
|
14
|
+
export async function detectProject() {
|
|
15
|
+
if (_cachedProject)
|
|
16
|
+
return _cachedProject;
|
|
17
|
+
// 1. Env var
|
|
18
|
+
if (process.env.AGENT_RECALL_PROJECT) {
|
|
19
|
+
_cachedProject = process.env.AGENT_RECALL_PROJECT;
|
|
20
|
+
return _cachedProject;
|
|
21
|
+
}
|
|
22
|
+
// 2. Git repo name (async)
|
|
23
|
+
try {
|
|
24
|
+
const { stdout } = await execFileAsync("git", ["config", "--get", "remote.origin.url"], { timeout: 3000 });
|
|
25
|
+
const remote = stdout.trim();
|
|
26
|
+
if (remote) {
|
|
27
|
+
const name = path.basename(remote, ".git");
|
|
28
|
+
if (name) {
|
|
29
|
+
_cachedProject = name;
|
|
30
|
+
return name;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
try {
|
|
36
|
+
const { stdout } = await execFileAsync("git", ["rev-parse", "--show-toplevel"], { timeout: 3000 });
|
|
37
|
+
const root = stdout.trim();
|
|
38
|
+
if (root) {
|
|
39
|
+
_cachedProject = path.basename(root);
|
|
40
|
+
return _cachedProject;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// fall through
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
// 3. package.json name
|
|
48
|
+
const cwd = process.cwd();
|
|
49
|
+
const pkgPath = path.join(cwd, "package.json");
|
|
50
|
+
if (fs.existsSync(pkgPath)) {
|
|
51
|
+
try {
|
|
52
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
|
53
|
+
if (pkg.name) {
|
|
54
|
+
_cachedProject = pkg.name.replace(/^@[^/]+\//, "");
|
|
55
|
+
return _cachedProject;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
// fall through
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
// 4. Basename of cwd
|
|
63
|
+
_cachedProject = path.basename(cwd);
|
|
64
|
+
return _cachedProject;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Resolve "auto" project to actual slug.
|
|
68
|
+
*/
|
|
69
|
+
export async function resolveProject(project) {
|
|
70
|
+
if (!project || project === "auto") {
|
|
71
|
+
return await detectProject();
|
|
72
|
+
}
|
|
73
|
+
return project;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* List all projects (from both new and legacy locations).
|
|
77
|
+
*/
|
|
78
|
+
export function listAllProjects() {
|
|
79
|
+
const projects = new Map();
|
|
80
|
+
// New location
|
|
81
|
+
const projectsDir = path.join(JOURNAL_ROOT, "projects");
|
|
82
|
+
if (fs.existsSync(projectsDir)) {
|
|
83
|
+
const dirs = fs.readdirSync(projectsDir);
|
|
84
|
+
for (const slug of dirs) {
|
|
85
|
+
const jDir = path.join(projectsDir, slug, "journal");
|
|
86
|
+
if (fs.existsSync(jDir)) {
|
|
87
|
+
const files = fs.readdirSync(jDir).filter((f) => /^\d{4}-\d{2}-\d{2}\.md$/.test(f));
|
|
88
|
+
if (files.length > 0) {
|
|
89
|
+
files.sort().reverse();
|
|
90
|
+
projects.set(slug, {
|
|
91
|
+
slug,
|
|
92
|
+
lastEntry: files[0].replace(".md", ""),
|
|
93
|
+
entryCount: files.length,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
// Legacy location
|
|
100
|
+
if (fs.existsSync(LEGACY_ROOT)) {
|
|
101
|
+
try {
|
|
102
|
+
const entries = fs.readdirSync(LEGACY_ROOT);
|
|
103
|
+
for (const entry of entries) {
|
|
104
|
+
const journalPath = path.join(LEGACY_ROOT, entry, "memory", "journal");
|
|
105
|
+
if (fs.existsSync(journalPath)) {
|
|
106
|
+
const parts = entry.split("-").filter(Boolean);
|
|
107
|
+
const slug = parts[parts.length - 1] || entry;
|
|
108
|
+
if (!projects.has(slug)) {
|
|
109
|
+
const files = fs.readdirSync(journalPath).filter((f) => /^\d{4}-\d{2}-\d{2}\.md$/.test(f));
|
|
110
|
+
if (files.length > 0) {
|
|
111
|
+
files.sort().reverse();
|
|
112
|
+
projects.set(slug, {
|
|
113
|
+
slug,
|
|
114
|
+
lastEntry: files[0].replace(".md", ""),
|
|
115
|
+
entryCount: files.length,
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
catch {
|
|
123
|
+
// ignore
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
const result = Array.from(projects.values());
|
|
127
|
+
result.sort((a, b) => b.lastEntry.localeCompare(a.lastEntry));
|
|
128
|
+
return result;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/storage/project.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment-check.d.ts","sourceRoot":"","sources":["../../src/tools/alignment-check.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAUzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAiEhD"}
|