@tyroneross/bookmark 0.2.0 → 0.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/.claude-plugin/marketplace.json +29 -12
- package/.claude-plugin/plugin.json +12 -8
- package/.codex-plugin/plugin.json +31 -0
- package/.mcp.json +8 -0
- package/CLAUDE.md +82 -38
- package/LICENSE +202 -21
- package/README.md +150 -57
- package/agents/snapshot-analyst.md +1 -1
- package/commands/bookmark.md +29 -0
- package/commands/feedback.md +37 -0
- package/commands/restore.md +14 -4
- package/commands/snapshot.md +19 -7
- package/commands/status.md +1 -1
- package/dist/cli/index.js +600 -66
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/snapshot-resolution.d.ts +15 -0
- package/dist/cli/snapshot-resolution.d.ts.map +1 -0
- package/dist/cli/snapshot-resolution.js +21 -0
- package/dist/cli/snapshot-resolution.js.map +1 -0
- package/dist/config.d.ts +19 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +150 -19
- package/dist/config.js.map +1 -1
- package/dist/context/freshness.d.ts +3 -0
- package/dist/context/freshness.d.ts.map +1 -0
- package/dist/context/freshness.js +29 -0
- package/dist/context/freshness.js.map +1 -0
- package/dist/context/handoff-prompt.d.ts +12 -0
- package/dist/context/handoff-prompt.d.ts.map +1 -0
- package/dist/context/handoff-prompt.js +29 -0
- package/dist/context/handoff-prompt.js.map +1 -0
- package/dist/index.d.ts +7 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/mcp/server.d.ts +9 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +85 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools.d.ts +97 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +304 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/registry.d.ts +40 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +134 -0
- package/dist/registry.js.map +1 -0
- package/dist/restore/index.d.ts +13 -1
- package/dist/restore/index.d.ts.map +1 -1
- package/dist/restore/index.js +154 -256
- package/dist/restore/index.js.map +1 -1
- package/dist/setup/auto-setup.d.ts +8 -2
- package/dist/setup/auto-setup.d.ts.map +1 -1
- package/dist/setup/auto-setup.js +281 -66
- package/dist/setup/auto-setup.js.map +1 -1
- package/dist/setup/configure-hooks.d.ts +14 -3
- package/dist/setup/configure-hooks.d.ts.map +1 -1
- package/dist/setup/configure-hooks.js +156 -24
- package/dist/setup/configure-hooks.js.map +1 -1
- package/dist/snapshot/capture.d.ts +12 -10
- package/dist/snapshot/capture.d.ts.map +1 -1
- package/dist/snapshot/capture.js +36 -48
- package/dist/snapshot/capture.js.map +1 -1
- package/dist/snapshot/compress.d.ts +3 -3
- package/dist/snapshot/compress.d.ts.map +1 -1
- package/dist/snapshot/compress.js +16 -51
- package/dist/snapshot/compress.js.map +1 -1
- package/dist/snapshot/storage.d.ts +1 -0
- package/dist/snapshot/storage.d.ts.map +1 -1
- package/dist/snapshot/storage.js +7 -6
- package/dist/snapshot/storage.js.map +1 -1
- package/dist/threshold/state.d.ts +5 -0
- package/dist/threshold/state.d.ts.map +1 -1
- package/dist/threshold/state.js +28 -2
- package/dist/threshold/state.js.map +1 -1
- package/dist/threshold/token-usage.d.ts +29 -0
- package/dist/threshold/token-usage.d.ts.map +1 -0
- package/dist/threshold/token-usage.js +128 -0
- package/dist/threshold/token-usage.js.map +1 -0
- package/dist/trails/identity.d.ts +76 -0
- package/dist/trails/identity.d.ts.map +1 -0
- package/dist/trails/identity.js +117 -0
- package/dist/trails/identity.js.map +1 -0
- package/dist/trails/reader.d.ts +1 -1
- package/dist/trails/reader.js +2 -2
- package/dist/trails/reader.js.map +1 -1
- package/dist/trails/writer.d.ts +2 -8
- package/dist/trails/writer.d.ts.map +1 -1
- package/dist/trails/writer.js +33 -191
- package/dist/trails/writer.js.map +1 -1
- package/dist/transcript/extractor.d.ts +8 -9
- package/dist/transcript/extractor.d.ts.map +1 -1
- package/dist/transcript/extractor.js +97 -360
- package/dist/transcript/extractor.js.map +1 -1
- package/dist/types.d.ts +34 -41
- package/dist/types.d.ts.map +1 -1
- package/hooks/hooks.json +12 -14
- package/package.json +13 -7
- package/scripts/install-plugin.sh +48 -0
- package/skills/context-continuity/SKILL.md +43 -24
- package/commands/activate.md +0 -20
- package/dist/transcript/estimator.d.ts +0 -20
- package/dist/transcript/estimator.d.ts.map +0 -1
- package/dist/transcript/estimator.js +0 -95
- package/dist/transcript/estimator.js.map +0 -1
package/dist/trails/writer.js
CHANGED
|
@@ -3,197 +3,13 @@ import { join } from 'node:path';
|
|
|
3
3
|
/**
|
|
4
4
|
* Trail-routed memory writer.
|
|
5
5
|
*
|
|
6
|
-
* Writes
|
|
7
|
-
*
|
|
8
|
-
* 2. trails/ — detail files the LLM can Read if it needs more
|
|
9
|
-
*
|
|
10
|
-
* Each capture updates trails incrementally:
|
|
11
|
-
* - Decisions get appended with timestamps, newer same-topic overrides older
|
|
12
|
-
* - Files get merged (union by path, latest operations win)
|
|
13
|
-
* - CONTEXT.md gets rewritten with current state + routing pointers
|
|
6
|
+
* Writes file tracking data to trails/files.md.
|
|
7
|
+
* bookmark.context.md is Claude's domain — written via Stop/PreCompact prompt hooks.
|
|
14
8
|
*/
|
|
15
9
|
// ─── Public API ───
|
|
16
10
|
export function writeTrails(storagePath, snapshot) {
|
|
17
11
|
const trailsDir = ensureTrailsDir(storagePath);
|
|
18
|
-
|
|
19
|
-
const decisionStats = writeDecisionTrail(trailsDir, snapshot);
|
|
20
|
-
const fileStats = writeFileTrail(trailsDir, snapshot);
|
|
21
|
-
// Write trailhead last — it references the trails
|
|
22
|
-
writeContextMd(storagePath, snapshot, trailsDir, { decisionStats, fileStats });
|
|
23
|
-
}
|
|
24
|
-
function writeContextMd(storagePath, snapshot, trailsDir, stats) {
|
|
25
|
-
const lines = [];
|
|
26
|
-
const projectName = snapshot.project_path.split('/').pop() ?? 'project';
|
|
27
|
-
const ts = new Date(snapshot.timestamp).toISOString().slice(0, 16) + 'Z';
|
|
28
|
-
lines.push(`[Bookmark Context — ${projectName}]`);
|
|
29
|
-
lines.push(`> Updated: ${ts} | Cycle: ${snapshot.compaction_cycle}`);
|
|
30
|
-
lines.push('');
|
|
31
|
-
// Intent — THE most important line
|
|
32
|
-
if (snapshot.intent && snapshot.intent !== 'Unknown') {
|
|
33
|
-
lines.push(`**Intent:** ${snapshot.intent}`);
|
|
34
|
-
}
|
|
35
|
-
// Progress
|
|
36
|
-
if (snapshot.progress && snapshot.progress !== 'Unknown') {
|
|
37
|
-
lines.push(`**Progress:** ${snapshot.progress}`);
|
|
38
|
-
}
|
|
39
|
-
// Sentiment
|
|
40
|
-
if (snapshot.user_sentiment && snapshot.user_sentiment !== 'neutral') {
|
|
41
|
-
lines.push(`**User feedback:** ${snapshot.user_sentiment}`);
|
|
42
|
-
}
|
|
43
|
-
lines.push('');
|
|
44
|
-
// Routing table — tells the LLM where to find deeper context
|
|
45
|
-
lines.push('**Trails** (use Read tool if you need more detail):');
|
|
46
|
-
if (stats.decisionStats.active > 0) {
|
|
47
|
-
lines.push(`- \`${trailsDir}/decisions.md\` — ${stats.decisionStats.active} active decisions${stats.decisionStats.superseded > 0 ? `, ${stats.decisionStats.superseded} superseded` : ''}`);
|
|
48
|
-
}
|
|
49
|
-
if (stats.fileStats.count > 0) {
|
|
50
|
-
lines.push(`- \`${trailsDir}/files.md\` — ${stats.fileStats.count} files, ~${stats.fileStats.totalLines} lines changed`);
|
|
51
|
-
}
|
|
52
|
-
lines.push('');
|
|
53
|
-
// Remaining items — always in trailhead (these are actionable)
|
|
54
|
-
if (snapshot.open_items.length > 0) {
|
|
55
|
-
lines.push('**Remaining:**');
|
|
56
|
-
for (const item of snapshot.open_items.slice(0, 4)) {
|
|
57
|
-
lines.push(`- ${item.description.slice(0, 120)}`);
|
|
58
|
-
}
|
|
59
|
-
lines.push('');
|
|
60
|
-
}
|
|
61
|
-
lines.push('Resume the task above. Follow trail links only if you need specifics.');
|
|
62
|
-
writeFileSync(join(storagePath, 'CONTEXT.md'), lines.join('\n'), 'utf-8');
|
|
63
|
-
}
|
|
64
|
-
function writeDecisionTrail(trailsDir, snapshot) {
|
|
65
|
-
const trailPath = join(trailsDir, 'decisions.md');
|
|
66
|
-
// Load existing decisions
|
|
67
|
-
let existing = loadDecisionEntries(trailPath);
|
|
68
|
-
// Add new decisions from this snapshot
|
|
69
|
-
const ts = new Date(snapshot.timestamp).toISOString().slice(0, 16) + 'Z';
|
|
70
|
-
for (const d of snapshot.decisions) {
|
|
71
|
-
const topic = deriveTopic(d.description);
|
|
72
|
-
const entry = {
|
|
73
|
-
timestamp: ts,
|
|
74
|
-
topic,
|
|
75
|
-
description: d.description,
|
|
76
|
-
rationale: d.rationale,
|
|
77
|
-
status: 'active',
|
|
78
|
-
};
|
|
79
|
-
// Check for same-topic override
|
|
80
|
-
const existingIdx = existing.findIndex(e => e.topic === topic && e.status === 'active');
|
|
81
|
-
if (existingIdx >= 0) {
|
|
82
|
-
// Supersede the old one
|
|
83
|
-
existing[existingIdx].status = 'superseded';
|
|
84
|
-
existing[existingIdx].superseded_by = ts;
|
|
85
|
-
}
|
|
86
|
-
existing.push(entry);
|
|
87
|
-
}
|
|
88
|
-
// Deduplicate: if we have exact same description, skip
|
|
89
|
-
existing = deduplicateDecisions(existing);
|
|
90
|
-
// Write the trail file
|
|
91
|
-
const active = existing.filter(e => e.status === 'active');
|
|
92
|
-
const superseded = existing.filter(e => e.status === 'superseded');
|
|
93
|
-
const lines = [];
|
|
94
|
-
lines.push('# Decision Trail');
|
|
95
|
-
lines.push('> Newer decisions override older on the same topic. [SUPERSEDED] entries kept for context.');
|
|
96
|
-
lines.push('');
|
|
97
|
-
if (active.length > 0) {
|
|
98
|
-
lines.push('## Active');
|
|
99
|
-
for (const d of active) {
|
|
100
|
-
lines.push('');
|
|
101
|
-
lines.push(`### [${d.timestamp}] ${d.description.slice(0, 100)}`);
|
|
102
|
-
if (d.rationale) {
|
|
103
|
-
lines.push(`Rationale: ${d.rationale.slice(0, 150)}`);
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
lines.push('');
|
|
107
|
-
}
|
|
108
|
-
if (superseded.length > 0) {
|
|
109
|
-
lines.push('## Superseded');
|
|
110
|
-
for (const d of superseded) {
|
|
111
|
-
lines.push(`- ~~${d.description.slice(0, 80)}~~ → replaced ${d.superseded_by ?? ''}`);
|
|
112
|
-
}
|
|
113
|
-
lines.push('');
|
|
114
|
-
}
|
|
115
|
-
writeFileSync(trailPath, lines.join('\n'), 'utf-8');
|
|
116
|
-
return { active: active.length, superseded: superseded.length };
|
|
117
|
-
}
|
|
118
|
-
/**
|
|
119
|
-
* Derive a topic key from a decision description.
|
|
120
|
-
* Used for same-topic override detection.
|
|
121
|
-
* Takes the first 4 significant words, lowercased.
|
|
122
|
-
*/
|
|
123
|
-
function deriveTopic(description) {
|
|
124
|
-
const stopWords = new Set([
|
|
125
|
-
'the', 'a', 'an', 'is', 'are', 'was', 'were', 'to', 'for', 'of',
|
|
126
|
-
'in', 'on', 'at', 'by', 'with', 'from', 'that', 'this', 'it',
|
|
127
|
-
'and', 'or', 'but', 'not', 'be', 'has', 'have', 'had', 'do', 'does',
|
|
128
|
-
'use', 'using', 'used',
|
|
129
|
-
]);
|
|
130
|
-
const words = description
|
|
131
|
-
.toLowerCase()
|
|
132
|
-
.replace(/[^a-z0-9\s]/g, '')
|
|
133
|
-
.split(/\s+/)
|
|
134
|
-
.filter(w => w.length > 2 && !stopWords.has(w));
|
|
135
|
-
return words.slice(0, 4).join('_') || 'misc';
|
|
136
|
-
}
|
|
137
|
-
function loadDecisionEntries(trailPath) {
|
|
138
|
-
if (!existsSync(trailPath))
|
|
139
|
-
return [];
|
|
140
|
-
try {
|
|
141
|
-
const content = readFileSync(trailPath, 'utf-8');
|
|
142
|
-
const entries = [];
|
|
143
|
-
// Parse the markdown back into entries
|
|
144
|
-
let currentStatus = 'active';
|
|
145
|
-
const lines = content.split('\n');
|
|
146
|
-
for (const line of lines) {
|
|
147
|
-
if (line.startsWith('## Active')) {
|
|
148
|
-
currentStatus = 'active';
|
|
149
|
-
continue;
|
|
150
|
-
}
|
|
151
|
-
if (line.startsWith('## Superseded')) {
|
|
152
|
-
currentStatus = 'superseded';
|
|
153
|
-
continue;
|
|
154
|
-
}
|
|
155
|
-
if (currentStatus === 'active' && line.startsWith('### [')) {
|
|
156
|
-
const tsMatch = line.match(/### \[([^\]]+)\] (.+)/);
|
|
157
|
-
if (tsMatch) {
|
|
158
|
-
entries.push({
|
|
159
|
-
timestamp: tsMatch[1],
|
|
160
|
-
topic: deriveTopic(tsMatch[2]),
|
|
161
|
-
description: tsMatch[2],
|
|
162
|
-
status: 'active',
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
}
|
|
166
|
-
if (currentStatus === 'superseded' && line.startsWith('- ~~')) {
|
|
167
|
-
const match = line.match(/- ~~(.+?)~~ → replaced (.+)/);
|
|
168
|
-
if (match) {
|
|
169
|
-
entries.push({
|
|
170
|
-
timestamp: '',
|
|
171
|
-
topic: deriveTopic(match[1]),
|
|
172
|
-
description: match[1],
|
|
173
|
-
status: 'superseded',
|
|
174
|
-
superseded_by: match[2],
|
|
175
|
-
});
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
return entries;
|
|
180
|
-
}
|
|
181
|
-
catch {
|
|
182
|
-
return [];
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
function deduplicateDecisions(entries) {
|
|
186
|
-
const seen = new Set();
|
|
187
|
-
const result = [];
|
|
188
|
-
// Walk backward so newest entries win dedup
|
|
189
|
-
for (let i = entries.length - 1; i >= 0; i--) {
|
|
190
|
-
const key = entries[i].description.slice(0, 60).toLowerCase();
|
|
191
|
-
if (!seen.has(key)) {
|
|
192
|
-
seen.add(key);
|
|
193
|
-
result.unshift(entries[i]);
|
|
194
|
-
}
|
|
195
|
-
}
|
|
196
|
-
return result;
|
|
12
|
+
writeFileTrail(trailsDir, snapshot);
|
|
197
13
|
}
|
|
198
14
|
// ─── File Trail ───
|
|
199
15
|
function writeFileTrail(trailsDir, snapshot) {
|
|
@@ -210,12 +26,26 @@ function writeFileTrail(trailsDir, snapshot) {
|
|
|
210
26
|
existing.operations = [...ops];
|
|
211
27
|
// Use max, not sum — same transcript produces same totals across snapshots
|
|
212
28
|
existing.lines_changed = Math.max(existing.lines_changed ?? 0, f.lines_changed ?? 0);
|
|
29
|
+
// Merge summaries: combine unique structural hints
|
|
30
|
+
if (f.summary) {
|
|
31
|
+
if (existing.summary) {
|
|
32
|
+
const existingHints = new Set(existing.summary.split(', '));
|
|
33
|
+
const newHints = f.summary.split(', ');
|
|
34
|
+
for (const h of newHints)
|
|
35
|
+
existingHints.add(h);
|
|
36
|
+
existing.summary = [...existingHints].slice(0, 6).join(', ');
|
|
37
|
+
}
|
|
38
|
+
else {
|
|
39
|
+
existing.summary = f.summary;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
213
42
|
}
|
|
214
43
|
else {
|
|
215
44
|
fileMap.set(shortPath, {
|
|
216
45
|
path: shortPath,
|
|
217
46
|
operations: [...f.operations],
|
|
218
47
|
lines_changed: f.lines_changed,
|
|
48
|
+
summary: f.summary,
|
|
219
49
|
});
|
|
220
50
|
}
|
|
221
51
|
}
|
|
@@ -228,10 +58,19 @@ function writeFileTrail(trailsDir, snapshot) {
|
|
|
228
58
|
lines.push('');
|
|
229
59
|
for (const f of files) {
|
|
230
60
|
const lc = f.lines_changed ? ` ~${f.lines_changed}L` : '';
|
|
231
|
-
|
|
61
|
+
let line = `- \`${f.path}\` (${f.operations.join('/')}${lc})`;
|
|
62
|
+
if (f.summary) {
|
|
63
|
+
line += ` — ${f.summary}`;
|
|
64
|
+
}
|
|
65
|
+
lines.push(line);
|
|
232
66
|
}
|
|
233
67
|
writeFileSync(trailPath, lines.join('\n'), 'utf-8');
|
|
234
|
-
|
|
68
|
+
// Return top files with summaries for bookmark.context.md
|
|
69
|
+
const topFiles = files
|
|
70
|
+
.filter(f => f.summary)
|
|
71
|
+
.slice(0, 5)
|
|
72
|
+
.map(f => ({ path: f.path, summary: f.summary }));
|
|
73
|
+
return { count: files.length, totalLines, topFiles };
|
|
235
74
|
}
|
|
236
75
|
function loadFileEntries(trailPath) {
|
|
237
76
|
if (!existsSync(trailPath))
|
|
@@ -240,7 +79,7 @@ function loadFileEntries(trailPath) {
|
|
|
240
79
|
const content = readFileSync(trailPath, 'utf-8');
|
|
241
80
|
const fileMap = new Map();
|
|
242
81
|
for (const line of content.split('\n')) {
|
|
243
|
-
// Parse: - `src/foo.ts` (edit/write ~123L)
|
|
82
|
+
// Parse: - `src/foo.ts` (edit/write ~123L) — +fn registerPlugin, +fn ensurePluginSymlink
|
|
244
83
|
const match = line.match(/^- `(.+?)` \(([^)]+)\)/);
|
|
245
84
|
if (match) {
|
|
246
85
|
const path = match[1];
|
|
@@ -248,7 +87,10 @@ function loadFileEntries(trailPath) {
|
|
|
248
87
|
const ops = opsStr.replace(/\s*~\d+L/, '').split('/');
|
|
249
88
|
const lcMatch = opsStr.match(/~(\d+)L/);
|
|
250
89
|
const linesChanged = lcMatch ? parseInt(lcMatch[1], 10) : undefined;
|
|
251
|
-
|
|
90
|
+
// Extract summary after " — " if present
|
|
91
|
+
const summaryMatch = line.match(/\) — (.+)$/);
|
|
92
|
+
const summary = summaryMatch ? summaryMatch[1] : undefined;
|
|
93
|
+
fileMap.set(path, { path, operations: ops, lines_changed: linesChanged, summary });
|
|
252
94
|
}
|
|
253
95
|
}
|
|
254
96
|
return fileMap;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/trails/writer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"writer.js","sourceRoot":"","sources":["../../src/trails/writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,21 +1,20 @@
|
|
|
1
|
-
import type { TranscriptEntry,
|
|
1
|
+
import type { TranscriptEntry, FileActivity } from '../types.js';
|
|
2
2
|
export interface ExtractOptions {
|
|
3
|
-
/** Project root path — used to scope file tracking and relevance filtering */
|
|
4
3
|
projectPath?: string;
|
|
5
4
|
}
|
|
5
|
+
export interface FilesAndToolsResult {
|
|
6
|
+
files_changed: FileActivity[];
|
|
7
|
+
tools_summary: Record<string, number>;
|
|
8
|
+
}
|
|
6
9
|
/**
|
|
7
|
-
* Extract
|
|
8
|
-
*
|
|
10
|
+
* Extract file changes and tool usage from transcript entries.
|
|
11
|
+
* These are the two extraction functions that actually produce accurate data.
|
|
9
12
|
*/
|
|
10
|
-
export declare function
|
|
13
|
+
export declare function extractFilesAndTools(entries: TranscriptEntry[], options?: ExtractOptions): FilesAndToolsResult;
|
|
11
14
|
export interface CommitGap {
|
|
12
15
|
edits_since_commit: number;
|
|
13
16
|
files_since_commit: number;
|
|
14
17
|
last_commit_index: number;
|
|
15
18
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Detect how many file edits have happened since the last git commit.
|
|
18
|
-
* If no commit is found, returns total edits.
|
|
19
|
-
*/
|
|
20
19
|
export declare function extractCommitGap(entries: TranscriptEntry[]): CommitGap;
|
|
21
20
|
//# sourceMappingURL=extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/transcript/extractor.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../src/transcript/extractor.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,YAAY,EAAiB,MAAM,aAAa,CAAC;AAyChF,MAAM,WAAW,cAAc;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACvC;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,mBAAmB,CAM9G;AAyID,MAAM,WAAW,SAAS;IACxB,kBAAkB,EAAE,MAAM,CAAC;IAC3B,kBAAkB,EAAE,MAAM,CAAC;IAC3B,iBAAiB,EAAE,MAAM,CAAC;CAC3B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,eAAe,EAAE,GAAG,SAAS,CA+BtE"}
|