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.
Files changed (165) hide show
  1. package/dist/helpers/journal-files.d.ts +30 -0
  2. package/dist/helpers/journal-files.d.ts.map +1 -0
  3. package/dist/helpers/journal-files.js +96 -0
  4. package/dist/helpers/journal-files.js.map +1 -0
  5. package/dist/helpers/rollup.d.ts +35 -0
  6. package/dist/helpers/rollup.d.ts.map +1 -0
  7. package/dist/helpers/rollup.js +78 -0
  8. package/dist/helpers/rollup.js.map +1 -0
  9. package/dist/helpers/sections.d.ts +12 -0
  10. package/dist/helpers/sections.d.ts.map +1 -0
  11. package/dist/helpers/sections.js +84 -0
  12. package/dist/helpers/sections.js.map +1 -0
  13. package/dist/index.d.ts +52 -0
  14. package/dist/index.d.ts.map +1 -0
  15. package/dist/index.js +63 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/palace/awareness.d.ts +67 -0
  18. package/dist/palace/awareness.d.ts.map +1 -0
  19. package/dist/palace/awareness.js +231 -0
  20. package/dist/palace/awareness.js.map +1 -0
  21. package/dist/palace/consolidate.d.ts +28 -0
  22. package/dist/palace/consolidate.d.ts.map +1 -0
  23. package/dist/palace/consolidate.js +129 -0
  24. package/dist/palace/consolidate.js.map +1 -0
  25. package/dist/palace/fan-out.d.ts +15 -0
  26. package/dist/palace/fan-out.d.ts.map +1 -0
  27. package/dist/palace/fan-out.js +78 -0
  28. package/dist/palace/fan-out.js.map +1 -0
  29. package/dist/palace/graph.d.ts +11 -0
  30. package/dist/palace/graph.d.ts.map +1 -0
  31. package/dist/palace/graph.js +59 -0
  32. package/dist/palace/graph.js.map +1 -0
  33. package/dist/palace/identity.d.ts +6 -0
  34. package/dist/palace/identity.d.ts.map +1 -0
  35. package/dist/palace/identity.js +18 -0
  36. package/dist/palace/identity.js.map +1 -0
  37. package/dist/palace/index-manager.d.ts +7 -0
  38. package/dist/palace/index-manager.d.ts.map +1 -0
  39. package/dist/palace/index-manager.js +46 -0
  40. package/dist/palace/index-manager.js.map +1 -0
  41. package/dist/palace/insights-index.d.ts +39 -0
  42. package/dist/palace/insights-index.d.ts.map +1 -0
  43. package/dist/palace/insights-index.js +101 -0
  44. package/dist/palace/insights-index.js.map +1 -0
  45. package/dist/palace/log.d.ts +9 -0
  46. package/dist/palace/log.d.ts.map +1 -0
  47. package/dist/palace/log.js +28 -0
  48. package/dist/palace/log.js.map +1 -0
  49. package/dist/palace/obsidian.d.ts +12 -0
  50. package/dist/palace/obsidian.d.ts.map +1 -0
  51. package/dist/palace/obsidian.js +76 -0
  52. package/dist/palace/obsidian.js.map +1 -0
  53. package/dist/palace/rooms.d.ts +14 -0
  54. package/dist/palace/rooms.d.ts.map +1 -0
  55. package/dist/palace/rooms.js +117 -0
  56. package/dist/palace/rooms.js.map +1 -0
  57. package/dist/palace/salience.d.ts +15 -0
  58. package/dist/palace/salience.d.ts.map +1 -0
  59. package/dist/palace/salience.js +33 -0
  60. package/dist/palace/salience.js.map +1 -0
  61. package/dist/storage/fs-utils.d.ts +8 -0
  62. package/dist/storage/fs-utils.d.ts.map +1 -0
  63. package/dist/storage/fs-utils.js +28 -0
  64. package/dist/storage/fs-utils.js.map +1 -0
  65. package/dist/storage/paths.d.ts +21 -0
  66. package/dist/storage/paths.d.ts.map +1 -0
  67. package/dist/storage/paths.js +71 -0
  68. package/dist/storage/paths.js.map +1 -0
  69. package/dist/storage/project.d.ts +17 -0
  70. package/dist/storage/project.d.ts.map +1 -0
  71. package/dist/storage/project.js +131 -0
  72. package/dist/storage/project.js.map +1 -0
  73. package/dist/tools-logic/alignment-check.d.ts +19 -0
  74. package/dist/tools-logic/alignment-check.d.ts.map +1 -0
  75. package/dist/tools-logic/alignment-check.js +54 -0
  76. package/dist/tools-logic/alignment-check.js.map +1 -0
  77. package/dist/tools-logic/awareness-update.d.ts +23 -0
  78. package/dist/tools-logic/awareness-update.d.ts.map +1 -0
  79. package/dist/tools-logic/awareness-update.js +47 -0
  80. package/dist/tools-logic/awareness-update.js.map +1 -0
  81. package/dist/tools-logic/context-synthesize.d.ts +17 -0
  82. package/dist/tools-logic/context-synthesize.d.ts.map +1 -0
  83. package/dist/tools-logic/context-synthesize.js +174 -0
  84. package/dist/tools-logic/context-synthesize.js.map +1 -0
  85. package/dist/tools-logic/journal-archive.d.ts +11 -0
  86. package/dist/tools-logic/journal-archive.d.ts.map +1 -0
  87. package/dist/tools-logic/journal-archive.js +47 -0
  88. package/dist/tools-logic/journal-archive.js.map +1 -0
  89. package/dist/tools-logic/journal-capture.d.ts +16 -0
  90. package/dist/tools-logic/journal-capture.d.ts.map +1 -0
  91. package/dist/tools-logic/journal-capture.js +57 -0
  92. package/dist/tools-logic/journal-capture.js.map +1 -0
  93. package/dist/tools-logic/journal-cold-start.d.ts +37 -0
  94. package/dist/tools-logic/journal-cold-start.d.ts.map +1 -0
  95. package/dist/tools-logic/journal-cold-start.js +78 -0
  96. package/dist/tools-logic/journal-cold-start.js.map +1 -0
  97. package/dist/tools-logic/journal-list.d.ts +14 -0
  98. package/dist/tools-logic/journal-list.d.ts.map +1 -0
  99. package/dist/tools-logic/journal-list.js +18 -0
  100. package/dist/tools-logic/journal-list.js.map +1 -0
  101. package/dist/tools-logic/journal-projects.d.ts +10 -0
  102. package/dist/tools-logic/journal-projects.d.ts.map +1 -0
  103. package/dist/tools-logic/journal-projects.js +10 -0
  104. package/dist/tools-logic/journal-projects.js.map +1 -0
  105. package/dist/tools-logic/journal-read.d.ts +13 -0
  106. package/dist/tools-logic/journal-read.d.ts.map +1 -0
  107. package/dist/tools-logic/journal-read.js +22 -0
  108. package/dist/tools-logic/journal-read.js.map +1 -0
  109. package/dist/tools-logic/journal-rollup.d.ts +16 -0
  110. package/dist/tools-logic/journal-rollup.d.ts.map +1 -0
  111. package/dist/tools-logic/journal-rollup.js +79 -0
  112. package/dist/tools-logic/journal-rollup.js.map +1 -0
  113. package/dist/tools-logic/journal-search.d.ts +16 -0
  114. package/dist/tools-logic/journal-search.d.ts.map +1 -0
  115. package/dist/tools-logic/journal-search.js +80 -0
  116. package/dist/tools-logic/journal-search.js.map +1 -0
  117. package/dist/tools-logic/journal-state.d.ts +26 -0
  118. package/dist/tools-logic/journal-state.d.ts.map +1 -0
  119. package/dist/tools-logic/journal-state.js +80 -0
  120. package/dist/tools-logic/journal-state.js.map +1 -0
  121. package/dist/tools-logic/journal-write.d.ts +18 -0
  122. package/dist/tools-logic/journal-write.d.ts.map +1 -0
  123. package/dist/tools-logic/journal-write.js +54 -0
  124. package/dist/tools-logic/journal-write.js.map +1 -0
  125. package/dist/tools-logic/knowledge-read.d.ts +7 -0
  126. package/dist/tools-logic/knowledge-read.d.ts.map +1 -0
  127. package/dist/tools-logic/knowledge-read.js +88 -0
  128. package/dist/tools-logic/knowledge-read.js.map +1 -0
  129. package/dist/tools-logic/knowledge-write.d.ts +23 -0
  130. package/dist/tools-logic/knowledge-write.d.ts.map +1 -0
  131. package/dist/tools-logic/knowledge-write.js +58 -0
  132. package/dist/tools-logic/knowledge-write.js.map +1 -0
  133. package/dist/tools-logic/nudge.d.ts +15 -0
  134. package/dist/tools-logic/nudge.d.ts.map +1 -0
  135. package/dist/tools-logic/nudge.js +27 -0
  136. package/dist/tools-logic/nudge.js.map +1 -0
  137. package/dist/tools-logic/palace-lint.d.ts +20 -0
  138. package/dist/tools-logic/palace-lint.d.ts.map +1 -0
  139. package/dist/tools-logic/palace-lint.js +87 -0
  140. package/dist/tools-logic/palace-lint.js.map +1 -0
  141. package/dist/tools-logic/palace-read.d.ts +24 -0
  142. package/dist/tools-logic/palace-read.d.ts.map +1 -0
  143. package/dist/tools-logic/palace-read.js +45 -0
  144. package/dist/tools-logic/palace-read.js.map +1 -0
  145. package/dist/tools-logic/palace-search.d.ts +19 -0
  146. package/dist/tools-logic/palace-search.d.ts.map +1 -0
  147. package/dist/tools-logic/palace-search.js +46 -0
  148. package/dist/tools-logic/palace-search.js.map +1 -0
  149. package/dist/tools-logic/palace-walk.d.ts +18 -0
  150. package/dist/tools-logic/palace-walk.d.ts.map +1 -0
  151. package/dist/tools-logic/palace-walk.js +89 -0
  152. package/dist/tools-logic/palace-walk.js.map +1 -0
  153. package/dist/tools-logic/palace-write.d.ts +22 -0
  154. package/dist/tools-logic/palace-write.d.ts.map +1 -0
  155. package/dist/tools-logic/palace-write.js +60 -0
  156. package/dist/tools-logic/palace-write.js.map +1 -0
  157. package/dist/tools-logic/recall-insight.d.ts +20 -0
  158. package/dist/tools-logic/recall-insight.d.ts.map +1 -0
  159. package/dist/tools-logic/recall-insight.js +27 -0
  160. package/dist/tools-logic/recall-insight.js.map +1 -0
  161. package/dist/types.d.ts +123 -0
  162. package/dist/types.d.ts.map +1 -0
  163. package/dist/types.js +54 -0
  164. package/dist/types.js.map +1 -0
  165. 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":"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,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AAC7D,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAC9D,OAAO,EAAE,uBAAuB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,sBAAsB,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAgB/D,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAA0B;IAC7D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,QAAQ,EAAE,CAAC;IACxB,MAAM,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;IAC7B,SAAS,CAAC,GAAG,CAAC,CAAC;IAEf,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,SAAS,CAAC,CAAC;IACjD,MAAM,QAAQ,GAAG,eAAe,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,IAAI,KAAK,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IACxF,MAAM,SAAS,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEzD,IAAI,KAAK,GAAG,QAAQ,QAAQ,KAAK,SAAS,IAAI,MAAM,MAAM,CAAC;IAC3D,KAAK,IAAI,UAAU,KAAK,CAAC,QAAQ,MAAM,CAAC;IACxC,KAAK,IAAI,UAAU,KAAK,CAAC,MAAM,MAAM,CAAC;IAEtC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,KAAK,IAAI,MAAM,IAAI,oBAAoB,CAAC;QACvD,EAAE,CAAC,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,EAAE,OAAO,CAAC,CAAC;IACrD,CAAC;SAAM,CAAC;QACN,EAAE,CAAC,cAAc,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,YAAY,GAAmC,IAAI,CAAC;IACxD,IAAI,KAAK,CAAC,WAAW,EAAE,CAAC;QACtB,IAAI,CAAC;YACH,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,CAAC,EAAE,CAAC;gBACzC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,2BAA2B,EAAE,EAAE,CAAC,CAAC;YAC/I,CAAC;YAED,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAC5E,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC;YAEpC,MAAM,YAAY,GAAG,UAAU,QAAQ,KAAK,IAAI,aAAa,KAAK,CAAC,QAAQ,YAAY,KAAK,CAAC,MAAM,IAAI,CAAC;YACxG,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;gBAC9B,EAAE,CAAC,cAAc,CAAC,UAAU,EAAE,YAAY,EAAE,OAAO,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,KAAK,KAAK,CAAC,WAAW,gBAAgB,YAAY,EAAE,EAAE,OAAO,CAAC,CAAC;YAC9F,CAAC;YAED,MAAM,CAAC,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC,QAAQ,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,QAAQ,CAAC,CAAC;YAC/F,iBAAiB,CAAC,IAAI,CAAC,CAAC;YACxB,YAAY,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,iCAAiC;QACnC,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;AACzE,CAAC"}
@@ -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":"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,WAAW,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,uBAAuB,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAaxE,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAyB;IAC3D,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;IAE7C,MAAM,OAAO,GAAmC,EAAE,CAAC;IAEnD,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,MAAM,KAAK,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;QAEnE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,IAAI,cAAc,GAAG,KAAK,CAAC;YAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;gBACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;gBACtB,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC3B,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;gBAC3E,CAAC;gBACD,IAAI,KAAK,CAAC,OAAO,IAAI,cAAc,KAAK,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE;oBAAE,SAAS;gBAC9E,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;oBAC5C,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;oBACrD,MAAM,IAAI,GAAG,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;oBAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;oBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;oBACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;oBACtE,IAAI,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;oBAC5C,IAAI,KAAK,GAAG,CAAC;wBAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;oBACzC,IAAI,GAAG,GAAG,IAAI,CAAC,MAAM;wBAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;oBACjD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBACxE,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,cAAc,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,uBAAuB,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,EAAE,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAC3B,MAAM,KAAK,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;YAE9B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC;oBAAE,SAAS;gBACvC,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;gBAExE,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;oBAC3C,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAElC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;wBACtC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;4BAChD,MAAM,QAAQ,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;4BAC5D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;4BACzC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC;4BAC1E,IAAI,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;4BAChD,IAAI,KAAK,GAAG,CAAC;gCAAE,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;4BACzC,IAAI,GAAG,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM;gCAAE,OAAO,GAAG,OAAO,GAAG,KAAK,CAAC;4BACrD,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,UAAU,IAAI,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;wBACxG,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,4BAA4B;QAC9B,CAAC;IACH,CAAC;IAED,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IACrD,OAAO,EAAE,OAAO,EAAE,CAAC;AACrB,CAAC"}