agent-recall-mcp 3.3.2 → 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/index.js +6 -13
- package/dist/index.js.map +1 -1
- package/dist/resources/journal-resources.d.ts.map +1 -1
- package/dist/resources/journal-resources.js +5 -29
- package/dist/resources/journal-resources.js.map +1 -1
- package/dist/server.js +1 -1
- package/dist/server.js.map +1 -1
- package/dist/tools/alignment-check.d.ts.map +1 -1
- package/dist/tools/alignment-check.js +3 -54
- package/dist/tools/alignment-check.js.map +1 -1
- package/dist/tools/awareness-update.d.ts +2 -8
- package/dist/tools/awareness-update.d.ts.map +1 -1
- package/dist/tools/awareness-update.js +3 -66
- package/dist/tools/awareness-update.js.map +1 -1
- package/dist/tools/context-synthesize.d.ts.map +1 -1
- package/dist/tools/context-synthesize.js +6 -187
- package/dist/tools/context-synthesize.js.map +1 -1
- package/dist/tools/journal-archive.d.ts.map +1 -1
- package/dist/tools/journal-archive.js +3 -48
- package/dist/tools/journal-archive.js.map +1 -1
- package/dist/tools/journal-capture.d.ts.map +1 -1
- package/dist/tools/journal-capture.js +3 -60
- package/dist/tools/journal-capture.js.map +1 -1
- package/dist/tools/journal-cold-start.d.ts.map +1 -1
- package/dist/tools/journal-cold-start.js +10 -52
- package/dist/tools/journal-cold-start.js.map +1 -1
- package/dist/tools/journal-list.d.ts.map +1 -1
- package/dist/tools/journal-list.js +3 -23
- package/dist/tools/journal-list.js.map +1 -1
- package/dist/tools/journal-projects.d.ts.map +1 -1
- package/dist/tools/journal-projects.js +3 -16
- package/dist/tools/journal-projects.js.map +1 -1
- package/dist/tools/journal-read.d.ts.map +1 -1
- package/dist/tools/journal-read.js +5 -45
- package/dist/tools/journal-read.js.map +1 -1
- package/dist/tools/journal-rollup.d.ts +3 -0
- package/dist/tools/journal-rollup.d.ts.map +1 -0
- package/dist/tools/journal-rollup.js +21 -0
- package/dist/tools/journal-rollup.js.map +1 -0
- package/dist/tools/journal-search.d.ts.map +1 -1
- package/dist/tools/journal-search.js +3 -91
- package/dist/tools/journal-search.js.map +1 -1
- package/dist/tools/journal-state.d.ts +0 -3
- package/dist/tools/journal-state.d.ts.map +1 -1
- package/dist/tools/journal-state.js +5 -93
- package/dist/tools/journal-state.js.map +1 -1
- package/dist/tools/journal-write.d.ts.map +1 -1
- package/dist/tools/journal-write.js +3 -62
- package/dist/tools/journal-write.js.map +1 -1
- package/dist/tools/knowledge-read.d.ts.map +1 -1
- package/dist/tools/knowledge-read.js +3 -100
- package/dist/tools/knowledge-read.js.map +1 -1
- package/dist/tools/knowledge-write.d.ts.map +1 -1
- package/dist/tools/knowledge-write.js +3 -66
- package/dist/tools/knowledge-write.js.map +1 -1
- package/dist/tools/nudge.d.ts.map +1 -1
- package/dist/tools/nudge.js +3 -25
- package/dist/tools/nudge.js.map +1 -1
- package/dist/tools/palace-lint.d.ts +2 -6
- package/dist/tools/palace-lint.d.ts.map +1 -1
- package/dist/tools/palace-lint.js +3 -135
- package/dist/tools/palace-lint.js.map +1 -1
- package/dist/tools/palace-read.d.ts +2 -5
- package/dist/tools/palace-read.d.ts.map +1 -1
- package/dist/tools/palace-read.js +5 -62
- package/dist/tools/palace-read.js.map +1 -1
- package/dist/tools/palace-search.d.ts +2 -5
- package/dist/tools/palace-search.d.ts.map +1 -1
- package/dist/tools/palace-search.js +3 -66
- package/dist/tools/palace-search.js.map +1 -1
- package/dist/tools/palace-walk.d.ts +2 -11
- package/dist/tools/palace-walk.d.ts.map +1 -1
- package/dist/tools/palace-walk.js +3 -149
- package/dist/tools/palace-walk.js.map +1 -1
- package/dist/tools/palace-write.d.ts +2 -5
- package/dist/tools/palace-write.d.ts.map +1 -1
- package/dist/tools/palace-write.js +3 -90
- package/dist/tools/palace-write.js.map +1 -1
- package/dist/tools/recall-insight.d.ts +2 -8
- package/dist/tools/recall-insight.d.ts.map +1 -1
- package/dist/tools/recall-insight.js +3 -35
- package/dist/tools/recall-insight.js.map +1 -1
- package/package.json +9 -46
- package/README.md +0 -435
- package/dist/helpers/journal-files.d.ts +0 -30
- package/dist/helpers/journal-files.d.ts.map +0 -1
- package/dist/helpers/journal-files.js +0 -96
- package/dist/helpers/journal-files.js.map +0 -1
- package/dist/helpers/sections.d.ts +0 -12
- package/dist/helpers/sections.d.ts.map +0 -1
- package/dist/helpers/sections.js +0 -84
- package/dist/helpers/sections.js.map +0 -1
- package/dist/palace/awareness.d.ts +0 -67
- package/dist/palace/awareness.d.ts.map +0 -1
- package/dist/palace/awareness.js +0 -231
- package/dist/palace/awareness.js.map +0 -1
- package/dist/palace/consolidate.d.ts +0 -28
- package/dist/palace/consolidate.d.ts.map +0 -1
- package/dist/palace/consolidate.js +0 -129
- package/dist/palace/consolidate.js.map +0 -1
- package/dist/palace/fan-out.d.ts +0 -15
- package/dist/palace/fan-out.d.ts.map +0 -1
- package/dist/palace/fan-out.js +0 -78
- package/dist/palace/fan-out.js.map +0 -1
- package/dist/palace/graph.d.ts +0 -11
- package/dist/palace/graph.d.ts.map +0 -1
- package/dist/palace/graph.js +0 -59
- package/dist/palace/graph.js.map +0 -1
- package/dist/palace/identity.d.ts +0 -6
- package/dist/palace/identity.d.ts.map +0 -1
- package/dist/palace/identity.js +0 -18
- package/dist/palace/identity.js.map +0 -1
- package/dist/palace/index-manager.d.ts +0 -7
- package/dist/palace/index-manager.d.ts.map +0 -1
- package/dist/palace/index-manager.js +0 -46
- package/dist/palace/index-manager.js.map +0 -1
- package/dist/palace/insights-index.d.ts +0 -39
- package/dist/palace/insights-index.d.ts.map +0 -1
- package/dist/palace/insights-index.js +0 -101
- package/dist/palace/insights-index.js.map +0 -1
- package/dist/palace/log.d.ts +0 -9
- package/dist/palace/log.d.ts.map +0 -1
- package/dist/palace/log.js +0 -28
- package/dist/palace/log.js.map +0 -1
- package/dist/palace/obsidian.d.ts +0 -12
- package/dist/palace/obsidian.d.ts.map +0 -1
- package/dist/palace/obsidian.js +0 -76
- package/dist/palace/obsidian.js.map +0 -1
- package/dist/palace/rooms.d.ts +0 -14
- package/dist/palace/rooms.d.ts.map +0 -1
- package/dist/palace/rooms.js +0 -117
- package/dist/palace/rooms.js.map +0 -1
- package/dist/palace/salience.d.ts +0 -15
- package/dist/palace/salience.d.ts.map +0 -1
- package/dist/palace/salience.js +0 -33
- package/dist/palace/salience.js.map +0 -1
- package/dist/storage/fs-utils.d.ts +0 -8
- package/dist/storage/fs-utils.d.ts.map +0 -1
- package/dist/storage/fs-utils.js +0 -28
- package/dist/storage/fs-utils.js.map +0 -1
- package/dist/storage/paths.d.ts +0 -21
- package/dist/storage/paths.d.ts.map +0 -1
- package/dist/storage/paths.js +0 -59
- package/dist/storage/paths.js.map +0 -1
- package/dist/storage/project.d.ts +0 -17
- package/dist/storage/project.d.ts.map +0 -1
- package/dist/storage/project.js +0 -130
- package/dist/storage/project.js.map +0 -1
- package/dist/types.d.ts +0 -112
- package/dist/types.d.ts.map +0 -1
- package/dist/types.js +0 -31
- package/dist/types.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sections.js","sourceRoot":"","sources":["../../src/helpers/sections.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Awareness system — a living 200-line document that compounds insights.
|
|
3
|
-
*
|
|
4
|
-
* Unlike the palace (room-based storage) or journal (temporal log),
|
|
5
|
-
* awareness.md is a SELF-REWRITING document. Every update forces the
|
|
6
|
-
* system to merge, compress, or demote — creating compounding knowledge.
|
|
7
|
-
*
|
|
8
|
-
* Structure:
|
|
9
|
-
* ## Identity (5 lines) — who is the user, what matters
|
|
10
|
-
* ## Top Insights (10 items) — ranked by relevance + confirmation count
|
|
11
|
-
* ## Compound Insights (5 max) — patterns spanning 3+ individual insights
|
|
12
|
-
* ## Trajectory (3 lines) — where is the work heading
|
|
13
|
-
* ## Blind Spots (3 lines) — what the system suspects matters but hasn't confirmed
|
|
14
|
-
*
|
|
15
|
-
* Max 200 lines enforced. Overflow triggers merge/demote.
|
|
16
|
-
*/
|
|
17
|
-
export declare function readAwareness(): string;
|
|
18
|
-
export declare function writeAwareness(content: string): void;
|
|
19
|
-
export interface Insight {
|
|
20
|
-
id: string;
|
|
21
|
-
title: string;
|
|
22
|
-
evidence: string;
|
|
23
|
-
confirmations: number;
|
|
24
|
-
lastConfirmed: string;
|
|
25
|
-
appliesWhen: string[];
|
|
26
|
-
source: string;
|
|
27
|
-
}
|
|
28
|
-
export interface CompoundInsight {
|
|
29
|
-
id: string;
|
|
30
|
-
title: string;
|
|
31
|
-
sourceInsights: string[];
|
|
32
|
-
pattern: string;
|
|
33
|
-
confidence: number;
|
|
34
|
-
}
|
|
35
|
-
export interface AwarenessState {
|
|
36
|
-
identity: string;
|
|
37
|
-
topInsights: Insight[];
|
|
38
|
-
compoundInsights: CompoundInsight[];
|
|
39
|
-
trajectory: string;
|
|
40
|
-
blindSpots: string[];
|
|
41
|
-
lastUpdated: string;
|
|
42
|
-
}
|
|
43
|
-
export declare function readAwarenessState(): AwarenessState | null;
|
|
44
|
-
export declare function writeAwarenessState(state: AwarenessState): void;
|
|
45
|
-
/**
|
|
46
|
-
* Initialize awareness from scratch.
|
|
47
|
-
*/
|
|
48
|
-
export declare function initAwareness(identity: string): AwarenessState;
|
|
49
|
-
/**
|
|
50
|
-
* Add or merge an insight into the awareness state.
|
|
51
|
-
* If similar insight exists (by title keyword overlap), merge and strengthen.
|
|
52
|
-
* If new, add and demote lowest if over 10.
|
|
53
|
-
*/
|
|
54
|
-
export declare function addInsight(newInsight: Omit<Insight, "id" | "confirmations" | "lastConfirmed">): {
|
|
55
|
-
action: "merged" | "added" | "replaced";
|
|
56
|
-
insight: Insight;
|
|
57
|
-
};
|
|
58
|
-
/**
|
|
59
|
-
* Detect compound insights — patterns spanning 3+ individual insights.
|
|
60
|
-
* Looks for shared appliesWhen keywords across insights.
|
|
61
|
-
*/
|
|
62
|
-
export declare function detectCompoundInsights(): CompoundInsight[];
|
|
63
|
-
/**
|
|
64
|
-
* Render awareness state into the 200-line markdown document.
|
|
65
|
-
*/
|
|
66
|
-
export declare function renderAwareness(state: AwarenessState): void;
|
|
67
|
-
//# sourceMappingURL=awareness.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.d.ts","sourceRoot":"","sources":["../../src/palace/awareness.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAaH,wBAAgB,aAAa,IAAI,MAAM,CAItC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAYpD;AAED,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,OAAO,EAAE,CAAC;IACvB,gBAAgB,EAAE,eAAe,EAAE,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;CACrB;AAID,wBAAgB,kBAAkB,IAAI,cAAc,GAAG,IAAI,CAQ1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAI/D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAY9D;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CACxB,UAAU,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,eAAe,GAAG,eAAe,CAAC,GAClE;IAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,GAAG,UAAU,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAgE/D;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CAsC1D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,cAAc,GAAG,IAAI,CAoD3D"}
|
package/dist/palace/awareness.js
DELETED
|
@@ -1,231 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Awareness system — a living 200-line document that compounds insights.
|
|
3
|
-
*
|
|
4
|
-
* Unlike the palace (room-based storage) or journal (temporal log),
|
|
5
|
-
* awareness.md is a SELF-REWRITING document. Every update forces the
|
|
6
|
-
* system to merge, compress, or demote — creating compounding knowledge.
|
|
7
|
-
*
|
|
8
|
-
* Structure:
|
|
9
|
-
* ## Identity (5 lines) — who is the user, what matters
|
|
10
|
-
* ## Top Insights (10 items) — ranked by relevance + confirmation count
|
|
11
|
-
* ## Compound Insights (5 max) — patterns spanning 3+ individual insights
|
|
12
|
-
* ## Trajectory (3 lines) — where is the work heading
|
|
13
|
-
* ## Blind Spots (3 lines) — what the system suspects matters but hasn't confirmed
|
|
14
|
-
*
|
|
15
|
-
* Max 200 lines enforced. Overflow triggers merge/demote.
|
|
16
|
-
*/
|
|
17
|
-
import * as fs from "node:fs";
|
|
18
|
-
import * as path from "node:path";
|
|
19
|
-
import { JOURNAL_ROOT } from "../types.js";
|
|
20
|
-
import { ensureDir } from "../storage/fs-utils.js";
|
|
21
|
-
const MAX_LINES = 200;
|
|
22
|
-
function awarenessPath() {
|
|
23
|
-
return path.join(JOURNAL_ROOT, "awareness.md");
|
|
24
|
-
}
|
|
25
|
-
export function readAwareness() {
|
|
26
|
-
const p = awarenessPath();
|
|
27
|
-
if (!fs.existsSync(p))
|
|
28
|
-
return "";
|
|
29
|
-
return fs.readFileSync(p, "utf-8");
|
|
30
|
-
}
|
|
31
|
-
export function writeAwareness(content) {
|
|
32
|
-
const p = awarenessPath();
|
|
33
|
-
ensureDir(path.dirname(p));
|
|
34
|
-
// Enforce 200-line max
|
|
35
|
-
const lines = content.split("\n");
|
|
36
|
-
if (lines.length > MAX_LINES) {
|
|
37
|
-
const truncated = lines.slice(0, MAX_LINES).join("\n");
|
|
38
|
-
fs.writeFileSync(p, truncated + "\n", "utf-8");
|
|
39
|
-
}
|
|
40
|
-
else {
|
|
41
|
-
fs.writeFileSync(p, content, "utf-8");
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
const AWARENESS_JSON_PATH = () => path.join(JOURNAL_ROOT, "awareness-state.json");
|
|
45
|
-
export function readAwarenessState() {
|
|
46
|
-
const p = AWARENESS_JSON_PATH();
|
|
47
|
-
if (!fs.existsSync(p))
|
|
48
|
-
return null;
|
|
49
|
-
try {
|
|
50
|
-
return JSON.parse(fs.readFileSync(p, "utf-8"));
|
|
51
|
-
}
|
|
52
|
-
catch {
|
|
53
|
-
return null;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
export function writeAwarenessState(state) {
|
|
57
|
-
const p = AWARENESS_JSON_PATH();
|
|
58
|
-
ensureDir(path.dirname(p));
|
|
59
|
-
fs.writeFileSync(p, JSON.stringify(state, null, 2), "utf-8");
|
|
60
|
-
}
|
|
61
|
-
/**
|
|
62
|
-
* Initialize awareness from scratch.
|
|
63
|
-
*/
|
|
64
|
-
export function initAwareness(identity) {
|
|
65
|
-
const state = {
|
|
66
|
-
identity,
|
|
67
|
-
topInsights: [],
|
|
68
|
-
compoundInsights: [],
|
|
69
|
-
trajectory: "",
|
|
70
|
-
blindSpots: [],
|
|
71
|
-
lastUpdated: new Date().toISOString(),
|
|
72
|
-
};
|
|
73
|
-
writeAwarenessState(state);
|
|
74
|
-
renderAwareness(state);
|
|
75
|
-
return state;
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Add or merge an insight into the awareness state.
|
|
79
|
-
* If similar insight exists (by title keyword overlap), merge and strengthen.
|
|
80
|
-
* If new, add and demote lowest if over 10.
|
|
81
|
-
*/
|
|
82
|
-
export function addInsight(newInsight) {
|
|
83
|
-
let state = readAwarenessState();
|
|
84
|
-
if (!state) {
|
|
85
|
-
state = initAwareness("(unknown user)");
|
|
86
|
-
}
|
|
87
|
-
const now = new Date().toISOString();
|
|
88
|
-
const titleWords = newInsight.title.toLowerCase().split(/\s+/);
|
|
89
|
-
// Check for similar existing insight (>50% word overlap)
|
|
90
|
-
let bestMatch = null;
|
|
91
|
-
for (let i = 0; i < state.topInsights.length; i++) {
|
|
92
|
-
const existing = state.topInsights[i];
|
|
93
|
-
const existingWords = existing.title.toLowerCase().split(/\s+/);
|
|
94
|
-
const overlap = titleWords.filter((w) => existingWords.includes(w) && w.length > 3).length;
|
|
95
|
-
const ratio = overlap / Math.max(titleWords.length, existingWords.length);
|
|
96
|
-
if (ratio > 0.5 && (!bestMatch || ratio > bestMatch.overlap)) {
|
|
97
|
-
bestMatch = { idx: i, overlap: ratio };
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
if (bestMatch) {
|
|
101
|
-
// Merge: strengthen existing insight
|
|
102
|
-
const existing = state.topInsights[bestMatch.idx];
|
|
103
|
-
existing.confirmations++;
|
|
104
|
-
existing.lastConfirmed = now;
|
|
105
|
-
existing.evidence += ` | ${newInsight.evidence}`;
|
|
106
|
-
// Merge appliesWhen
|
|
107
|
-
for (const aw of newInsight.appliesWhen) {
|
|
108
|
-
if (!existing.appliesWhen.includes(aw)) {
|
|
109
|
-
existing.appliesWhen.push(aw);
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
writeAwarenessState(state);
|
|
113
|
-
renderAwareness(state);
|
|
114
|
-
return { action: "merged", insight: existing };
|
|
115
|
-
}
|
|
116
|
-
// New insight
|
|
117
|
-
const insight = {
|
|
118
|
-
id: `insight-${Date.now()}`,
|
|
119
|
-
title: newInsight.title,
|
|
120
|
-
evidence: newInsight.evidence,
|
|
121
|
-
confirmations: 1,
|
|
122
|
-
lastConfirmed: now,
|
|
123
|
-
appliesWhen: newInsight.appliesWhen,
|
|
124
|
-
source: newInsight.source,
|
|
125
|
-
};
|
|
126
|
-
if (state.topInsights.length < 10) {
|
|
127
|
-
state.topInsights.push(insight);
|
|
128
|
-
writeAwarenessState(state);
|
|
129
|
-
renderAwareness(state);
|
|
130
|
-
return { action: "added", insight };
|
|
131
|
-
}
|
|
132
|
-
// Over 10: replace lowest-confirmation insight
|
|
133
|
-
state.topInsights.sort((a, b) => b.confirmations - a.confirmations);
|
|
134
|
-
const demoted = state.topInsights.pop();
|
|
135
|
-
state.topInsights.push(insight);
|
|
136
|
-
writeAwarenessState(state);
|
|
137
|
-
renderAwareness(state);
|
|
138
|
-
return { action: "replaced", insight };
|
|
139
|
-
}
|
|
140
|
-
/**
|
|
141
|
-
* Detect compound insights — patterns spanning 3+ individual insights.
|
|
142
|
-
* Looks for shared appliesWhen keywords across insights.
|
|
143
|
-
*/
|
|
144
|
-
export function detectCompoundInsights() {
|
|
145
|
-
const state = readAwarenessState();
|
|
146
|
-
if (!state || state.topInsights.length < 3)
|
|
147
|
-
return [];
|
|
148
|
-
// Group insights by shared appliesWhen keywords
|
|
149
|
-
const keywordMap = new Map();
|
|
150
|
-
for (const insight of state.topInsights) {
|
|
151
|
-
for (const aw of insight.appliesWhen) {
|
|
152
|
-
const key = aw.toLowerCase();
|
|
153
|
-
if (!keywordMap.has(key))
|
|
154
|
-
keywordMap.set(key, []);
|
|
155
|
-
keywordMap.get(key).push(insight);
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
const compounds = [];
|
|
159
|
-
for (const [keyword, insights] of keywordMap) {
|
|
160
|
-
if (insights.length >= 3) {
|
|
161
|
-
const id = `compound-${keyword}`;
|
|
162
|
-
// Don't duplicate
|
|
163
|
-
if (state.compoundInsights.some((c) => c.id === id))
|
|
164
|
-
continue;
|
|
165
|
-
compounds.push({
|
|
166
|
-
id,
|
|
167
|
-
title: `Pattern: "${keyword}" appears across ${insights.length} insights`,
|
|
168
|
-
sourceInsights: insights.map((i) => i.id),
|
|
169
|
-
pattern: insights.map((i) => i.title).join(" + "),
|
|
170
|
-
confidence: Math.min(1.0, insights.length * 0.25),
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
if (compounds.length > 0) {
|
|
175
|
-
state.compoundInsights = [...state.compoundInsights, ...compounds].slice(0, 5);
|
|
176
|
-
writeAwarenessState(state);
|
|
177
|
-
renderAwareness(state);
|
|
178
|
-
}
|
|
179
|
-
return compounds;
|
|
180
|
-
}
|
|
181
|
-
/**
|
|
182
|
-
* Render awareness state into the 200-line markdown document.
|
|
183
|
-
*/
|
|
184
|
-
export function renderAwareness(state) {
|
|
185
|
-
const lines = [];
|
|
186
|
-
lines.push("# Awareness");
|
|
187
|
-
lines.push(`> Last updated: ${state.lastUpdated}`);
|
|
188
|
-
lines.push("");
|
|
189
|
-
// Identity
|
|
190
|
-
lines.push("## Identity");
|
|
191
|
-
lines.push(state.identity || "_(not set)_");
|
|
192
|
-
lines.push("");
|
|
193
|
-
// Top insights (sorted by confirmations)
|
|
194
|
-
lines.push("## Top Insights");
|
|
195
|
-
lines.push("");
|
|
196
|
-
const sorted = [...state.topInsights].sort((a, b) => b.confirmations - a.confirmations);
|
|
197
|
-
for (const insight of sorted) {
|
|
198
|
-
lines.push(`### ${insight.title} (${insight.confirmations}x confirmed)`);
|
|
199
|
-
lines.push(`- Evidence: ${insight.evidence.slice(0, 150)}`);
|
|
200
|
-
lines.push(`- Applies when: ${insight.appliesWhen.join(", ")}`);
|
|
201
|
-
lines.push(`- Source: ${insight.source} | Last: ${insight.lastConfirmed.slice(0, 10)}`);
|
|
202
|
-
lines.push("");
|
|
203
|
-
}
|
|
204
|
-
// Compound insights
|
|
205
|
-
if (state.compoundInsights.length > 0) {
|
|
206
|
-
lines.push("## Compound Insights");
|
|
207
|
-
lines.push("");
|
|
208
|
-
for (const ci of state.compoundInsights) {
|
|
209
|
-
lines.push(`### ${ci.title} (confidence: ${ci.confidence.toFixed(2)})`);
|
|
210
|
-
lines.push(`- Pattern: ${ci.pattern.slice(0, 200)}`);
|
|
211
|
-
lines.push(`- Sources: ${ci.sourceInsights.length} insights`);
|
|
212
|
-
lines.push("");
|
|
213
|
-
}
|
|
214
|
-
}
|
|
215
|
-
// Trajectory
|
|
216
|
-
lines.push("## Trajectory");
|
|
217
|
-
lines.push(state.trajectory || "_(not set — will emerge after 3+ sessions)_");
|
|
218
|
-
lines.push("");
|
|
219
|
-
// Blind spots
|
|
220
|
-
lines.push("## Blind Spots");
|
|
221
|
-
if (state.blindSpots.length > 0) {
|
|
222
|
-
for (const bs of state.blindSpots) {
|
|
223
|
-
lines.push(`- ${bs}`);
|
|
224
|
-
}
|
|
225
|
-
}
|
|
226
|
-
else {
|
|
227
|
-
lines.push("_(none detected yet)_");
|
|
228
|
-
}
|
|
229
|
-
writeAwareness(lines.join("\n"));
|
|
230
|
-
}
|
|
231
|
-
//# sourceMappingURL=awareness.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"awareness.js","sourceRoot":"","sources":["../../src/palace/awareness.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory transformation pipeline: episodic (journal) → semantic (palace).
|
|
3
|
-
*
|
|
4
|
-
* Inspired by:
|
|
5
|
-
* - Karpathy's LLM Wiki: fan-out on ingest, query-as-deposit
|
|
6
|
-
* - llm_wiki: two-step ingest (analyze then generate), source traceability
|
|
7
|
-
* - Human memory: episodic → semantic consolidation during sleep
|
|
8
|
-
*
|
|
9
|
-
* This module extracts decisions, goals, blockers, and observations from
|
|
10
|
-
* journal entries and consolidates them into palace rooms.
|
|
11
|
-
*/
|
|
12
|
-
export interface ConsolidationResult {
|
|
13
|
-
entriesProcessed: number;
|
|
14
|
-
roomsUpdated: string[];
|
|
15
|
-
memoriesCreated: number;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* Consolidate recent journal entries into palace rooms.
|
|
19
|
-
*
|
|
20
|
-
* Process:
|
|
21
|
-
* 1. Read N recent journal entries
|
|
22
|
-
* 2. Extract structured content per section type
|
|
23
|
-
* 3. Route each to the appropriate palace room
|
|
24
|
-
* 4. Add source traceability (which journal entry it came from)
|
|
25
|
-
* 5. Trigger fan-out for cross-references
|
|
26
|
-
*/
|
|
27
|
-
export declare function consolidateJournalToPalace(project: string, entryCount?: number): ConsolidationResult;
|
|
28
|
-
//# sourceMappingURL=consolidate.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consolidate.d.ts","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAcH,MAAM,WAAW,mBAAmB;IAClC,gBAAgB,EAAE,MAAM,CAAC;IACzB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,MAAM,EACf,UAAU,GAAE,MAAU,GACrB,mBAAmB,CAqHrB"}
|
|
@@ -1,129 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory transformation pipeline: episodic (journal) → semantic (palace).
|
|
3
|
-
*
|
|
4
|
-
* Inspired by:
|
|
5
|
-
* - Karpathy's LLM Wiki: fan-out on ingest, query-as-deposit
|
|
6
|
-
* - llm_wiki: two-step ingest (analyze then generate), source traceability
|
|
7
|
-
* - Human memory: episodic → semantic consolidation during sleep
|
|
8
|
-
*
|
|
9
|
-
* This module extracts decisions, goals, blockers, and observations from
|
|
10
|
-
* journal entries and consolidates them into palace rooms.
|
|
11
|
-
*/
|
|
12
|
-
import * as fs from "node:fs";
|
|
13
|
-
import * as path from "node:path";
|
|
14
|
-
import { palaceDir } from "../storage/paths.js";
|
|
15
|
-
import { ensureDir, todayISO } from "../storage/fs-utils.js";
|
|
16
|
-
import { listJournalFiles } from "../helpers/journal-files.js";
|
|
17
|
-
import { extractSection } from "../helpers/sections.js";
|
|
18
|
-
import { ensurePalaceInitialized, roomExists, createRoom, updateRoomMeta } from "./rooms.js";
|
|
19
|
-
import { fanOut } from "./fan-out.js";
|
|
20
|
-
import { generateFrontmatter } from "./obsidian.js";
|
|
21
|
-
import { updatePalaceIndex } from "./index-manager.js";
|
|
22
|
-
import { appendToLog } from "./log.js";
|
|
23
|
-
/**
|
|
24
|
-
* Consolidate recent journal entries into palace rooms.
|
|
25
|
-
*
|
|
26
|
-
* Process:
|
|
27
|
-
* 1. Read N recent journal entries
|
|
28
|
-
* 2. Extract structured content per section type
|
|
29
|
-
* 3. Route each to the appropriate palace room
|
|
30
|
-
* 4. Add source traceability (which journal entry it came from)
|
|
31
|
-
* 5. Trigger fan-out for cross-references
|
|
32
|
-
*/
|
|
33
|
-
export function consolidateJournalToPalace(project, entryCount = 5) {
|
|
34
|
-
ensurePalaceInitialized(project);
|
|
35
|
-
const entries = listJournalFiles(project);
|
|
36
|
-
const toProcess = entries.slice(0, entryCount);
|
|
37
|
-
const pd = palaceDir(project);
|
|
38
|
-
const date = todayISO();
|
|
39
|
-
const result = {
|
|
40
|
-
entriesProcessed: 0,
|
|
41
|
-
roomsUpdated: [],
|
|
42
|
-
memoriesCreated: 0,
|
|
43
|
-
};
|
|
44
|
-
const updatedRooms = new Set();
|
|
45
|
-
for (const entry of toProcess) {
|
|
46
|
-
const content = fs.readFileSync(path.join(entry.dir, entry.file), "utf-8");
|
|
47
|
-
const sourceRef = `[[journal/${entry.date}]]`;
|
|
48
|
-
// Extract and route each section type
|
|
49
|
-
const routes = [
|
|
50
|
-
{ section: "decisions", room: "architecture", topic: "decisions" },
|
|
51
|
-
{ section: "blockers", room: "blockers", topic: "current" },
|
|
52
|
-
{ section: "next", room: "goals", topic: "active" },
|
|
53
|
-
{ section: "observations", room: "knowledge", topic: "observations" },
|
|
54
|
-
];
|
|
55
|
-
for (const route of routes) {
|
|
56
|
-
const sectionContent = extractSection(content, route.section);
|
|
57
|
-
if (!sectionContent || sectionContent.trim().length < 10)
|
|
58
|
-
continue;
|
|
59
|
-
// Ensure room exists
|
|
60
|
-
if (!roomExists(project, route.room)) {
|
|
61
|
-
const name = route.room.charAt(0).toUpperCase() + route.room.slice(1);
|
|
62
|
-
createRoom(project, route.room, name, `Consolidated from journal ${route.section}`, []);
|
|
63
|
-
}
|
|
64
|
-
const topicPath = path.join(pd, "rooms", route.room, `${route.topic}.md`);
|
|
65
|
-
ensureDir(path.dirname(topicPath));
|
|
66
|
-
// Build entry with source traceability
|
|
67
|
-
const fm = !fs.existsSync(topicPath)
|
|
68
|
-
? generateFrontmatter({
|
|
69
|
-
room: route.room,
|
|
70
|
-
topic: route.topic,
|
|
71
|
-
created: new Date().toISOString(),
|
|
72
|
-
source: "consolidation",
|
|
73
|
-
sources: [entry.date],
|
|
74
|
-
})
|
|
75
|
-
: "";
|
|
76
|
-
const memoryEntry = `\n### ${entry.date} ${sourceRef}\n\n${sectionContent.replace(/^## .+\n/, "").trim()}\n`;
|
|
77
|
-
if (fs.existsSync(topicPath)) {
|
|
78
|
-
// Check if this date's content is already consolidated (idempotent)
|
|
79
|
-
const existing = fs.readFileSync(topicPath, "utf-8");
|
|
80
|
-
if (existing.includes(`### ${entry.date}`))
|
|
81
|
-
continue;
|
|
82
|
-
fs.appendFileSync(topicPath, memoryEntry, "utf-8");
|
|
83
|
-
}
|
|
84
|
-
else {
|
|
85
|
-
fs.writeFileSync(topicPath, `${fm}# ${route.room} / ${route.topic}\n${memoryEntry}`, "utf-8");
|
|
86
|
-
}
|
|
87
|
-
// Update room metadata
|
|
88
|
-
updateRoomMeta(project, route.room, {
|
|
89
|
-
updated: new Date().toISOString(),
|
|
90
|
-
});
|
|
91
|
-
updatedRooms.add(route.room);
|
|
92
|
-
result.memoriesCreated++;
|
|
93
|
-
// Fan-out with source reference
|
|
94
|
-
fanOut(project, route.room, route.topic, sectionContent, [], "medium");
|
|
95
|
-
}
|
|
96
|
-
// Extract brief → goals/evolution
|
|
97
|
-
const brief = extractSection(content, "brief");
|
|
98
|
-
if (brief && brief.trim().length > 5) {
|
|
99
|
-
const evoPath = path.join(pd, "rooms", "goals", "evolution.md");
|
|
100
|
-
ensureDir(path.dirname(evoPath));
|
|
101
|
-
const evoEntry = `\n### ${entry.date} ${sourceRef}\n\n${brief.split("\n")[0]}\n`;
|
|
102
|
-
if (fs.existsSync(evoPath)) {
|
|
103
|
-
const existing = fs.readFileSync(evoPath, "utf-8");
|
|
104
|
-
if (!existing.includes(`### ${entry.date}`)) {
|
|
105
|
-
fs.appendFileSync(evoPath, evoEntry, "utf-8");
|
|
106
|
-
result.memoriesCreated++;
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
else {
|
|
110
|
-
const fm = generateFrontmatter({ room: "goals", topic: "evolution", created: new Date().toISOString(), source: "consolidation" });
|
|
111
|
-
fs.writeFileSync(evoPath, `${fm}# goals / evolution\n${evoEntry}`, "utf-8");
|
|
112
|
-
result.memoriesCreated++;
|
|
113
|
-
}
|
|
114
|
-
updatedRooms.add("goals");
|
|
115
|
-
}
|
|
116
|
-
result.entriesProcessed++;
|
|
117
|
-
}
|
|
118
|
-
result.roomsUpdated = Array.from(updatedRooms);
|
|
119
|
-
// Update palace index
|
|
120
|
-
updatePalaceIndex(project);
|
|
121
|
-
// Log the operation
|
|
122
|
-
appendToLog(project, "consolidate", {
|
|
123
|
-
entries_processed: result.entriesProcessed,
|
|
124
|
-
rooms_updated: result.roomsUpdated,
|
|
125
|
-
memories_created: result.memoriesCreated,
|
|
126
|
-
});
|
|
127
|
-
return result;
|
|
128
|
-
}
|
|
129
|
-
//# sourceMappingURL=consolidate.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"consolidate.js","sourceRoot":"","sources":["../../src/palace/consolidate.ts"],"names":[],"mappings":"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"}
|
package/dist/palace/fan-out.d.ts
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fan-out write logic.
|
|
3
|
-
* When content is written to a room, this module:
|
|
4
|
-
* 1. Parses [[wikilinks]] from the content
|
|
5
|
-
* 2. Adds back-references in referenced rooms
|
|
6
|
-
* 3. Updates graph.json with new edges
|
|
7
|
-
* 4. Recalculates salience for affected rooms
|
|
8
|
-
*/
|
|
9
|
-
import type { Importance } from "../types.js";
|
|
10
|
-
export interface FanOutResult {
|
|
11
|
-
updatedRooms: string[];
|
|
12
|
-
newEdges: number;
|
|
13
|
-
}
|
|
14
|
-
export declare function fanOut(project: string, sourceRoom: string, sourceTopic: string, content: string, explicitConnections?: string[], importance?: Importance): FanOutResult;
|
|
15
|
-
//# sourceMappingURL=fan-out.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out.d.ts","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AASH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,wBAAgB,MAAM,CACpB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,mBAAmB,GAAE,MAAM,EAAO,EAClC,UAAU,GAAE,UAAqB,GAChC,YAAY,CAoEd"}
|
package/dist/palace/fan-out.js
DELETED
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Fan-out write logic.
|
|
3
|
-
* When content is written to a room, this module:
|
|
4
|
-
* 1. Parses [[wikilinks]] from the content
|
|
5
|
-
* 2. Adds back-references in referenced rooms
|
|
6
|
-
* 3. Updates graph.json with new edges
|
|
7
|
-
* 4. Recalculates salience for affected rooms
|
|
8
|
-
*/
|
|
9
|
-
import * as fs from "node:fs";
|
|
10
|
-
import * as path from "node:path";
|
|
11
|
-
import { palaceDir } from "../storage/paths.js";
|
|
12
|
-
import { extractWikilinks, addBackReference } from "./obsidian.js";
|
|
13
|
-
import { addEdge, getConnectionCount } from "./graph.js";
|
|
14
|
-
import { getRoomMeta, updateRoomMeta } from "./rooms.js";
|
|
15
|
-
import { computeSalience } from "./salience.js";
|
|
16
|
-
export function fanOut(project, sourceRoom, sourceTopic, content, explicitConnections = [], importance = "medium") {
|
|
17
|
-
const pd = palaceDir(project);
|
|
18
|
-
const result = { updatedRooms: [], newEdges: 0 };
|
|
19
|
-
// Collect all targets: from wikilinks + explicit connections
|
|
20
|
-
const wikiTargets = extractWikilinks(content);
|
|
21
|
-
const allTargets = new Set([...wikiTargets, ...explicitConnections]);
|
|
22
|
-
for (const target of allTargets) {
|
|
23
|
-
// Target could be "roomSlug" or "roomSlug/topic"
|
|
24
|
-
const targetRoom = target.split("/")[0];
|
|
25
|
-
if (targetRoom === sourceRoom)
|
|
26
|
-
continue; // skip self-references
|
|
27
|
-
// Add back-reference in target room's README.md
|
|
28
|
-
const targetReadme = path.join(pd, "rooms", targetRoom, "README.md");
|
|
29
|
-
if (fs.existsSync(targetReadme)) {
|
|
30
|
-
const readmeContent = fs.readFileSync(targetReadme, "utf-8");
|
|
31
|
-
const updated = addBackReference(readmeContent, sourceRoom, sourceTopic);
|
|
32
|
-
if (updated !== readmeContent) {
|
|
33
|
-
fs.writeFileSync(targetReadme, updated, "utf-8");
|
|
34
|
-
result.updatedRooms.push(targetRoom);
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
// Add edge to graph
|
|
38
|
-
addEdge(pd, `${sourceRoom}/${sourceTopic}`, target, "references");
|
|
39
|
-
result.newEdges++;
|
|
40
|
-
// Update target room's connections list
|
|
41
|
-
const targetMeta = getRoomMeta(project, targetRoom);
|
|
42
|
-
if (targetMeta && !targetMeta.connections.includes(sourceRoom)) {
|
|
43
|
-
updateRoomMeta(project, targetRoom, {
|
|
44
|
-
connections: [...targetMeta.connections, sourceRoom],
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
// Update source room's connections list
|
|
49
|
-
const sourceMeta = getRoomMeta(project, sourceRoom);
|
|
50
|
-
if (sourceMeta) {
|
|
51
|
-
const newConns = new Set(sourceMeta.connections);
|
|
52
|
-
for (const target of allTargets) {
|
|
53
|
-
const targetRoom = target.split("/")[0];
|
|
54
|
-
if (targetRoom !== sourceRoom)
|
|
55
|
-
newConns.add(targetRoom);
|
|
56
|
-
}
|
|
57
|
-
updateRoomMeta(project, sourceRoom, {
|
|
58
|
-
connections: Array.from(newConns),
|
|
59
|
-
});
|
|
60
|
-
}
|
|
61
|
-
// Recalculate salience for all affected rooms
|
|
62
|
-
const affectedRooms = new Set([sourceRoom, ...result.updatedRooms]);
|
|
63
|
-
for (const room of affectedRooms) {
|
|
64
|
-
const meta = getRoomMeta(project, room);
|
|
65
|
-
if (!meta)
|
|
66
|
-
continue;
|
|
67
|
-
const connCount = getConnectionCount(pd, room);
|
|
68
|
-
const newSalience = computeSalience({
|
|
69
|
-
importance,
|
|
70
|
-
lastUpdated: meta.updated,
|
|
71
|
-
accessCount: meta.access_count,
|
|
72
|
-
connectionCount: connCount,
|
|
73
|
-
});
|
|
74
|
-
updateRoomMeta(project, room, { salience: newSalience });
|
|
75
|
-
}
|
|
76
|
-
return result;
|
|
77
|
-
}
|
|
78
|
-
//# sourceMappingURL=fan-out.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"fan-out.js","sourceRoot":"","sources":["../../src/palace/fan-out.ts"],"names":[],"mappings":"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"}
|
package/dist/palace/graph.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Palace graph management — cross-reference edges between rooms and memories.
|
|
3
|
-
*/
|
|
4
|
-
import type { PalaceGraph } from "../types.js";
|
|
5
|
-
export declare function readGraph(palaceDir: string): PalaceGraph;
|
|
6
|
-
export declare function writeGraph(palaceDir: string, graph: PalaceGraph): void;
|
|
7
|
-
export declare function addEdge(palaceDir: string, from: string, to: string, type?: string, weight?: number): void;
|
|
8
|
-
export declare function removeEdgesFor(palaceDir: string, target: string): void;
|
|
9
|
-
export declare function getConnectionCount(palaceDir: string, roomSlug: string): number;
|
|
10
|
-
export declare function getConnectedRooms(palaceDir: string, roomSlug: string): string[];
|
|
11
|
-
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../../src/palace/graph.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAa,MAAM,aAAa,CAAC;AAO1D,wBAAgB,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,WAAW,CAExD;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAEtE;AAED,wBAAgB,OAAO,CACrB,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,IAAI,GAAE,MAAqB,EAC3B,MAAM,GAAE,MAAY,GACnB,IAAI,CAkBN;AAED,wBAAgB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAMtE;AAED,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAS9E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB/E"}
|