agent-recall-core 3.3.4
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/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/rollup.d.ts +35 -0
- package/dist/helpers/rollup.d.ts.map +1 -0
- package/dist/helpers/rollup.js +78 -0
- package/dist/helpers/rollup.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.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +63 -0
- package/dist/index.js.map +1 -0
- 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/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 +71 -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 +131 -0
- package/dist/storage/project.js.map +1 -0
- package/dist/tools-logic/alignment-check.d.ts +19 -0
- package/dist/tools-logic/alignment-check.d.ts.map +1 -0
- package/dist/tools-logic/alignment-check.js +54 -0
- package/dist/tools-logic/alignment-check.js.map +1 -0
- package/dist/tools-logic/awareness-update.d.ts +23 -0
- package/dist/tools-logic/awareness-update.d.ts.map +1 -0
- package/dist/tools-logic/awareness-update.js +47 -0
- package/dist/tools-logic/awareness-update.js.map +1 -0
- package/dist/tools-logic/context-synthesize.d.ts +17 -0
- package/dist/tools-logic/context-synthesize.d.ts.map +1 -0
- package/dist/tools-logic/context-synthesize.js +174 -0
- package/dist/tools-logic/context-synthesize.js.map +1 -0
- package/dist/tools-logic/journal-archive.d.ts +11 -0
- package/dist/tools-logic/journal-archive.d.ts.map +1 -0
- package/dist/tools-logic/journal-archive.js +47 -0
- package/dist/tools-logic/journal-archive.js.map +1 -0
- package/dist/tools-logic/journal-capture.d.ts +16 -0
- package/dist/tools-logic/journal-capture.d.ts.map +1 -0
- package/dist/tools-logic/journal-capture.js +57 -0
- package/dist/tools-logic/journal-capture.js.map +1 -0
- package/dist/tools-logic/journal-cold-start.d.ts +37 -0
- package/dist/tools-logic/journal-cold-start.d.ts.map +1 -0
- package/dist/tools-logic/journal-cold-start.js +78 -0
- package/dist/tools-logic/journal-cold-start.js.map +1 -0
- package/dist/tools-logic/journal-list.d.ts +14 -0
- package/dist/tools-logic/journal-list.d.ts.map +1 -0
- package/dist/tools-logic/journal-list.js +18 -0
- package/dist/tools-logic/journal-list.js.map +1 -0
- package/dist/tools-logic/journal-projects.d.ts +10 -0
- package/dist/tools-logic/journal-projects.d.ts.map +1 -0
- package/dist/tools-logic/journal-projects.js +10 -0
- package/dist/tools-logic/journal-projects.js.map +1 -0
- package/dist/tools-logic/journal-read.d.ts +13 -0
- package/dist/tools-logic/journal-read.d.ts.map +1 -0
- package/dist/tools-logic/journal-read.js +22 -0
- package/dist/tools-logic/journal-read.js.map +1 -0
- package/dist/tools-logic/journal-rollup.d.ts +16 -0
- package/dist/tools-logic/journal-rollup.d.ts.map +1 -0
- package/dist/tools-logic/journal-rollup.js +79 -0
- package/dist/tools-logic/journal-rollup.js.map +1 -0
- package/dist/tools-logic/journal-search.d.ts +16 -0
- package/dist/tools-logic/journal-search.d.ts.map +1 -0
- package/dist/tools-logic/journal-search.js +80 -0
- package/dist/tools-logic/journal-search.js.map +1 -0
- package/dist/tools-logic/journal-state.d.ts +26 -0
- package/dist/tools-logic/journal-state.d.ts.map +1 -0
- package/dist/tools-logic/journal-state.js +80 -0
- package/dist/tools-logic/journal-state.js.map +1 -0
- package/dist/tools-logic/journal-write.d.ts +18 -0
- package/dist/tools-logic/journal-write.d.ts.map +1 -0
- package/dist/tools-logic/journal-write.js +54 -0
- package/dist/tools-logic/journal-write.js.map +1 -0
- package/dist/tools-logic/knowledge-read.d.ts +7 -0
- package/dist/tools-logic/knowledge-read.d.ts.map +1 -0
- package/dist/tools-logic/knowledge-read.js +88 -0
- package/dist/tools-logic/knowledge-read.js.map +1 -0
- package/dist/tools-logic/knowledge-write.d.ts +23 -0
- package/dist/tools-logic/knowledge-write.d.ts.map +1 -0
- package/dist/tools-logic/knowledge-write.js +58 -0
- package/dist/tools-logic/knowledge-write.js.map +1 -0
- package/dist/tools-logic/nudge.d.ts +15 -0
- package/dist/tools-logic/nudge.d.ts.map +1 -0
- package/dist/tools-logic/nudge.js +27 -0
- package/dist/tools-logic/nudge.js.map +1 -0
- package/dist/tools-logic/palace-lint.d.ts +20 -0
- package/dist/tools-logic/palace-lint.d.ts.map +1 -0
- package/dist/tools-logic/palace-lint.js +87 -0
- package/dist/tools-logic/palace-lint.js.map +1 -0
- package/dist/tools-logic/palace-read.d.ts +24 -0
- package/dist/tools-logic/palace-read.d.ts.map +1 -0
- package/dist/tools-logic/palace-read.js +45 -0
- package/dist/tools-logic/palace-read.js.map +1 -0
- package/dist/tools-logic/palace-search.d.ts +19 -0
- package/dist/tools-logic/palace-search.d.ts.map +1 -0
- package/dist/tools-logic/palace-search.js +46 -0
- package/dist/tools-logic/palace-search.js.map +1 -0
- package/dist/tools-logic/palace-walk.d.ts +18 -0
- package/dist/tools-logic/palace-walk.d.ts.map +1 -0
- package/dist/tools-logic/palace-walk.js +89 -0
- package/dist/tools-logic/palace-walk.js.map +1 -0
- package/dist/tools-logic/palace-write.d.ts +22 -0
- package/dist/tools-logic/palace-write.d.ts.map +1 -0
- package/dist/tools-logic/palace-write.js +60 -0
- package/dist/tools-logic/palace-write.js.map +1 -0
- package/dist/tools-logic/recall-insight.d.ts +20 -0
- package/dist/tools-logic/recall-insight.d.ts.map +1 -0
- package/dist/tools-logic/recall-insight.js +27 -0
- package/dist/tools-logic/recall-insight.js.map +1 -0
- package/dist/types.d.ts +123 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +54 -0
- package/dist/types.js.map +1 -0
- package/package.json +36 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { journalDir } from "../storage/paths.js";
|
|
5
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
6
|
+
import { listJournalFiles, updateIndex } from "../helpers/journal-files.js";
|
|
7
|
+
import { extractSection } from "../helpers/sections.js";
|
|
8
|
+
import { stateFilePath } from "./journal-state.js";
|
|
9
|
+
export async function journalArchive(input) {
|
|
10
|
+
const slug = await resolveProject(input.project);
|
|
11
|
+
const entries = listJournalFiles(slug);
|
|
12
|
+
const dir = journalDir(slug);
|
|
13
|
+
const archiveDir = path.join(dir, "archive");
|
|
14
|
+
ensureDir(archiveDir);
|
|
15
|
+
const olderThanDays = input.older_than_days ?? 7;
|
|
16
|
+
let archived = 0;
|
|
17
|
+
const summaries = [];
|
|
18
|
+
for (const entry of entries) {
|
|
19
|
+
const ageMs = Date.now() - new Date(entry.date).getTime();
|
|
20
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
21
|
+
if (ageDays > olderThanDays) {
|
|
22
|
+
const srcPath = path.join(entry.dir, entry.file);
|
|
23
|
+
const content = fs.readFileSync(srcPath, "utf-8");
|
|
24
|
+
const brief = extractSection(content, "brief");
|
|
25
|
+
const firstLine = brief?.split("\n").find(l => l.trim().length > 0) ?? "(no brief)";
|
|
26
|
+
const destPath = path.join(archiveDir, entry.file);
|
|
27
|
+
fs.copyFileSync(srcPath, destPath);
|
|
28
|
+
fs.unlinkSync(srcPath);
|
|
29
|
+
const stateSrc = stateFilePath(slug, entry.date);
|
|
30
|
+
if (fs.existsSync(stateSrc)) {
|
|
31
|
+
const stateDest = path.join(archiveDir, `${entry.date}.state.json`);
|
|
32
|
+
fs.copyFileSync(stateSrc, stateDest);
|
|
33
|
+
fs.unlinkSync(stateSrc);
|
|
34
|
+
}
|
|
35
|
+
summaries.push(`${entry.date}: ${firstLine}`);
|
|
36
|
+
archived++;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if (summaries.length > 0) {
|
|
40
|
+
const indexPath = path.join(archiveDir, "index.md");
|
|
41
|
+
const existing = fs.existsSync(indexPath) ? fs.readFileSync(indexPath, "utf-8") : "# Archive\n\n";
|
|
42
|
+
fs.writeFileSync(indexPath, existing + summaries.join("\n") + "\n", "utf-8");
|
|
43
|
+
}
|
|
44
|
+
updateIndex(slug);
|
|
45
|
+
return { archived, summaries, archive_dir: archiveDir };
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=journal-archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-archive.js","sourceRoot":"","sources":["../../src/tools-logic/journal-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface JournalCaptureInput {
|
|
2
|
+
question: string;
|
|
3
|
+
answer: string;
|
|
4
|
+
tags?: string[];
|
|
5
|
+
palace_room?: string;
|
|
6
|
+
project?: string;
|
|
7
|
+
}
|
|
8
|
+
export interface JournalCaptureResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
entry_number: number;
|
|
11
|
+
palace: {
|
|
12
|
+
room: string;
|
|
13
|
+
} | null;
|
|
14
|
+
}
|
|
15
|
+
export declare function journalCapture(input: JournalCaptureInput): Promise<JournalCaptureResult>;
|
|
16
|
+
//# sourceMappingURL=journal-capture.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-capture.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,OAAO,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACjC;AAED,wBAAsB,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAkD9F"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { journalDir } from "../storage/paths.js";
|
|
5
|
+
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
6
|
+
import { countLogEntries } from "../helpers/journal-files.js";
|
|
7
|
+
import { ensurePalaceInitialized, roomExists, createRoom } from "../palace/rooms.js";
|
|
8
|
+
import { palaceDir } from "../storage/paths.js";
|
|
9
|
+
import { fanOut } from "../palace/fan-out.js";
|
|
10
|
+
import { updatePalaceIndex } from "../palace/index-manager.js";
|
|
11
|
+
export async function journalCapture(input) {
|
|
12
|
+
const slug = await resolveProject(input.project);
|
|
13
|
+
const date = todayISO();
|
|
14
|
+
const dir = journalDir(slug);
|
|
15
|
+
ensureDir(dir);
|
|
16
|
+
const logPath = path.join(dir, `${date}-log.md`);
|
|
17
|
+
const entryNum = countLogEntries(logPath) + 1;
|
|
18
|
+
const tagStr = input.tags && input.tags.length > 0 ? ` [${input.tags.join(", ")}]` : "";
|
|
19
|
+
const timestamp = new Date().toISOString().slice(11, 19);
|
|
20
|
+
let entry = `### Q${entryNum} (${timestamp})${tagStr}\n\n`;
|
|
21
|
+
entry += `**Q:** ${input.question}\n\n`;
|
|
22
|
+
entry += `**A:** ${input.answer}\n\n`;
|
|
23
|
+
if (!fs.existsSync(logPath)) {
|
|
24
|
+
const header = `# ${date} — ${slug} — Session Log\n\n`;
|
|
25
|
+
fs.writeFileSync(logPath, header + entry, "utf-8");
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
fs.appendFileSync(logPath, entry, "utf-8");
|
|
29
|
+
}
|
|
30
|
+
let palaceResult = null;
|
|
31
|
+
if (input.palace_room) {
|
|
32
|
+
try {
|
|
33
|
+
ensurePalaceInitialized(slug);
|
|
34
|
+
if (!roomExists(slug, input.palace_room)) {
|
|
35
|
+
createRoom(slug, input.palace_room, input.palace_room.charAt(0).toUpperCase() + input.palace_room.slice(1), "Auto-created from capture", []);
|
|
36
|
+
}
|
|
37
|
+
const pd = palaceDir(slug);
|
|
38
|
+
const targetPath = path.join(pd, "rooms", input.palace_room, "captures.md");
|
|
39
|
+
ensureDir(path.dirname(targetPath));
|
|
40
|
+
const captureEntry = `\n### Q${entryNum} (${date})\n**Q:** ${input.question}\n**A:** ${input.answer}\n`;
|
|
41
|
+
if (fs.existsSync(targetPath)) {
|
|
42
|
+
fs.appendFileSync(targetPath, captureEntry, "utf-8");
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
fs.writeFileSync(targetPath, `# ${input.palace_room} / captures\n${captureEntry}`, "utf-8");
|
|
46
|
+
}
|
|
47
|
+
fanOut(slug, input.palace_room, "captures", `${input.question} ${input.answer}`, [], "medium");
|
|
48
|
+
updatePalaceIndex(slug);
|
|
49
|
+
palaceResult = { room: input.palace_room };
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
// Palace integration is optional
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return { success: true, entry_number: entryNum, palace: palaceResult };
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=journal-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-capture.js","sourceRoot":"","sources":["../../src/tools-logic/journal-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { SessionState } from "../types.js";
|
|
2
|
+
export interface JournalColdStartInput {
|
|
3
|
+
project?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface JournalColdStartResult {
|
|
6
|
+
project: string;
|
|
7
|
+
palace_context: {
|
|
8
|
+
identity: string | null;
|
|
9
|
+
awareness_summary: string | null;
|
|
10
|
+
top_rooms: Array<{
|
|
11
|
+
slug: string;
|
|
12
|
+
name: string;
|
|
13
|
+
salience: number;
|
|
14
|
+
description: string;
|
|
15
|
+
}>;
|
|
16
|
+
insight_count: number;
|
|
17
|
+
};
|
|
18
|
+
cache: {
|
|
19
|
+
hot: {
|
|
20
|
+
count: number;
|
|
21
|
+
entries: Array<{
|
|
22
|
+
date: string;
|
|
23
|
+
state: SessionState | null;
|
|
24
|
+
brief: string | null;
|
|
25
|
+
}>;
|
|
26
|
+
};
|
|
27
|
+
warm: {
|
|
28
|
+
count: number;
|
|
29
|
+
};
|
|
30
|
+
cold: {
|
|
31
|
+
count: number;
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
total_entries: number;
|
|
35
|
+
}
|
|
36
|
+
export declare function journalColdStart(input: JournalColdStartInput): Promise<JournalColdStartResult>;
|
|
37
|
+
//# sourceMappingURL=journal-cold-start.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-cold-start.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-cold-start.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAEhD,MAAM,WAAW,qBAAqB;IACpC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,EAAE;QACd,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;QACxB,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,SAAS,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,QAAQ,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACxF,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;IACF,KAAK,EAAE;QACL,GAAG,EAAE;YAAE,KAAK,EAAE,MAAM,CAAC;YAAC,OAAO,EAAE,KAAK,CAAC;gBAAE,IAAI,EAAE,MAAM,CAAC;gBAAC,KAAK,EAAE,YAAY,GAAG,IAAI,CAAC;gBAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;aAAE,CAAC,CAAA;SAAE,CAAC;QAC3G,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;QACxB,IAAI,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAC;KACzB,CAAC;IACF,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CA0EpG"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { listJournalFiles } from "../helpers/journal-files.js";
|
|
5
|
+
import { extractSection } from "../helpers/sections.js";
|
|
6
|
+
import { readState } from "./journal-state.js";
|
|
7
|
+
import { palaceDir } from "../storage/paths.js";
|
|
8
|
+
import { ensurePalaceInitialized, listRooms } from "../palace/rooms.js";
|
|
9
|
+
import { readAwareness, readAwarenessState } from "../palace/awareness.js";
|
|
10
|
+
export async function journalColdStart(input) {
|
|
11
|
+
const slug = await resolveProject(input.project);
|
|
12
|
+
const entries = listJournalFiles(slug);
|
|
13
|
+
let palaceContext = {
|
|
14
|
+
identity: null,
|
|
15
|
+
awareness_summary: null,
|
|
16
|
+
top_rooms: [],
|
|
17
|
+
insight_count: 0,
|
|
18
|
+
};
|
|
19
|
+
try {
|
|
20
|
+
ensurePalaceInitialized(slug);
|
|
21
|
+
const pd = palaceDir(slug);
|
|
22
|
+
const identityPath = path.join(pd, "identity.md");
|
|
23
|
+
if (fs.existsSync(identityPath)) {
|
|
24
|
+
palaceContext.identity = fs.readFileSync(identityPath, "utf-8").slice(0, 500);
|
|
25
|
+
}
|
|
26
|
+
const awarenessContent = readAwareness();
|
|
27
|
+
if (awarenessContent) {
|
|
28
|
+
palaceContext.awareness_summary = awarenessContent.split("\n").slice(0, 15).join("\n");
|
|
29
|
+
}
|
|
30
|
+
const rooms = listRooms(slug);
|
|
31
|
+
palaceContext.top_rooms = rooms.slice(0, 3).map(r => ({
|
|
32
|
+
slug: r.slug,
|
|
33
|
+
name: r.name,
|
|
34
|
+
salience: Math.round(r.salience * 100) / 100,
|
|
35
|
+
description: r.description,
|
|
36
|
+
}));
|
|
37
|
+
const state = readAwarenessState();
|
|
38
|
+
if (state) {
|
|
39
|
+
palaceContext.insight_count = state.topInsights.length;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
// Palace not initialized
|
|
44
|
+
}
|
|
45
|
+
const hot = [];
|
|
46
|
+
let warmCount = 0;
|
|
47
|
+
let coldCount = 0;
|
|
48
|
+
for (const entry of entries) {
|
|
49
|
+
const ageMs = Date.now() - new Date(entry.date).getTime();
|
|
50
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
51
|
+
if (ageDays <= 1.5) {
|
|
52
|
+
const state = readState(slug, entry.date);
|
|
53
|
+
const fullPath = path.join(entry.dir, entry.file);
|
|
54
|
+
const stats = fs.statSync(fullPath);
|
|
55
|
+
const content = stats.size > 5120
|
|
56
|
+
? fs.readFileSync(fullPath, "utf-8").slice(0, 5120) + "\n...(truncated)"
|
|
57
|
+
: fs.readFileSync(fullPath, "utf-8");
|
|
58
|
+
hot.push({ date: entry.date, state, brief: extractSection(content, "brief") });
|
|
59
|
+
}
|
|
60
|
+
else if (ageDays <= 7) {
|
|
61
|
+
warmCount++;
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
coldCount++;
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return {
|
|
68
|
+
project: slug,
|
|
69
|
+
palace_context: palaceContext,
|
|
70
|
+
cache: {
|
|
71
|
+
hot: { count: hot.length, entries: hot },
|
|
72
|
+
warm: { count: warmCount },
|
|
73
|
+
cold: { count: coldCount },
|
|
74
|
+
},
|
|
75
|
+
total_entries: entries.length,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=journal-cold-start.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-cold-start.js","sourceRoot":"","sources":["../../src/tools-logic/journal-cold-start.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface JournalListInput {
|
|
2
|
+
project?: string;
|
|
3
|
+
limit?: number;
|
|
4
|
+
}
|
|
5
|
+
export interface JournalListResult {
|
|
6
|
+
project: string;
|
|
7
|
+
entries: Array<{
|
|
8
|
+
date: string;
|
|
9
|
+
title: string;
|
|
10
|
+
momentum: string;
|
|
11
|
+
}>;
|
|
12
|
+
}
|
|
13
|
+
export declare function journalList(input: JournalListInput): Promise<JournalListResult>;
|
|
14
|
+
//# sourceMappingURL=journal-list.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-list.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-list.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAerF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { listJournalFiles, extractTitle, extractMomentum } from "../helpers/journal-files.js";
|
|
5
|
+
export async function journalList(input) {
|
|
6
|
+
const slug = await resolveProject(input.project);
|
|
7
|
+
let entries = listJournalFiles(slug);
|
|
8
|
+
const limit = input.limit ?? 10;
|
|
9
|
+
if (limit > 0) {
|
|
10
|
+
entries = entries.slice(0, limit);
|
|
11
|
+
}
|
|
12
|
+
const result = entries.map((e) => {
|
|
13
|
+
const content = fs.readFileSync(path.join(e.dir, e.file), "utf-8");
|
|
14
|
+
return { date: e.date, title: extractTitle(content), momentum: extractMomentum(content) };
|
|
15
|
+
});
|
|
16
|
+
return { project: slug, entries: result };
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=journal-list.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-list.js","sourceRoot":"","sources":["../../src/tools-logic/journal-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAY9F,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;IACrC,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,EAAE,CAAC;IAEhC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IACpC,CAAC;IAED,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;QACnE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,QAAQ,EAAE,eAAe,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5F,CAAC,CAAC,CAAC;IAEH,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;AAC5C,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface JournalProjectsResult {
|
|
2
|
+
projects: Array<{
|
|
3
|
+
slug: string;
|
|
4
|
+
last_entry: string;
|
|
5
|
+
entry_count: number;
|
|
6
|
+
}>;
|
|
7
|
+
journal_root: string;
|
|
8
|
+
}
|
|
9
|
+
export declare function journalProjects(): Promise<JournalProjectsResult>;
|
|
10
|
+
//# sourceMappingURL=journal-projects.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-projects.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-projects.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC3E,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAsB,eAAe,IAAI,OAAO,CAAC,qBAAqB,CAAC,CAMtE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { getRoot } from "../types.js";
|
|
2
|
+
import { listAllProjects } from "../storage/project.js";
|
|
3
|
+
export async function journalProjects() {
|
|
4
|
+
const projects = listAllProjects();
|
|
5
|
+
return {
|
|
6
|
+
projects: projects.map((p) => ({ slug: p.slug, last_entry: p.lastEntry, entry_count: p.entryCount })),
|
|
7
|
+
journal_root: getRoot(),
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=journal-projects.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-projects.js","sourceRoot":"","sources":["../../src/tools-logic/journal-projects.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAOxD,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,MAAM,QAAQ,GAAG,eAAe,EAAE,CAAC;IACnC,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,SAAS,EAAE,WAAW,EAAE,CAAC,CAAC,UAAU,EAAE,CAAC,CAAC;QACrG,YAAY,EAAE,OAAO,EAAE;KACxB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface JournalReadInput {
|
|
2
|
+
date?: string;
|
|
3
|
+
project?: string;
|
|
4
|
+
section?: string;
|
|
5
|
+
}
|
|
6
|
+
export interface JournalReadResult {
|
|
7
|
+
content: string;
|
|
8
|
+
date: string;
|
|
9
|
+
project: string;
|
|
10
|
+
error?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function journalRead(input: JournalReadInput): Promise<JournalReadResult>;
|
|
13
|
+
//# sourceMappingURL=journal-read.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-read.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-read.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,gBAAgB;IAC/B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,WAAW,CAAC,KAAK,EAAE,gBAAgB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAoBrF"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { resolveProject } from "../storage/project.js";
|
|
2
|
+
import { listJournalFiles, readJournalFile } from "../helpers/journal-files.js";
|
|
3
|
+
import { extractSection } from "../helpers/sections.js";
|
|
4
|
+
export async function journalRead(input) {
|
|
5
|
+
const slug = await resolveProject(input.project);
|
|
6
|
+
let targetDate = input.date ?? "latest";
|
|
7
|
+
if (targetDate === "latest") {
|
|
8
|
+
const entries = listJournalFiles(slug);
|
|
9
|
+
if (entries.length === 0) {
|
|
10
|
+
return { content: "", date: "", project: slug, error: `No journal entries found for project '${slug}'` };
|
|
11
|
+
}
|
|
12
|
+
targetDate = entries[0].date;
|
|
13
|
+
}
|
|
14
|
+
const fileContent = readJournalFile(slug, targetDate);
|
|
15
|
+
if (!fileContent) {
|
|
16
|
+
return { content: "", date: targetDate, project: slug, error: `No journal entry found for ${targetDate} in project '${slug}'` };
|
|
17
|
+
}
|
|
18
|
+
const section = input.section ?? "all";
|
|
19
|
+
const extracted = extractSection(fileContent, section);
|
|
20
|
+
return { content: extracted || "", date: targetDate, project: slug };
|
|
21
|
+
}
|
|
22
|
+
//# sourceMappingURL=journal-read.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-read.js","sourceRoot":"","sources":["../../src/tools-logic/journal-read.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAexD,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,KAAuB;IACvD,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,IAAI,UAAU,GAAG,KAAK,CAAC,IAAI,IAAI,QAAQ,CAAC;IAExC,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,OAAO,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,yCAAyC,IAAI,GAAG,EAAE,CAAC;QAC3G,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC/B,CAAC;IAED,MAAM,WAAW,GAAG,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IACtD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,8BAA8B,UAAU,gBAAgB,IAAI,GAAG,EAAE,CAAC;IAClI,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC;IACvC,MAAM,SAAS,GAAG,cAAc,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IACvD,OAAO,EAAE,OAAO,EAAE,SAAS,IAAI,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AACvE,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface JournalRollupInput {
|
|
2
|
+
min_age_days?: number;
|
|
3
|
+
min_entries?: number;
|
|
4
|
+
dry_run?: boolean;
|
|
5
|
+
project?: string;
|
|
6
|
+
}
|
|
7
|
+
export interface JournalRollupResult {
|
|
8
|
+
project: string;
|
|
9
|
+
dry_run: boolean;
|
|
10
|
+
weeksRolledUp: number;
|
|
11
|
+
entriesArchived: number;
|
|
12
|
+
summariesCreated: string[];
|
|
13
|
+
skipped: string[];
|
|
14
|
+
}
|
|
15
|
+
export declare function journalRollup(input: JournalRollupInput): Promise<JournalRollupResult>;
|
|
16
|
+
//# sourceMappingURL=journal-rollup.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-rollup.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-rollup.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,kBAAkB;IACjC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkF3F"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { journalDir } from "../storage/paths.js";
|
|
5
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
6
|
+
import { listJournalFiles, updateIndex } from "../helpers/journal-files.js";
|
|
7
|
+
import { groupByWeek, synthesizeWeek } from "../helpers/rollup.js";
|
|
8
|
+
import { stateFilePath } from "./journal-state.js";
|
|
9
|
+
export async function journalRollup(input) {
|
|
10
|
+
const slug = await resolveProject(input.project);
|
|
11
|
+
const entries = listJournalFiles(slug);
|
|
12
|
+
const dir = journalDir(slug);
|
|
13
|
+
const archiveDir = path.join(dir, "archive");
|
|
14
|
+
const minAgeDays = input.min_age_days ?? 7;
|
|
15
|
+
const minEntries = input.min_entries ?? 2;
|
|
16
|
+
const dryRun = input.dry_run ?? false;
|
|
17
|
+
const result = {
|
|
18
|
+
project: slug,
|
|
19
|
+
dry_run: dryRun,
|
|
20
|
+
weeksRolledUp: 0,
|
|
21
|
+
entriesArchived: 0,
|
|
22
|
+
summariesCreated: [],
|
|
23
|
+
skipped: [],
|
|
24
|
+
};
|
|
25
|
+
const groups = groupByWeek(entries);
|
|
26
|
+
for (const [wk, weekEntries] of groups) {
|
|
27
|
+
const summaryFile = `${wk}.md`;
|
|
28
|
+
if (fs.existsSync(path.join(dir, summaryFile))) {
|
|
29
|
+
result.skipped.push(`${wk}: already exists`);
|
|
30
|
+
continue;
|
|
31
|
+
}
|
|
32
|
+
if (weekEntries.length < minEntries) {
|
|
33
|
+
result.skipped.push(`${wk}: only ${weekEntries.length} entries (need ${minEntries}+)`);
|
|
34
|
+
continue;
|
|
35
|
+
}
|
|
36
|
+
const newestEntry = weekEntries[weekEntries.length - 1];
|
|
37
|
+
const ageMs = Date.now() - new Date(newestEntry.date).getTime();
|
|
38
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
39
|
+
if (ageDays < minAgeDays) {
|
|
40
|
+
result.skipped.push(`${wk}: newest entry ${newestEntry.date} is only ${ageDays.toFixed(0)}d old`);
|
|
41
|
+
continue;
|
|
42
|
+
}
|
|
43
|
+
if (dryRun) {
|
|
44
|
+
result.summariesCreated.push(`${wk} (${weekEntries.length} entries → would create ${summaryFile})`);
|
|
45
|
+
result.entriesArchived += weekEntries.length;
|
|
46
|
+
result.weeksRolledUp++;
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const summary = synthesizeWeek(wk, weekEntries);
|
|
50
|
+
fs.writeFileSync(path.join(dir, summaryFile), summary, "utf-8");
|
|
51
|
+
result.summariesCreated.push(summaryFile);
|
|
52
|
+
ensureDir(archiveDir);
|
|
53
|
+
for (const entry of weekEntries) {
|
|
54
|
+
const srcPath = path.join(entry.dir, entry.file);
|
|
55
|
+
const destPath = path.join(archiveDir, entry.file);
|
|
56
|
+
if (fs.existsSync(srcPath)) {
|
|
57
|
+
fs.copyFileSync(srcPath, destPath);
|
|
58
|
+
fs.unlinkSync(srcPath);
|
|
59
|
+
const stateSrc = stateFilePath(slug, entry.date);
|
|
60
|
+
if (fs.existsSync(stateSrc)) {
|
|
61
|
+
fs.copyFileSync(stateSrc, path.join(archiveDir, `${entry.date}.state.json`));
|
|
62
|
+
fs.unlinkSync(stateSrc);
|
|
63
|
+
}
|
|
64
|
+
const logSrc = path.join(entry.dir, `${entry.date}-log.md`);
|
|
65
|
+
if (fs.existsSync(logSrc)) {
|
|
66
|
+
fs.copyFileSync(logSrc, path.join(archiveDir, `${entry.date}-log.md`));
|
|
67
|
+
fs.unlinkSync(logSrc);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
result.entriesArchived++;
|
|
71
|
+
}
|
|
72
|
+
result.weeksRolledUp++;
|
|
73
|
+
}
|
|
74
|
+
if (!dryRun && result.weeksRolledUp > 0) {
|
|
75
|
+
updateIndex(slug);
|
|
76
|
+
}
|
|
77
|
+
return result;
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=journal-rollup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-rollup.js","sourceRoot":"","sources":["../../src/tools-logic/journal-rollup.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface JournalSearchInput {
|
|
2
|
+
query: string;
|
|
3
|
+
project?: string;
|
|
4
|
+
section?: string;
|
|
5
|
+
include_palace?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export interface JournalSearchResult {
|
|
8
|
+
results: Array<{
|
|
9
|
+
date: string;
|
|
10
|
+
section: string;
|
|
11
|
+
excerpt: string;
|
|
12
|
+
line: number;
|
|
13
|
+
}>;
|
|
14
|
+
}
|
|
15
|
+
export declare function journalSearch(input: JournalSearchInput): Promise<JournalSearchResult>;
|
|
16
|
+
//# sourceMappingURL=journal-search.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-search.d.ts","sourceRoot":"","sources":["../../src/tools-logic/journal-search.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClF;AAED,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA0E3F"}
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import * as fs from "node:fs";
|
|
2
|
+
import * as path from "node:path";
|
|
3
|
+
import { resolveProject } from "../storage/project.js";
|
|
4
|
+
import { journalDirs, palaceDir } from "../storage/paths.js";
|
|
5
|
+
import { ensurePalaceInitialized, listRooms } from "../palace/rooms.js";
|
|
6
|
+
export async function journalSearch(input) {
|
|
7
|
+
const slug = await resolveProject(input.project);
|
|
8
|
+
const dirs = journalDirs(slug);
|
|
9
|
+
const queryLower = input.query.toLowerCase();
|
|
10
|
+
const results = [];
|
|
11
|
+
for (const dir of dirs) {
|
|
12
|
+
if (!fs.existsSync(dir))
|
|
13
|
+
continue;
|
|
14
|
+
const files = fs.readdirSync(dir).filter((f) => f.endsWith(".md"));
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
const filePath = path.join(dir, file);
|
|
17
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
18
|
+
const lines = content.split("\n");
|
|
19
|
+
let currentSection = "top";
|
|
20
|
+
for (let i = 0; i < lines.length; i++) {
|
|
21
|
+
const line = lines[i];
|
|
22
|
+
if (line.startsWith("## ")) {
|
|
23
|
+
currentSection = line.slice(3).trim().toLowerCase().replace(/\s+/g, "_");
|
|
24
|
+
}
|
|
25
|
+
if (input.section && currentSection !== input.section.toLowerCase())
|
|
26
|
+
continue;
|
|
27
|
+
if (line.toLowerCase().includes(queryLower)) {
|
|
28
|
+
const dateMatch = file.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
29
|
+
const date = dateMatch ? dateMatch[1] : file;
|
|
30
|
+
const matchIdx = line.toLowerCase().indexOf(queryLower);
|
|
31
|
+
const start = Math.max(0, matchIdx - 40);
|
|
32
|
+
const end = Math.min(line.length, matchIdx + input.query.length + 40);
|
|
33
|
+
let excerpt = line.slice(start, end).trim();
|
|
34
|
+
if (start > 0)
|
|
35
|
+
excerpt = "..." + excerpt;
|
|
36
|
+
if (end < line.length)
|
|
37
|
+
excerpt = excerpt + "...";
|
|
38
|
+
results.push({ date, section: currentSection, excerpt, line: i + 1 });
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
if (input.include_palace) {
|
|
44
|
+
try {
|
|
45
|
+
ensurePalaceInitialized(slug);
|
|
46
|
+
const pd = palaceDir(slug);
|
|
47
|
+
const rooms = listRooms(slug);
|
|
48
|
+
for (const room of rooms) {
|
|
49
|
+
const roomPath = path.join(pd, "rooms", room.slug);
|
|
50
|
+
if (!fs.existsSync(roomPath))
|
|
51
|
+
continue;
|
|
52
|
+
const files = fs.readdirSync(roomPath).filter((f) => f.endsWith(".md"));
|
|
53
|
+
for (const file of files) {
|
|
54
|
+
const filePath = path.join(roomPath, file);
|
|
55
|
+
const content = fs.readFileSync(filePath, "utf-8");
|
|
56
|
+
const lines = content.split("\n");
|
|
57
|
+
for (let i = 0; i < lines.length; i++) {
|
|
58
|
+
if (lines[i].toLowerCase().includes(queryLower)) {
|
|
59
|
+
const matchIdx = lines[i].toLowerCase().indexOf(queryLower);
|
|
60
|
+
const start = Math.max(0, matchIdx - 40);
|
|
61
|
+
const end = Math.min(lines[i].length, matchIdx + input.query.length + 40);
|
|
62
|
+
let excerpt = lines[i].slice(start, end).trim();
|
|
63
|
+
if (start > 0)
|
|
64
|
+
excerpt = "..." + excerpt;
|
|
65
|
+
if (end < lines[i].length)
|
|
66
|
+
excerpt = excerpt + "...";
|
|
67
|
+
results.push({ date: `palace:${room.slug}`, section: file.replace(".md", ""), excerpt, line: i + 1 });
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Palace search is optional
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
results.sort((a, b) => b.date.localeCompare(a.date));
|
|
78
|
+
return { results };
|
|
79
|
+
}
|
|
80
|
+
//# sourceMappingURL=journal-search.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-search.js","sourceRoot":"","sources":["../../src/tools-logic/journal-search.ts"],"names":[],"mappings":"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"}
|