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,73 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { resolveProject } from "../storage/project.js";
|
|
5
|
+
import { journalDir, palaceDir } from "../storage/paths.js";
|
|
6
|
+
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
7
|
+
import { ensurePalaceInitialized, roomExists } from "../palace/rooms.js";
|
|
8
|
+
import { updatePalaceIndex } from "../palace/index-manager.js";
|
|
9
|
+
export function register(server) {
|
|
10
|
+
server.registerTool("alignment_check", {
|
|
11
|
+
title: "Alignment Check",
|
|
12
|
+
description: "Record what the agent understood, its confidence, and any human correction. Measures the Intelligent Distance gap.",
|
|
13
|
+
inputSchema: {
|
|
14
|
+
goal: z.string().describe("Agent's understanding of the goal"),
|
|
15
|
+
confidence: z.enum(["high", "medium", "low"]).describe("Agent's confidence"),
|
|
16
|
+
assumptions: z.array(z.string()).optional().describe("What agent assumed"),
|
|
17
|
+
unclear: z.string().optional().describe("What agent is unsure about"),
|
|
18
|
+
human_correction: z.string().optional().describe("Human's correction or 'confirmed'"),
|
|
19
|
+
delta: z.string().optional().describe("The gap, or 'none'"),
|
|
20
|
+
category: z.enum(["goal", "scope", "priority", "technical", "aesthetic"]).default("goal"),
|
|
21
|
+
project: z.string().default("auto"),
|
|
22
|
+
},
|
|
23
|
+
}, async ({ goal, confidence, assumptions, unclear, human_correction, delta, category, project }) => {
|
|
24
|
+
const slug = await resolveProject(project);
|
|
25
|
+
const date = todayISO();
|
|
26
|
+
const dir = journalDir(slug);
|
|
27
|
+
ensureDir(dir);
|
|
28
|
+
const time = new Date().toISOString().slice(11, 19);
|
|
29
|
+
const assumeStr = assumptions?.length ? assumptions.map(a => ` - ${a}`).join("\n") : " (none)";
|
|
30
|
+
let entry = `### Alignment (${time})\n`;
|
|
31
|
+
entry += `**Goal**: ${goal}\n**Confidence**: ${confidence}\n**Category**: ${category}\n`;
|
|
32
|
+
entry += `**Assumptions**:\n${assumeStr}\n`;
|
|
33
|
+
if (unclear)
|
|
34
|
+
entry += `**Unclear**: ${unclear}\n`;
|
|
35
|
+
if (human_correction)
|
|
36
|
+
entry += `**Human**: ${human_correction}\n**Delta**: ${delta || "not specified"}\n`;
|
|
37
|
+
entry += "\n";
|
|
38
|
+
const logPath = path.join(dir, `${date}-alignment.md`);
|
|
39
|
+
if (!fs.existsSync(logPath)) {
|
|
40
|
+
fs.writeFileSync(logPath, `# ${date} — Alignment Records\n\n---\n\n${entry}`, "utf-8");
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
fs.appendFileSync(logPath, entry, "utf-8");
|
|
44
|
+
}
|
|
45
|
+
// Palace integration: also write to alignment room
|
|
46
|
+
try {
|
|
47
|
+
ensurePalaceInitialized(slug);
|
|
48
|
+
if (roomExists(slug, "alignment")) {
|
|
49
|
+
const pd = palaceDir(slug);
|
|
50
|
+
const alignFile = path.join(pd, "rooms", "alignment", `${category}.md`);
|
|
51
|
+
ensureDir(path.dirname(alignFile));
|
|
52
|
+
const palaceEntry = `\n### ${date} ${time} — ${confidence}\n**Goal**: ${goal}\n`;
|
|
53
|
+
if (human_correction) {
|
|
54
|
+
const corrEntry = palaceEntry + `**Human correction**: ${human_correction}\n**Delta**: ${delta || "pending"}\n`;
|
|
55
|
+
if (fs.existsSync(alignFile)) {
|
|
56
|
+
fs.appendFileSync(alignFile, corrEntry, "utf-8");
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
fs.writeFileSync(alignFile, `# alignment / ${category}\n${corrEntry}`, "utf-8");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
updatePalaceIndex(slug);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
catch {
|
|
66
|
+
// Palace integration is optional
|
|
67
|
+
}
|
|
68
|
+
return {
|
|
69
|
+
content: [{ type: "text", text: JSON.stringify({ success: true, date, confidence, delta: delta || "pending", file: logPath }) }],
|
|
70
|
+
};
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
//# sourceMappingURL=alignment-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment-check.js","sourceRoot":"","sources":["../../src/tools/alignment-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: awareness_update — Update the awareness system with new insights.
|
|
3
|
+
*
|
|
4
|
+
* Called at end of session. Merges new insights into the living awareness.md.
|
|
5
|
+
* The 200-line constraint forces compression and compounding.
|
|
6
|
+
*/
|
|
7
|
+
import type { ServerType } from "../server.js";
|
|
8
|
+
export declare function register(server: ServerType): void;
|
|
9
|
+
//# sourceMappingURL=awareness-update.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awareness-update.d.ts","sourceRoot":"","sources":["../../src/tools/awareness-update.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAU/C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI,CAwFjD"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tool: awareness_update — Update the awareness system with new insights.
|
|
3
|
+
*
|
|
4
|
+
* Called at end of session. Merges new insights into the living awareness.md.
|
|
5
|
+
* The 200-line constraint forces compression and compounding.
|
|
6
|
+
*/
|
|
7
|
+
import * as z from "zod/v4";
|
|
8
|
+
import { readAwarenessState, initAwareness, addInsight, detectCompoundInsights, renderAwareness, } from "../palace/awareness.js";
|
|
9
|
+
import { addIndexedInsight } from "../palace/insights-index.js";
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.registerTool("awareness_update", {
|
|
12
|
+
title: "Update Awareness",
|
|
13
|
+
description: "Add insights to the awareness system. Call at end of session. " +
|
|
14
|
+
"New insights are merged with existing ones (strengthening confirmed patterns) " +
|
|
15
|
+
"or added (demoting least-relevant if over 10). " +
|
|
16
|
+
"Also updates the cross-project insights index.",
|
|
17
|
+
inputSchema: {
|
|
18
|
+
insights: z.array(z.object({
|
|
19
|
+
title: z.string().describe("One-line insight title"),
|
|
20
|
+
evidence: z.string().describe("What happened that confirmed this insight"),
|
|
21
|
+
applies_when: z.array(z.string()).describe("Situations where this insight is relevant (keywords)"),
|
|
22
|
+
source: z.string().describe("Where this was learned (project name, date, context)"),
|
|
23
|
+
severity: z.enum(["critical", "important", "minor"]).default("important"),
|
|
24
|
+
})).describe("1-5 insights from this session"),
|
|
25
|
+
trajectory: z.string().optional().describe("Where is the work heading? One line."),
|
|
26
|
+
blind_spots: z.array(z.string()).optional().describe("What might matter but hasn't been explored?"),
|
|
27
|
+
identity: z.string().optional().describe("Update user identity (only on first use or major change)"),
|
|
28
|
+
},
|
|
29
|
+
}, async ({ insights, trajectory, blind_spots, identity }) => {
|
|
30
|
+
// Initialize if needed
|
|
31
|
+
let state = readAwarenessState();
|
|
32
|
+
if (!state) {
|
|
33
|
+
state = initAwareness(identity || "(unknown user)");
|
|
34
|
+
}
|
|
35
|
+
// Update identity if provided
|
|
36
|
+
if (identity) {
|
|
37
|
+
state.identity = identity;
|
|
38
|
+
}
|
|
39
|
+
// Process each insight
|
|
40
|
+
const results = [];
|
|
41
|
+
for (const insight of insights) {
|
|
42
|
+
const result = addInsight({
|
|
43
|
+
title: insight.title,
|
|
44
|
+
evidence: insight.evidence,
|
|
45
|
+
appliesWhen: insight.applies_when,
|
|
46
|
+
source: insight.source,
|
|
47
|
+
});
|
|
48
|
+
results.push({ title: insight.title, action: result.action });
|
|
49
|
+
// Also add to cross-project insights index
|
|
50
|
+
addIndexedInsight({
|
|
51
|
+
title: insight.title,
|
|
52
|
+
source: insight.source,
|
|
53
|
+
applies_when: insight.applies_when,
|
|
54
|
+
file: undefined,
|
|
55
|
+
severity: insight.severity,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
// Update trajectory
|
|
59
|
+
if (trajectory) {
|
|
60
|
+
state = readAwarenessState();
|
|
61
|
+
state.trajectory = trajectory;
|
|
62
|
+
}
|
|
63
|
+
// Update blind spots
|
|
64
|
+
if (blind_spots && blind_spots.length > 0) {
|
|
65
|
+
state = readAwarenessState();
|
|
66
|
+
state.blindSpots = blind_spots.slice(0, 5);
|
|
67
|
+
}
|
|
68
|
+
// Save and render
|
|
69
|
+
if (state) {
|
|
70
|
+
state.lastUpdated = new Date().toISOString();
|
|
71
|
+
const { writeAwarenessState } = await import("../palace/awareness.js");
|
|
72
|
+
writeAwarenessState(state);
|
|
73
|
+
renderAwareness(state);
|
|
74
|
+
}
|
|
75
|
+
// Detect compound insights
|
|
76
|
+
const compounds = detectCompoundInsights();
|
|
77
|
+
return {
|
|
78
|
+
content: [{
|
|
79
|
+
type: "text",
|
|
80
|
+
text: JSON.stringify({
|
|
81
|
+
success: true,
|
|
82
|
+
insights_processed: results,
|
|
83
|
+
compound_insights_detected: compounds.length,
|
|
84
|
+
total_insights: readAwarenessState()?.topInsights.length ?? 0,
|
|
85
|
+
}),
|
|
86
|
+
}],
|
|
87
|
+
};
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=awareness-update.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"awareness-update.js","sourceRoot":"","sources":["../../src/tools/awareness-update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-synthesize.d.ts","sourceRoot":"","sources":["../../src/tools/context-synthesize.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAczE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0MhD"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { resolveProject } from "../storage/project.js";
|
|
5
|
+
import { journalDir, palaceDir } from "../storage/paths.js";
|
|
6
|
+
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
7
|
+
import { listJournalFiles } from "../helpers/journal-files.js";
|
|
8
|
+
import { extractSection } from "../helpers/sections.js";
|
|
9
|
+
import { ensurePalaceInitialized, listRooms, roomExists, createRoom } from "../palace/rooms.js";
|
|
10
|
+
import { fanOut } from "../palace/fan-out.js";
|
|
11
|
+
import { generateFrontmatter } from "../palace/obsidian.js";
|
|
12
|
+
import { updatePalaceIndex } from "../palace/index-manager.js";
|
|
13
|
+
export function register(server) {
|
|
14
|
+
server.registerTool("context_synthesize", {
|
|
15
|
+
title: "Synthesize Context",
|
|
16
|
+
description: "Generate L3 semantic synthesis from recent journals and palace rooms. " +
|
|
17
|
+
"Use consolidate=true to write synthesis results into palace rooms as consolidated memories.",
|
|
18
|
+
inputSchema: {
|
|
19
|
+
entries: z.number().int().default(5).describe("Number of recent entries to analyze"),
|
|
20
|
+
focus: z.enum(["full", "decisions", "blockers", "goals"]).default("full"),
|
|
21
|
+
include_palace: z.boolean().default(true).describe("Include palace room summaries in synthesis"),
|
|
22
|
+
consolidate: z.boolean().default(false).describe("Write synthesis results into palace rooms"),
|
|
23
|
+
project: z.string().default("auto"),
|
|
24
|
+
},
|
|
25
|
+
}, async ({ entries: count, focus, include_palace, consolidate, project }) => {
|
|
26
|
+
const slug = await resolveProject(project);
|
|
27
|
+
const journalEntries = listJournalFiles(slug);
|
|
28
|
+
if (journalEntries.length === 0) {
|
|
29
|
+
return { content: [{ type: "text", text: JSON.stringify({ error: `No entries for '${slug}'` }) }], isError: true };
|
|
30
|
+
}
|
|
31
|
+
const toRead = journalEntries.slice(0, count);
|
|
32
|
+
const data = [];
|
|
33
|
+
for (const entry of toRead) {
|
|
34
|
+
const content = fs.readFileSync(path.join(entry.dir, entry.file), "utf-8");
|
|
35
|
+
data.push({
|
|
36
|
+
date: entry.date,
|
|
37
|
+
brief: extractSection(content, "brief"),
|
|
38
|
+
decisions: extractSection(content, "decisions"),
|
|
39
|
+
blockers: extractSection(content, "blockers"),
|
|
40
|
+
next: extractSection(content, "next"),
|
|
41
|
+
observations: extractSection(content, "observations"),
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
let syn = `# L3 Synthesis — ${slug}\n`;
|
|
45
|
+
syn += `> ${toRead.length} entries: ${toRead[toRead.length - 1]?.date} → ${toRead[0]?.date}\n\n`;
|
|
46
|
+
// Goal evolution
|
|
47
|
+
if (focus === "full" || focus === "goals") {
|
|
48
|
+
syn += `## Goal Evolution\n\n`;
|
|
49
|
+
for (const e of data) {
|
|
50
|
+
if (e.brief)
|
|
51
|
+
syn += `**${e.date}**: ${e.brief.split("\n")[0]}\n`;
|
|
52
|
+
}
|
|
53
|
+
syn += "\n";
|
|
54
|
+
}
|
|
55
|
+
// Decisions
|
|
56
|
+
if (focus === "full" || focus === "decisions") {
|
|
57
|
+
syn += `## Decisions\n\n`;
|
|
58
|
+
const allDecisions = [];
|
|
59
|
+
for (const e of data) {
|
|
60
|
+
if (e.decisions)
|
|
61
|
+
allDecisions.push(`**${e.date}**:\n${e.decisions}\n`);
|
|
62
|
+
}
|
|
63
|
+
syn += allDecisions.length > 0 ? allDecisions.join("\n") : "(none recorded)\n";
|
|
64
|
+
if (allDecisions.length >= 2) {
|
|
65
|
+
syn += "\n### Potential Contradictions\n\n";
|
|
66
|
+
syn += "Review the decisions above. Flag if:\n";
|
|
67
|
+
syn += "- A decision from an earlier date was reversed without explanation\n";
|
|
68
|
+
syn += "- The same topic has conflicting approaches across dates\n";
|
|
69
|
+
syn += "- A goal stated in one entry differs from another\n\n";
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// Blockers
|
|
73
|
+
if (focus === "full" || focus === "blockers") {
|
|
74
|
+
syn += `## Active Blockers\n\n`;
|
|
75
|
+
const latest = data.find(e => e.blockers);
|
|
76
|
+
syn += latest ? `**${latest.date}**:\n${latest.blockers}\n\n` : "(none)\n\n";
|
|
77
|
+
const oldBlockers = data.filter(e => e.blockers && e !== latest);
|
|
78
|
+
if (oldBlockers.length > 0) {
|
|
79
|
+
syn += "### Recurring Blockers (appeared in older entries too)\n\n";
|
|
80
|
+
for (const ob of oldBlockers.slice(0, 2)) {
|
|
81
|
+
syn += `**${ob.date}**: ${ob.blockers?.split("\n")[0] || ""}\n`;
|
|
82
|
+
}
|
|
83
|
+
syn += "\n";
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
// Observations
|
|
87
|
+
if (focus === "full") {
|
|
88
|
+
const obs = data.filter(e => e.observations);
|
|
89
|
+
if (obs.length > 0) {
|
|
90
|
+
syn += `## Patterns from Agent Observations\n\n`;
|
|
91
|
+
for (const o of obs.slice(0, 3)) {
|
|
92
|
+
syn += `**${o.date}**: ${o.observations?.split("\n").slice(0, 2).join(" ") || ""}\n`;
|
|
93
|
+
}
|
|
94
|
+
syn += "\n";
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
// Today's alignment
|
|
98
|
+
const alignPath = path.join(journalDir(slug), `${todayISO()}-alignment.md`);
|
|
99
|
+
if (fs.existsSync(alignPath)) {
|
|
100
|
+
const alignContent = fs.readFileSync(alignPath, "utf-8");
|
|
101
|
+
const checks = (alignContent.match(/### .*Alignment/g) || []).length;
|
|
102
|
+
const nudges = (alignContent.match(/### .*Nudge/g) || []).length;
|
|
103
|
+
const low = (alignContent.match(/Confidence: low/g) || []).length;
|
|
104
|
+
if (checks > 0 || nudges > 0) {
|
|
105
|
+
syn += `## Today's Alignment\n\n`;
|
|
106
|
+
syn += `- Alignment checks: ${checks}\n- Nudges: ${nudges}\n- Low confidence: ${low}\n\n`;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
// Palace room summaries
|
|
110
|
+
let palaceRoomCount = 0;
|
|
111
|
+
if (include_palace) {
|
|
112
|
+
try {
|
|
113
|
+
ensurePalaceInitialized(slug);
|
|
114
|
+
const rooms = listRooms(slug);
|
|
115
|
+
if (rooms.length > 0) {
|
|
116
|
+
syn += `## Memory Palace — Room Summaries\n\n`;
|
|
117
|
+
for (const room of rooms.slice(0, 5)) {
|
|
118
|
+
syn += `- **${room.name}** (salience: ${room.salience.toFixed(2)}) — ${room.description}\n`;
|
|
119
|
+
if (room.connections.length > 0) {
|
|
120
|
+
syn += ` Connected to: ${room.connections.join(", ")}\n`;
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
syn += "\n";
|
|
124
|
+
palaceRoomCount = rooms.length;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
// Palace not initialized, skip
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// Consolidation: write synthesis into palace rooms
|
|
132
|
+
let consolidated = 0;
|
|
133
|
+
if (consolidate) {
|
|
134
|
+
try {
|
|
135
|
+
ensurePalaceInitialized(slug);
|
|
136
|
+
const pd = palaceDir(slug);
|
|
137
|
+
const date = todayISO();
|
|
138
|
+
// Consolidate decisions → architecture room
|
|
139
|
+
const decisionsData = data.filter(e => e.decisions).map(e => `**${e.date}**: ${e.decisions}`).join("\n");
|
|
140
|
+
if (decisionsData) {
|
|
141
|
+
if (!roomExists(slug, "architecture")) {
|
|
142
|
+
createRoom(slug, "architecture", "Architecture", "Technical decisions and patterns", ["technical"]);
|
|
143
|
+
}
|
|
144
|
+
const decPath = path.join(pd, "rooms", "architecture", "decisions.md");
|
|
145
|
+
ensureDir(path.dirname(decPath));
|
|
146
|
+
const entry = `\n### Consolidated ${date}\n\n${decisionsData}\n`;
|
|
147
|
+
if (fs.existsSync(decPath)) {
|
|
148
|
+
fs.appendFileSync(decPath, entry, "utf-8");
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
const fm = generateFrontmatter({ room: "architecture", topic: "decisions", created: new Date().toISOString(), source: "consolidation" });
|
|
152
|
+
fs.writeFileSync(decPath, `${fm}# architecture / decisions\n${entry}`, "utf-8");
|
|
153
|
+
}
|
|
154
|
+
fanOut(slug, "architecture", "decisions", decisionsData, ["goals"], "high");
|
|
155
|
+
consolidated++;
|
|
156
|
+
}
|
|
157
|
+
// Consolidate goals → goals room
|
|
158
|
+
const goalsData = data.filter(e => e.brief).map(e => `**${e.date}**: ${e.brief?.split("\n")[0]}`).join("\n");
|
|
159
|
+
if (goalsData) {
|
|
160
|
+
const evoPath = path.join(pd, "rooms", "goals", "evolution.md");
|
|
161
|
+
ensureDir(path.dirname(evoPath));
|
|
162
|
+
const entry = `\n### Consolidated ${date}\n\n${goalsData}\n`;
|
|
163
|
+
if (fs.existsSync(evoPath)) {
|
|
164
|
+
fs.appendFileSync(evoPath, entry, "utf-8");
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
const fm = generateFrontmatter({ room: "goals", topic: "evolution", created: new Date().toISOString(), source: "consolidation" });
|
|
168
|
+
fs.writeFileSync(evoPath, `${fm}# goals / evolution\n${entry}`, "utf-8");
|
|
169
|
+
}
|
|
170
|
+
consolidated++;
|
|
171
|
+
}
|
|
172
|
+
// Consolidate blockers → blockers room
|
|
173
|
+
const blockersData = data.filter(e => e.blockers).map(e => `**${e.date}**: ${e.blockers?.split("\n")[0]}`).join("\n");
|
|
174
|
+
if (blockersData) {
|
|
175
|
+
const blkPath = path.join(pd, "rooms", "blockers", "history.md");
|
|
176
|
+
ensureDir(path.dirname(blkPath));
|
|
177
|
+
const entry = `\n### Consolidated ${date}\n\n${blockersData}\n`;
|
|
178
|
+
if (fs.existsSync(blkPath)) {
|
|
179
|
+
fs.appendFileSync(blkPath, entry, "utf-8");
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
const fm = generateFrontmatter({ room: "blockers", topic: "history", created: new Date().toISOString(), source: "consolidation" });
|
|
183
|
+
fs.writeFileSync(blkPath, `${fm}# blockers / history\n${entry}`, "utf-8");
|
|
184
|
+
}
|
|
185
|
+
consolidated++;
|
|
186
|
+
}
|
|
187
|
+
updatePalaceIndex(slug);
|
|
188
|
+
}
|
|
189
|
+
catch {
|
|
190
|
+
// Consolidation is optional
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
content: [{ type: "text", text: JSON.stringify({
|
|
195
|
+
project: slug,
|
|
196
|
+
entries_analyzed: toRead.length,
|
|
197
|
+
palace_rooms: palaceRoomCount,
|
|
198
|
+
consolidated,
|
|
199
|
+
synthesis: syn,
|
|
200
|
+
}) }],
|
|
201
|
+
};
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=context-synthesize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-synthesize.js","sourceRoot":"","sources":["../../src/tools/context-synthesize.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-archive.d.ts","sourceRoot":"","sources":["../../src/tools/journal-archive.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA6DhD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { resolveProject } from "../storage/project.js";
|
|
5
|
+
import { journalDir } from "../storage/paths.js";
|
|
6
|
+
import { ensureDir } from "../storage/fs-utils.js";
|
|
7
|
+
import { listJournalFiles, updateIndex } from "../helpers/journal-files.js";
|
|
8
|
+
import { extractSection } from "../helpers/sections.js";
|
|
9
|
+
import { stateFilePath } from "./journal-state.js";
|
|
10
|
+
export function register(server) {
|
|
11
|
+
server.registerTool("journal_archive", {
|
|
12
|
+
title: "Archive Old Entries",
|
|
13
|
+
description: "Move entries older than N days to cold archive. Keeps a one-line summary per archived entry. " +
|
|
14
|
+
"Use after a project milestone or when journal count gets too high.",
|
|
15
|
+
inputSchema: {
|
|
16
|
+
older_than_days: z.number().int().default(7).describe("Archive entries older than this many days"),
|
|
17
|
+
project: z.string().default("auto"),
|
|
18
|
+
},
|
|
19
|
+
}, async ({ older_than_days, project }) => {
|
|
20
|
+
const slug = await resolveProject(project);
|
|
21
|
+
const entries = listJournalFiles(slug);
|
|
22
|
+
const dir = journalDir(slug);
|
|
23
|
+
const archiveDir = path.join(dir, "archive");
|
|
24
|
+
ensureDir(archiveDir);
|
|
25
|
+
let archived = 0;
|
|
26
|
+
const summaries = [];
|
|
27
|
+
for (const entry of entries) {
|
|
28
|
+
const ageMs = Date.now() - new Date(entry.date).getTime();
|
|
29
|
+
const ageDays = ageMs / (1000 * 60 * 60 * 24);
|
|
30
|
+
if (ageDays > older_than_days) {
|
|
31
|
+
const srcPath = path.join(entry.dir, entry.file);
|
|
32
|
+
const content = fs.readFileSync(srcPath, "utf-8");
|
|
33
|
+
const brief = extractSection(content, "brief");
|
|
34
|
+
const firstLine = brief?.split("\n").find(l => l.trim().length > 0) ?? "(no brief)";
|
|
35
|
+
const destPath = path.join(archiveDir, entry.file);
|
|
36
|
+
fs.copyFileSync(srcPath, destPath);
|
|
37
|
+
fs.unlinkSync(srcPath);
|
|
38
|
+
const stateSrc = stateFilePath(slug, entry.date);
|
|
39
|
+
if (fs.existsSync(stateSrc)) {
|
|
40
|
+
const stateDest = path.join(archiveDir, `${entry.date}.state.json`);
|
|
41
|
+
fs.copyFileSync(stateSrc, stateDest);
|
|
42
|
+
fs.unlinkSync(stateSrc);
|
|
43
|
+
}
|
|
44
|
+
summaries.push(`${entry.date}: ${firstLine}`);
|
|
45
|
+
archived++;
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
if (summaries.length > 0) {
|
|
49
|
+
const indexPath = path.join(archiveDir, "index.md");
|
|
50
|
+
const existing = fs.existsSync(indexPath) ? fs.readFileSync(indexPath, "utf-8") : "# Archive\n\n";
|
|
51
|
+
fs.writeFileSync(indexPath, existing + summaries.join("\n") + "\n", "utf-8");
|
|
52
|
+
}
|
|
53
|
+
updateIndex(slug);
|
|
54
|
+
return {
|
|
55
|
+
content: [{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: JSON.stringify({ archived, summaries, archive_dir: archiveDir }),
|
|
58
|
+
}],
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=journal-archive.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-archive.js","sourceRoot":"","sources":["../../src/tools/journal-archive.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-capture.d.ts","sourceRoot":"","sources":["../../src/tools/journal-capture.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AASzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA0FhD"}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import * as z from "zod/v4";
|
|
2
|
+
import * as fs from "node:fs";
|
|
3
|
+
import * as path from "node:path";
|
|
4
|
+
import { resolveProject } from "../storage/project.js";
|
|
5
|
+
import { journalDir } from "../storage/paths.js";
|
|
6
|
+
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
7
|
+
import { countLogEntries } from "../helpers/journal-files.js";
|
|
8
|
+
export function register(server) {
|
|
9
|
+
server.registerTool("journal_capture", {
|
|
10
|
+
title: "Capture Q&A",
|
|
11
|
+
description: "Layer 1: lightweight Q&A capture. Appends to today's log file without loading the full journal.",
|
|
12
|
+
inputSchema: {
|
|
13
|
+
question: z
|
|
14
|
+
.string()
|
|
15
|
+
.describe("The human's question or request (summarized, 1 sentence)"),
|
|
16
|
+
answer: z
|
|
17
|
+
.string()
|
|
18
|
+
.describe("The agent's key answer or decision (summarized, 1-2 sentences)"),
|
|
19
|
+
tags: z
|
|
20
|
+
.array(z.string())
|
|
21
|
+
.optional()
|
|
22
|
+
.describe("Optional tags for this entry (e.g. ['decision', 'bug-fix', 'architecture'])"),
|
|
23
|
+
palace_room: z.string().optional()
|
|
24
|
+
.describe("Optional: also capture this Q&A into a palace room"),
|
|
25
|
+
project: z
|
|
26
|
+
.string()
|
|
27
|
+
.default("auto")
|
|
28
|
+
.describe("Project slug. Defaults to auto-detect."),
|
|
29
|
+
},
|
|
30
|
+
}, async ({ question, answer, tags, palace_room, project }) => {
|
|
31
|
+
const slug = await resolveProject(project);
|
|
32
|
+
const date = todayISO();
|
|
33
|
+
const dir = journalDir(slug);
|
|
34
|
+
ensureDir(dir);
|
|
35
|
+
const logPath = path.join(dir, `${date}-log.md`);
|
|
36
|
+
const entryNum = countLogEntries(logPath) + 1;
|
|
37
|
+
const tagStr = tags && tags.length > 0 ? ` [${tags.join(", ")}]` : "";
|
|
38
|
+
const timestamp = new Date().toISOString().slice(11, 19);
|
|
39
|
+
let entry = `### Q${entryNum} (${timestamp})${tagStr}\n\n`;
|
|
40
|
+
entry += `**Q:** ${question}\n\n`;
|
|
41
|
+
entry += `**A:** ${answer}\n\n`;
|
|
42
|
+
if (!fs.existsSync(logPath)) {
|
|
43
|
+
const header = `# ${date} — ${slug} — Session Log\n\n`;
|
|
44
|
+
fs.writeFileSync(logPath, header + entry, "utf-8");
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
fs.appendFileSync(logPath, entry, "utf-8");
|
|
48
|
+
}
|
|
49
|
+
// Palace integration
|
|
50
|
+
let palaceResult = null;
|
|
51
|
+
if (palace_room) {
|
|
52
|
+
try {
|
|
53
|
+
const { ensurePalaceInitialized, roomExists, createRoom } = await import("../palace/rooms.js");
|
|
54
|
+
const { palaceDir } = await import("../storage/paths.js");
|
|
55
|
+
const { fanOut } = await import("../palace/fan-out.js");
|
|
56
|
+
const { updatePalaceIndex } = await import("../palace/index-manager.js");
|
|
57
|
+
ensurePalaceInitialized(slug);
|
|
58
|
+
if (!roomExists(slug, palace_room)) {
|
|
59
|
+
createRoom(slug, palace_room, palace_room.charAt(0).toUpperCase() + palace_room.slice(1), "Auto-created from capture", []);
|
|
60
|
+
}
|
|
61
|
+
const pd = palaceDir(slug);
|
|
62
|
+
const targetPath = path.join(pd, "rooms", palace_room, "captures.md");
|
|
63
|
+
ensureDir(path.dirname(targetPath));
|
|
64
|
+
const captureEntry = `\n### Q${entryNum} (${date})\n**Q:** ${question}\n**A:** ${answer}\n`;
|
|
65
|
+
if (fs.existsSync(targetPath)) {
|
|
66
|
+
fs.appendFileSync(targetPath, captureEntry, "utf-8");
|
|
67
|
+
}
|
|
68
|
+
else {
|
|
69
|
+
fs.writeFileSync(targetPath, `# ${palace_room} / captures\n${captureEntry}`, "utf-8");
|
|
70
|
+
}
|
|
71
|
+
fanOut(slug, palace_room, "captures", `${question} ${answer}`, [], "medium");
|
|
72
|
+
updatePalaceIndex(slug);
|
|
73
|
+
palaceResult = { room: palace_room };
|
|
74
|
+
}
|
|
75
|
+
catch {
|
|
76
|
+
// Palace integration is optional, don't fail the capture
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
return {
|
|
80
|
+
content: [{
|
|
81
|
+
type: "text",
|
|
82
|
+
text: JSON.stringify({ success: true, entry_number: entryNum, palace: palaceResult }),
|
|
83
|
+
}],
|
|
84
|
+
};
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=journal-capture.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-capture.js","sourceRoot":"","sources":["../../src/tools/journal-capture.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"journal-cold-start.d.ts","sourceRoot":"","sources":["../../src/tools/journal-cold-start.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAWzE,wBAAgB,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CA+DhD"}
|