@coralai/sps-cli 0.58.14 → 0.58.16
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 +2 -14
- package/dist/commands/agentCommand.d.ts.map +1 -1
- package/dist/commands/agentCommand.js +29 -26
- package/dist/commands/agentCommand.js.map +1 -1
- package/dist/commands/memoryCommand.d.ts +2 -0
- package/dist/commands/memoryCommand.d.ts.map +1 -0
- package/dist/commands/memoryCommand.js +263 -0
- package/dist/commands/memoryCommand.js.map +1 -0
- package/dist/commands/projectInit.d.ts.map +1 -1
- package/dist/commands/projectInit.js +21 -0
- package/dist/commands/projectInit.js.map +1 -1
- package/dist/commands/tick.d.ts.map +1 -1
- package/dist/commands/tick.js +1 -19
- package/dist/commands/tick.js.map +1 -1
- package/dist/console/index.d.ts.map +1 -1
- package/dist/console/index.js +2 -0
- package/dist/console/index.js.map +1 -1
- package/dist/console/routes/memory.d.ts +11 -0
- package/dist/console/routes/memory.d.ts.map +1 -0
- package/dist/console/routes/memory.js +63 -0
- package/dist/console/routes/memory.js.map +1 -0
- package/dist/console/routes/system.d.ts.map +1 -1
- package/dist/console/routes/system.js +6 -3
- package/dist/console/routes/system.js.map +1 -1
- package/dist/console-assets/assets/index-DENsMsFy.css +10 -0
- package/dist/console-assets/assets/{index-BiGbp-FL.js → index-R6Y8wve3.js} +194 -194
- package/dist/console-assets/index.html +2 -2
- package/dist/core/agents/AcpBackend.d.ts +2 -0
- package/dist/core/agents/AcpBackend.d.ts.map +1 -1
- package/dist/core/agents/AcpBackend.js +5 -0
- package/dist/core/agents/AcpBackend.js.map +1 -1
- package/dist/core/agents/ClaudeSdkBackend.d.ts +0 -1
- package/dist/core/agents/ClaudeSdkBackend.d.ts.map +1 -1
- package/dist/core/agents/ClaudeSdkBackend.js +1 -1
- package/dist/core/agents/ClaudeSdkBackend.js.map +1 -1
- package/dist/core/agents/CodexAppServerBackend.d.ts +0 -1
- package/dist/core/agents/CodexAppServerBackend.d.ts.map +1 -1
- package/dist/core/agents/CodexAppServerBackend.js +1 -1
- package/dist/core/agents/CodexAppServerBackend.js.map +1 -1
- package/dist/core/agents/OpenAiAgentBackend.d.ts +0 -2
- package/dist/core/agents/OpenAiAgentBackend.d.ts.map +1 -1
- package/dist/core/agents/OpenAiAgentBackend.js +5 -4
- package/dist/core/agents/OpenAiAgentBackend.js.map +1 -1
- package/dist/core/agents/resolveBackend.d.ts +0 -1
- package/dist/core/agents/resolveBackend.d.ts.map +1 -1
- package/dist/core/agents/resolveBackend.js +3 -4
- package/dist/core/agents/resolveBackend.js.map +1 -1
- package/dist/core/codegraph/claudeMdRule.d.ts +7 -0
- package/dist/core/codegraph/claudeMdRule.d.ts.map +1 -0
- package/dist/core/codegraph/claudeMdRule.js +79 -0
- package/dist/core/codegraph/claudeMdRule.js.map +1 -0
- package/dist/core/memory2/capture.d.ts +33 -0
- package/dist/core/memory2/capture.d.ts.map +1 -0
- package/dist/core/memory2/capture.js +102 -0
- package/dist/core/memory2/capture.js.map +1 -0
- package/dist/core/memory2/claudeMdRule.d.ts +7 -0
- package/dist/core/memory2/claudeMdRule.d.ts.map +1 -0
- package/dist/core/memory2/claudeMdRule.js +65 -0
- package/dist/core/memory2/claudeMdRule.js.map +1 -0
- package/dist/core/memory2/config.d.ts +20 -0
- package/dist/core/memory2/config.d.ts.map +1 -0
- package/dist/core/memory2/config.js +26 -0
- package/dist/core/memory2/config.js.map +1 -0
- package/dist/core/memory2/digest.d.ts +16 -0
- package/dist/core/memory2/digest.d.ts.map +1 -0
- package/dist/core/memory2/digest.js +52 -0
- package/dist/core/memory2/digest.js.map +1 -0
- package/dist/core/memory2/gc.d.ts +9 -0
- package/dist/core/memory2/gc.d.ts.map +1 -0
- package/dist/core/memory2/gc.js +45 -0
- package/dist/core/memory2/gc.js.map +1 -0
- package/dist/core/memory2/inject.d.ts +16 -0
- package/dist/core/memory2/inject.d.ts.map +1 -0
- package/dist/core/memory2/inject.js +45 -0
- package/dist/core/memory2/inject.js.map +1 -0
- package/dist/core/memory2/lock.d.ts +7 -0
- package/dist/core/memory2/lock.d.ts.map +1 -0
- package/dist/core/memory2/lock.js +59 -0
- package/dist/core/memory2/lock.js.map +1 -0
- package/dist/core/memory2/migrate.d.ts +12 -0
- package/dist/core/memory2/migrate.d.ts.map +1 -0
- package/dist/core/memory2/migrate.js +119 -0
- package/dist/core/memory2/migrate.js.map +1 -0
- package/dist/core/memory2/redact.d.ts +21 -0
- package/dist/core/memory2/redact.d.ts.map +1 -0
- package/dist/core/memory2/redact.js +116 -0
- package/dist/core/memory2/redact.js.map +1 -0
- package/dist/core/memory2/retrieve.d.ts +16 -0
- package/dist/core/memory2/retrieve.d.ts.map +1 -0
- package/dist/core/memory2/retrieve.js +70 -0
- package/dist/core/memory2/retrieve.js.map +1 -0
- package/dist/core/memory2/store.d.ts +30 -0
- package/dist/core/memory2/store.d.ts.map +1 -0
- package/dist/core/memory2/store.js +217 -0
- package/dist/core/memory2/store.js.map +1 -0
- package/dist/core/memory2/types.d.ts +53 -0
- package/dist/core/memory2/types.d.ts.map +1 -0
- package/dist/core/memory2/types.js +12 -0
- package/dist/core/memory2/types.js.map +1 -0
- package/dist/engines/StageEngine.d.ts.map +1 -1
- package/dist/engines/StageEngine.js +14 -8
- package/dist/engines/StageEngine.js.map +1 -1
- package/dist/main.js +17 -154
- package/dist/main.js.map +1 -1
- package/dist/manager/worker-manager-impl.d.ts +10 -0
- package/dist/manager/worker-manager-impl.d.ts.map +1 -1
- package/dist/manager/worker-manager-impl.js +80 -5
- package/dist/manager/worker-manager-impl.js.map +1 -1
- package/dist/providers/llm/workerTools.js +1 -1
- package/dist/providers/mcp/spsMcpServer.d.ts +13 -7
- package/dist/providers/mcp/spsMcpServer.d.ts.map +1 -1
- package/dist/providers/mcp/spsMcpServer.js +90 -28
- package/dist/providers/mcp/spsMcpServer.js.map +1 -1
- package/dist/providers/mcp/spsMcpStdio.js +3 -15
- package/dist/providers/mcp/spsMcpStdio.js.map +1 -1
- package/dist/providers/mcp/spsMcpStdioConfig.d.ts +2 -1
- package/dist/providers/mcp/spsMcpStdioConfig.d.ts.map +1 -1
- package/dist/providers/mcp/spsMcpStdioConfig.js +3 -1
- package/dist/providers/mcp/spsMcpStdioConfig.js.map +1 -1
- package/dist/services/MemoryService.d.ts +69 -0
- package/dist/services/MemoryService.d.ts.map +1 -0
- package/dist/services/MemoryService.js +178 -0
- package/dist/services/MemoryService.js.map +1 -0
- package/dist/services/SystemService.d.ts +17 -3
- package/dist/services/SystemService.d.ts.map +1 -1
- package/dist/services/SystemService.js +75 -17
- package/dist/services/SystemService.js.map +1 -1
- package/dist/services/container.d.ts +2 -0
- package/dist/services/container.d.ts.map +1 -1
- package/dist/services/container.js +2 -0
- package/dist/services/container.js.map +1 -1
- package/package.json +1 -2
- package/project-template/.claude/CLAUDE.md +0 -23
- package/skills/sps-pipeline/SKILL.md +12 -15
- package/dist/console-assets/assets/index-BHtTCxMY.css +0 -10
- package/dist/core/memory.d.ts +0 -85
- package/dist/core/memory.d.ts.map +0 -1
- package/dist/core/memory.js +0 -374
- package/dist/core/memory.js.map +0 -1
- package/dist/core/memoryIngest.d.ts +0 -18
- package/dist/core/memoryIngest.d.ts.map +0 -1
- package/dist/core/memoryIngest.js +0 -56
- package/dist/core/memoryIngest.js.map +0 -1
- package/dist/core/memoryProvider.d.ts +0 -63
- package/dist/core/memoryProvider.d.ts.map +0 -1
- package/dist/core/memoryProvider.js +0 -205
- package/dist/core/memoryProvider.js.map +0 -1
- package/dist/core/transcriptIngest.d.ts +0 -37
- package/dist/core/transcriptIngest.d.ts.map +0 -1
- package/dist/core/transcriptIngest.js +0 -137
- package/dist/core/transcriptIngest.js.map +0 -1
- package/skills/sps-memory/SKILL.md +0 -51
package/dist/core/memory.js
DELETED
|
@@ -1,374 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module memory
|
|
3
|
-
* @description 项目级持久化知识记忆系统
|
|
4
|
-
*
|
|
5
|
-
* @author eddy
|
|
6
|
-
* @organization wykj
|
|
7
|
-
* @ownership wykj/eddy
|
|
8
|
-
*
|
|
9
|
-
* @created 2026-04-03
|
|
10
|
-
* @updated 2026-04-03
|
|
11
|
-
*
|
|
12
|
-
* @role util
|
|
13
|
-
* @layer core
|
|
14
|
-
* @boundedContext memory
|
|
15
|
-
*
|
|
16
|
-
* Types: convention (no decay), decision (slow decay), lesson (normal decay), reference (no decay)
|
|
17
|
-
*/
|
|
18
|
-
import { existsSync, mkdirSync, readdirSync, readFileSync, statSync, writeFileSync } from 'node:fs';
|
|
19
|
-
import { homedir } from 'node:os';
|
|
20
|
-
import { basename, resolve } from 'node:path';
|
|
21
|
-
// ─── Types ──────────────────────────────────────────────────────
|
|
22
|
-
export const MEMORY_TYPES = ['convention', 'decision', 'lesson', 'reference'];
|
|
23
|
-
export const MEMORY_INDEX = 'MEMORY.md';
|
|
24
|
-
const MAX_INDEX_LINES = 200;
|
|
25
|
-
const MAX_MEMORY_FILES = 200;
|
|
26
|
-
const MAX_FILE_LINES = 200;
|
|
27
|
-
const MAX_CONTEXT_ENTRIES = 10;
|
|
28
|
-
const FRONTMATTER_MAX_LINES = 30;
|
|
29
|
-
// Types that don't decay — always relevant
|
|
30
|
-
const NO_DECAY_TYPES = ['convention', 'reference'];
|
|
31
|
-
// ─── Paths ──────────────────────────────────────────────────────
|
|
32
|
-
/** Get the user-level memory directory (cross-project preferences) */
|
|
33
|
-
export function getUserMemoryDir() {
|
|
34
|
-
return resolve(homedir(), '.coral', 'memory', 'user');
|
|
35
|
-
}
|
|
36
|
-
/** Get the agent-level memory directory (per daemon instance) */
|
|
37
|
-
export function getAgentMemoryDir(agentId) {
|
|
38
|
-
return resolve(homedir(), '.coral', 'memory', 'agents', agentId);
|
|
39
|
-
}
|
|
40
|
-
/** Get the memory directory for a project */
|
|
41
|
-
export function getProjectMemoryDir(project) {
|
|
42
|
-
return resolve(homedir(), '.coral', 'memory', 'projects', project);
|
|
43
|
-
}
|
|
44
|
-
/** Ensure project memory directory exists */
|
|
45
|
-
export function ensureMemoryDir(project) {
|
|
46
|
-
const dir = getProjectMemoryDir(project);
|
|
47
|
-
if (!existsSync(dir))
|
|
48
|
-
mkdirSync(dir, { recursive: true });
|
|
49
|
-
return dir;
|
|
50
|
-
}
|
|
51
|
-
/** Ensure user memory directory exists */
|
|
52
|
-
export function ensureUserMemoryDir() {
|
|
53
|
-
return ensureDir(getUserMemoryDir());
|
|
54
|
-
}
|
|
55
|
-
/** Ensure agent memory directory exists */
|
|
56
|
-
export function ensureAgentMemoryDir(agentId) {
|
|
57
|
-
return ensureDir(getAgentMemoryDir(agentId));
|
|
58
|
-
}
|
|
59
|
-
/** Ensure any memory directory exists (generic) */
|
|
60
|
-
function ensureDir(dir) {
|
|
61
|
-
if (!existsSync(dir))
|
|
62
|
-
mkdirSync(dir, { recursive: true });
|
|
63
|
-
return dir;
|
|
64
|
-
}
|
|
65
|
-
// ─── Scanning ───────────────────────────────────────────────────
|
|
66
|
-
/** Parse simple YAML frontmatter from file content (first N lines) */
|
|
67
|
-
function parseFrontmatter(content) {
|
|
68
|
-
const lines = content.split('\n');
|
|
69
|
-
if (lines[0]?.trim() !== '---')
|
|
70
|
-
return {};
|
|
71
|
-
const result = {};
|
|
72
|
-
for (let i = 1; i < lines.length; i++) {
|
|
73
|
-
if (lines[i].trim() === '---')
|
|
74
|
-
break;
|
|
75
|
-
const match = lines[i].match(/^(\w+):\s*(.+)$/);
|
|
76
|
-
if (match) {
|
|
77
|
-
result[match[1]] = match[2].trim();
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
return result;
|
|
81
|
-
}
|
|
82
|
-
/** Scan memory directory for .md files, return headers sorted newest-first */
|
|
83
|
-
export function scanMemoryFiles(memoryDir) {
|
|
84
|
-
if (!existsSync(memoryDir))
|
|
85
|
-
return [];
|
|
86
|
-
try {
|
|
87
|
-
const files = readdirSync(memoryDir, { recursive: true })
|
|
88
|
-
.map(f => typeof f === 'string' ? f : f.toString())
|
|
89
|
-
.filter(f => f.endsWith('.md') && basename(f) !== MEMORY_INDEX);
|
|
90
|
-
const headers = [];
|
|
91
|
-
for (const relativePath of files) {
|
|
92
|
-
try {
|
|
93
|
-
const filePath = resolve(memoryDir, relativePath);
|
|
94
|
-
const stat = statSync(filePath);
|
|
95
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
96
|
-
// Only read first N lines for frontmatter
|
|
97
|
-
const head = content.split('\n').slice(0, FRONTMATTER_MAX_LINES).join('\n');
|
|
98
|
-
const fm = parseFrontmatter(head);
|
|
99
|
-
headers.push({
|
|
100
|
-
filename: relativePath,
|
|
101
|
-
filePath,
|
|
102
|
-
mtimeMs: stat.mtimeMs,
|
|
103
|
-
name: fm.name || null,
|
|
104
|
-
description: fm.description || null,
|
|
105
|
-
type: MEMORY_TYPES.find(t => t === fm.type),
|
|
106
|
-
});
|
|
107
|
-
}
|
|
108
|
-
catch { /* skip unreadable files */ }
|
|
109
|
-
}
|
|
110
|
-
return headers
|
|
111
|
-
.sort((a, b) => b.mtimeMs - a.mtimeMs)
|
|
112
|
-
.slice(0, MAX_MEMORY_FILES);
|
|
113
|
-
}
|
|
114
|
-
catch {
|
|
115
|
-
return [];
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
// ─── Reading ────────────────────────────────────────────────────
|
|
119
|
-
/** Read MEMORY.md index content, truncated to max lines */
|
|
120
|
-
export function readMemoryIndex(memoryDir) {
|
|
121
|
-
const indexPath = resolve(memoryDir, MEMORY_INDEX);
|
|
122
|
-
if (!existsSync(indexPath))
|
|
123
|
-
return '';
|
|
124
|
-
const content = readFileSync(indexPath, 'utf-8').trim();
|
|
125
|
-
const lines = content.split('\n');
|
|
126
|
-
if (lines.length > MAX_INDEX_LINES) {
|
|
127
|
-
return lines.slice(0, MAX_INDEX_LINES).join('\n')
|
|
128
|
-
+ `\n\n> WARNING: ${MEMORY_INDEX} has ${lines.length} lines (limit: ${MAX_INDEX_LINES}). Truncated.`;
|
|
129
|
-
}
|
|
130
|
-
return content;
|
|
131
|
-
}
|
|
132
|
-
/** Read a memory file, truncated to max lines */
|
|
133
|
-
export function readMemoryFile(filePath) {
|
|
134
|
-
if (!existsSync(filePath))
|
|
135
|
-
return '';
|
|
136
|
-
const content = readFileSync(filePath, 'utf-8');
|
|
137
|
-
const lines = content.split('\n');
|
|
138
|
-
if (lines.length > MAX_FILE_LINES) {
|
|
139
|
-
return lines.slice(0, MAX_FILE_LINES).join('\n')
|
|
140
|
-
+ `\n\n> [Truncated — ${lines.length} lines total. Use file read for full content.]`;
|
|
141
|
-
}
|
|
142
|
-
return content;
|
|
143
|
-
}
|
|
144
|
-
/** Memory age in days */
|
|
145
|
-
function memoryAgeDays(mtimeMs) {
|
|
146
|
-
return Math.floor((Date.now() - mtimeMs) / (1000 * 60 * 60 * 24));
|
|
147
|
-
}
|
|
148
|
-
/** Staleness caveat for old memories */
|
|
149
|
-
function stalenessCaveat(mtimeMs) {
|
|
150
|
-
const days = memoryAgeDays(mtimeMs);
|
|
151
|
-
if (days <= 1)
|
|
152
|
-
return null;
|
|
153
|
-
return `> This memory is ${days} days old. Verify against current code before acting on it.`;
|
|
154
|
-
}
|
|
155
|
-
// ─── Context Generation ─────────────────────────────────────────
|
|
156
|
-
/**
|
|
157
|
-
* Select relevant memories for a worker prompt.
|
|
158
|
-
* Priority: convention (always) > card-related > decision > lesson > reference
|
|
159
|
-
* No decay types are always included. Lessons decay by age.
|
|
160
|
-
*/
|
|
161
|
-
function selectRelevantMemories(headers, _cardSeq) {
|
|
162
|
-
const selected = [];
|
|
163
|
-
// 1. All conventions and references (no decay, always relevant)
|
|
164
|
-
for (const h of headers) {
|
|
165
|
-
if (h.type && NO_DECAY_TYPES.includes(h.type)) {
|
|
166
|
-
selected.push(h);
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
// 2. Decisions (sorted newest-first, already in that order)
|
|
170
|
-
for (const h of headers) {
|
|
171
|
-
if (h.type === 'decision' && !selected.includes(h)) {
|
|
172
|
-
selected.push(h);
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
// 3. Lessons (normal decay — skip if older than 30 days)
|
|
176
|
-
for (const h of headers) {
|
|
177
|
-
if (h.type === 'lesson' && !selected.includes(h)) {
|
|
178
|
-
if (memoryAgeDays(h.mtimeMs) <= 30) {
|
|
179
|
-
selected.push(h);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
// 4. Untyped memories (legacy)
|
|
184
|
-
for (const h of headers) {
|
|
185
|
-
if (!h.type && !selected.includes(h)) {
|
|
186
|
-
selected.push(h);
|
|
187
|
-
}
|
|
188
|
-
}
|
|
189
|
-
return selected.slice(0, MAX_CONTEXT_ENTRIES);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Build the memory context string for prompt injection.
|
|
193
|
-
* Includes: MEMORY.md index + selected file contents.
|
|
194
|
-
*/
|
|
195
|
-
export function buildMemoryContext(project, cardSeq) {
|
|
196
|
-
const memoryDir = getProjectMemoryDir(project);
|
|
197
|
-
if (!existsSync(memoryDir))
|
|
198
|
-
return '';
|
|
199
|
-
const sections = [];
|
|
200
|
-
// 1. Read index
|
|
201
|
-
const index = readMemoryIndex(memoryDir);
|
|
202
|
-
// 2. Scan and select relevant memories
|
|
203
|
-
const headers = scanMemoryFiles(memoryDir);
|
|
204
|
-
if (headers.length === 0 && !index)
|
|
205
|
-
return '';
|
|
206
|
-
const selected = selectRelevantMemories(headers, cardSeq);
|
|
207
|
-
sections.push('# Project Memory');
|
|
208
|
-
sections.push('');
|
|
209
|
-
if (index) {
|
|
210
|
-
sections.push('## Index');
|
|
211
|
-
sections.push(index);
|
|
212
|
-
sections.push('');
|
|
213
|
-
}
|
|
214
|
-
// 3. Include selected memory file contents
|
|
215
|
-
if (selected.length > 0) {
|
|
216
|
-
sections.push('## Relevant Memories');
|
|
217
|
-
sections.push('');
|
|
218
|
-
for (const h of selected) {
|
|
219
|
-
const content = readMemoryFile(h.filePath);
|
|
220
|
-
const caveat = stalenessCaveat(h.mtimeMs);
|
|
221
|
-
const age = memoryAgeDays(h.mtimeMs);
|
|
222
|
-
const ageLabel = age === 0 ? 'today' : age === 1 ? 'yesterday' : `${age} days ago`;
|
|
223
|
-
sections.push(`### ${h.name || h.filename} (saved ${ageLabel})`);
|
|
224
|
-
if (caveat)
|
|
225
|
-
sections.push(caveat);
|
|
226
|
-
sections.push(content);
|
|
227
|
-
sections.push('');
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
return sections.join('\n').trim();
|
|
231
|
-
}
|
|
232
|
-
/**
|
|
233
|
-
* Build user-level memory context (cross-project preferences).
|
|
234
|
-
* Injected into every agent/worker prompt.
|
|
235
|
-
*/
|
|
236
|
-
export function buildUserMemoryContext() {
|
|
237
|
-
const memoryDir = getUserMemoryDir();
|
|
238
|
-
if (!existsSync(memoryDir))
|
|
239
|
-
return '';
|
|
240
|
-
const headers = scanMemoryFiles(memoryDir);
|
|
241
|
-
const index = readMemoryIndex(memoryDir);
|
|
242
|
-
if (headers.length === 0 && !index)
|
|
243
|
-
return '';
|
|
244
|
-
const sections = ['# User Preferences', ''];
|
|
245
|
-
if (index) {
|
|
246
|
-
sections.push(index);
|
|
247
|
-
sections.push('');
|
|
248
|
-
}
|
|
249
|
-
// Include all user memories (small set, no filtering needed)
|
|
250
|
-
for (const h of headers.slice(0, MAX_CONTEXT_ENTRIES)) {
|
|
251
|
-
const content = readMemoryFile(h.filePath);
|
|
252
|
-
sections.push(`### ${h.name || h.filename}`);
|
|
253
|
-
sections.push(content);
|
|
254
|
-
sections.push('');
|
|
255
|
-
}
|
|
256
|
-
return sections.join('\n').trim();
|
|
257
|
-
}
|
|
258
|
-
/**
|
|
259
|
-
* Build agent-level memory context (daemon instance experience).
|
|
260
|
-
* Injected when attaching to a daemon session.
|
|
261
|
-
*/
|
|
262
|
-
export function buildAgentMemoryContext(agentId) {
|
|
263
|
-
const memoryDir = getAgentMemoryDir(agentId);
|
|
264
|
-
if (!existsSync(memoryDir))
|
|
265
|
-
return '';
|
|
266
|
-
const headers = scanMemoryFiles(memoryDir);
|
|
267
|
-
const index = readMemoryIndex(memoryDir);
|
|
268
|
-
if (headers.length === 0 && !index)
|
|
269
|
-
return '';
|
|
270
|
-
const sections = ['# Agent Memory', ''];
|
|
271
|
-
if (index) {
|
|
272
|
-
sections.push(index);
|
|
273
|
-
sections.push('');
|
|
274
|
-
}
|
|
275
|
-
for (const h of headers.slice(0, MAX_CONTEXT_ENTRIES)) {
|
|
276
|
-
const content = readMemoryFile(h.filePath);
|
|
277
|
-
const caveat = stalenessCaveat(h.mtimeMs);
|
|
278
|
-
const age = memoryAgeDays(h.mtimeMs);
|
|
279
|
-
const ageLabel = age === 0 ? 'today' : age === 1 ? 'yesterday' : `${age} days ago`;
|
|
280
|
-
sections.push(`### ${h.name || h.filename} (saved ${ageLabel})`);
|
|
281
|
-
if (caveat)
|
|
282
|
-
sections.push(caveat);
|
|
283
|
-
sections.push(content);
|
|
284
|
-
sections.push('');
|
|
285
|
-
}
|
|
286
|
-
return sections.join('\n').trim();
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Build combined memory context for all applicable layers.
|
|
290
|
-
* Used by StageEngine (user + project) and agent commands (user + agent).
|
|
291
|
-
*/
|
|
292
|
-
export function buildFullMemoryContext(opts) {
|
|
293
|
-
const parts = [];
|
|
294
|
-
// Layer 1: User preferences (always)
|
|
295
|
-
const userCtx = buildUserMemoryContext();
|
|
296
|
-
if (userCtx)
|
|
297
|
-
parts.push(userCtx);
|
|
298
|
-
// Layer 2: Agent memory (if daemon)
|
|
299
|
-
if (opts.agentId) {
|
|
300
|
-
const agentCtx = buildAgentMemoryContext(opts.agentId);
|
|
301
|
-
if (agentCtx)
|
|
302
|
-
parts.push(agentCtx);
|
|
303
|
-
}
|
|
304
|
-
// Layer 3: Project memory (if project context)
|
|
305
|
-
if (opts.project) {
|
|
306
|
-
const projectCtx = buildMemoryContext(opts.project, opts.cardSeq);
|
|
307
|
-
if (projectCtx)
|
|
308
|
-
parts.push(projectCtx);
|
|
309
|
-
}
|
|
310
|
-
return parts.join('\n\n---\n\n');
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Build memory write instructions for prompt injection.
|
|
314
|
-
* Tells the agent how and where to write memories across all three layers.
|
|
315
|
-
*/
|
|
316
|
-
export function buildMemoryWriteInstructions(project, _agentId) {
|
|
317
|
-
// v0.55.13:记忆走 agentmemory,并装有它的记忆 skills(/recall /remember … + 工具索引)。
|
|
318
|
-
// 优先用 skill——它们的 "use when" 触发词让你在长任务里**自主**判断何时用记忆,不靠人中途指挥。
|
|
319
|
-
return `# 记忆 / 经验 (agentmemory)
|
|
320
|
-
|
|
321
|
-
本项目接了 agentmemory 记忆库,且 \`.claude/skills/\` 里装有它的记忆 skills(\`/recall\` \`/remember\` \`/recap\` \`/handoff\` 等;\`agentmemory-mcp-tools\` 是全部记忆工具的索引)。**优先用这些 skill,它们各自的 "use when" 会告诉你何时用哪个、要更细的工具时查索引。** 没有 skill 就直接用 \`memory_recall\`/\`memory_smart_search\`/\`memory_save\` 工具。
|
|
322
|
-
|
|
323
|
-
**① 开工必做(可靠):** 先 \`/recall\` 一次——捞**本项目 \`${project}\`** 的既有进展 + **同类问题/引擎**的过往经验与坑。续作能省去重读代码、避免重踩坑。
|
|
324
|
-
|
|
325
|
-
**② 工作中(你自主判断):** 当你"需要过去的上下文""碰到似曾相识的问题""要用某游戏类型/引擎的经验或坑"时——**先 \`/recall\` 再动手,别凭空猜**。长任务里没人会中途提醒你,这一步靠你自觉触发。
|
|
326
|
-
|
|
327
|
-
**③ 收尾:** 把本卡真正**非显然、可复用**的关键决策 / 踩过的坑用 \`/remember\` 存一条精华(标项目 \`${project}\`)。日常观察大多会被自动捕获,你只需显式存"精华教训",一两条即可。
|
|
328
|
-
|
|
329
|
-
记忆服务不可用就跳过,不阻塞本卡。`;
|
|
330
|
-
}
|
|
331
|
-
// ─── Writing (for CLI use) ──────────────────────────────────────
|
|
332
|
-
/**
|
|
333
|
-
* Add a memory entry via CLI. Creates the file and updates MEMORY.md.
|
|
334
|
-
*/
|
|
335
|
-
export function addMemory(project, opts) {
|
|
336
|
-
const memoryDir = ensureMemoryDir(project);
|
|
337
|
-
// Generate filename from name
|
|
338
|
-
const slug = opts.name
|
|
339
|
-
.toLowerCase()
|
|
340
|
-
.replace(/[^a-z0-9]+/g, '-')
|
|
341
|
-
.replace(/^-|-$/g, '')
|
|
342
|
-
.slice(0, 50);
|
|
343
|
-
const filename = `${slug}.md`;
|
|
344
|
-
const filePath = resolve(memoryDir, filename);
|
|
345
|
-
// Write memory file
|
|
346
|
-
const content = `---
|
|
347
|
-
name: ${opts.name}
|
|
348
|
-
description: ${opts.description}
|
|
349
|
-
type: ${opts.type}
|
|
350
|
-
---
|
|
351
|
-
|
|
352
|
-
${opts.body}
|
|
353
|
-
`;
|
|
354
|
-
writeFileSync(filePath, content);
|
|
355
|
-
// Update MEMORY.md index
|
|
356
|
-
const indexPath = resolve(memoryDir, MEMORY_INDEX);
|
|
357
|
-
let indexContent = '';
|
|
358
|
-
if (existsSync(indexPath)) {
|
|
359
|
-
indexContent = readFileSync(indexPath, 'utf-8').trim();
|
|
360
|
-
}
|
|
361
|
-
// Check for duplicate entry (same filename)
|
|
362
|
-
const lines = indexContent ? indexContent.split('\n') : [];
|
|
363
|
-
const existingIdx = lines.findIndex(l => l.includes(`(${filename})`));
|
|
364
|
-
const newLine = `- [${opts.name}](${filename}) — ${opts.description}`;
|
|
365
|
-
if (existingIdx >= 0) {
|
|
366
|
-
lines[existingIdx] = newLine;
|
|
367
|
-
}
|
|
368
|
-
else {
|
|
369
|
-
lines.push(newLine);
|
|
370
|
-
}
|
|
371
|
-
writeFileSync(indexPath, lines.join('\n') + '\n');
|
|
372
|
-
return filePath;
|
|
373
|
-
}
|
|
374
|
-
//# sourceMappingURL=memory.js.map
|
package/dist/core/memory.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory.js","sourceRoot":"","sources":["../../src/core/memory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { type UnifiedAddInput } from './memoryProvider.js';
|
|
2
|
-
/** 把增量文本切成「记忆大小」的条目:按空行分段,过滤过短。 */
|
|
3
|
-
export declare function segmentMemory(text: string): string[];
|
|
4
|
-
export interface IngestOpts {
|
|
5
|
-
/** 注入 sink(默认 addMemoryUnified);测试 / 换后端用。 */
|
|
6
|
-
add?: (project: string, input: UnifiedAddInput, raw: Record<string, string>) => Promise<{
|
|
7
|
-
ok: boolean;
|
|
8
|
-
}>;
|
|
9
|
-
/** 覆盖记忆目录(默认 getProjectMemoryDir);测试用。 */
|
|
10
|
-
memoryDir?: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* 摄取一个项目 MEMORY.md 的新增量到 agentmemory。幂等:cursor(已摄取字节数)存在记忆目录,
|
|
14
|
-
* 只搬 cursor 之后的内容;文件被截断/重写(长度 < cursor)→ 归零重头(agentmemory 去重兜底)。
|
|
15
|
-
* @returns 本次新摄取的条目数。
|
|
16
|
-
*/
|
|
17
|
-
export declare function ingestProjectMemory(project: string, raw: Record<string, string>, opts?: IngestOpts): Promise<number>;
|
|
18
|
-
//# sourceMappingURL=memoryIngest.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryIngest.d.ts","sourceRoot":"","sources":["../../src/core/memoryIngest.ts"],"names":[],"mappings":"AAYA,OAAO,EAAoB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE7E,mCAAmC;AACnC,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAKpD;AAED,MAAM,WAAW,UAAU;IACzB,8CAA8C;IAC9C,GAAG,CAAC,EAAE,CACJ,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KACxB,OAAO,CAAC;QAAE,EAAE,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC9B,0CAA0C;IAC1C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;GAIG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,IAAI,GAAE,UAAe,GACpB,OAAO,CAAC,MAAM,CAAC,CA2BjB"}
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module core/memoryIngest
|
|
3
|
-
* @description 记忆摄取层 v1(写·解耦):把 worker 自己写的 **MEMORY.md 增量**同步进跨项目记忆库
|
|
4
|
-
* (agentmemory)。agent 零额外负担——它只管写 MEMORY.md,本层用 cursor 记位、只搬新增量。
|
|
5
|
-
* MEMORY.md 已是策展内容,免蒸馏;下游去重/压缩交给 agentmemory。
|
|
6
|
-
* transcript(.jsonl/session.json)源 = v2(需分段,留后续)。设计:docs/adapters/memory-layer.md。
|
|
7
|
-
* @layer core
|
|
8
|
-
* @boundedContext memory
|
|
9
|
-
*/
|
|
10
|
-
import { existsSync, readFileSync, writeFileSync } from 'node:fs';
|
|
11
|
-
import { resolve } from 'node:path';
|
|
12
|
-
import { getProjectMemoryDir } from './memory.js';
|
|
13
|
-
import { addMemoryUnified } from './memoryProvider.js';
|
|
14
|
-
/** 把增量文本切成「记忆大小」的条目:按空行分段,过滤过短。 */
|
|
15
|
-
export function segmentMemory(text) {
|
|
16
|
-
return text
|
|
17
|
-
.split(/\n\s*\n/)
|
|
18
|
-
.map((s) => s.trim())
|
|
19
|
-
.filter((s) => s.length >= 8);
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 摄取一个项目 MEMORY.md 的新增量到 agentmemory。幂等:cursor(已摄取字节数)存在记忆目录,
|
|
23
|
-
* 只搬 cursor 之后的内容;文件被截断/重写(长度 < cursor)→ 归零重头(agentmemory 去重兜底)。
|
|
24
|
-
* @returns 本次新摄取的条目数。
|
|
25
|
-
*/
|
|
26
|
-
export async function ingestProjectMemory(project, raw, opts = {}) {
|
|
27
|
-
const dir = opts.memoryDir ?? getProjectMemoryDir(project);
|
|
28
|
-
const md = resolve(dir, 'MEMORY.md');
|
|
29
|
-
if (!existsSync(md))
|
|
30
|
-
return 0;
|
|
31
|
-
const add = opts.add ?? addMemoryUnified;
|
|
32
|
-
const content = readFileSync(md, 'utf-8');
|
|
33
|
-
const cursorFile = resolve(dir, '.sps-ingest-cursor');
|
|
34
|
-
let cursor = 0;
|
|
35
|
-
if (existsSync(cursorFile)) {
|
|
36
|
-
cursor = Number.parseInt(readFileSync(cursorFile, 'utf-8').trim(), 10) || 0;
|
|
37
|
-
}
|
|
38
|
-
if (content.length < cursor)
|
|
39
|
-
cursor = 0; // 文件被重写/截断 → 重头
|
|
40
|
-
const entries = segmentMemory(content.slice(cursor));
|
|
41
|
-
let n = 0;
|
|
42
|
-
for (const e of entries) {
|
|
43
|
-
const name = (e.split('\n')[0] ?? e).slice(0, 80);
|
|
44
|
-
try {
|
|
45
|
-
const r = await add(project, { type: 'note', name, body: e }, raw);
|
|
46
|
-
if (r.ok)
|
|
47
|
-
n++;
|
|
48
|
-
}
|
|
49
|
-
catch {
|
|
50
|
-
/* 单条失败不阻塞其余;cursor 仍前进,避免下轮重灌已成功的 */
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
writeFileSync(cursorFile, String(content.length));
|
|
54
|
-
return n;
|
|
55
|
-
}
|
|
56
|
-
//# sourceMappingURL=memoryIngest.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryIngest.js","sourceRoot":"","sources":["../../src/core/memoryIngest.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAClE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAwB,MAAM,qBAAqB,CAAC;AAE7E,mCAAmC;AACnC,MAAM,UAAU,aAAa,CAAC,IAAY;IACxC,OAAO,IAAI;SACR,KAAK,CAAC,SAAS,CAAC;SAChB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;AAClC,CAAC;AAaD;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAe,EACf,GAA2B,EAC3B,OAAmB,EAAE;IAErB,MAAM,GAAG,GAAG,IAAI,CAAC,SAAS,IAAI,mBAAmB,CAAC,OAAO,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACrC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,gBAAgB,CAAC;IAEzC,MAAM,OAAO,GAAG,YAAY,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;IAC1C,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,oBAAoB,CAAC,CAAC;IACtD,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,IAAI,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAC9E,CAAC;IACD,IAAI,OAAO,CAAC,MAAM,GAAG,MAAM;QAAE,MAAM,GAAG,CAAC,CAAC,CAAC,gBAAgB;IAEzD,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACrD,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC;YACH,MAAM,CAAC,GAAG,MAAM,GAAG,CAAC,OAAO,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;YACnE,IAAI,CAAC,CAAC,EAAE;gBAAE,CAAC,EAAE,CAAC;QAChB,CAAC;QAAC,MAAM,CAAC;YACP,qCAAqC;QACvC,CAAC;IACH,CAAC;IACD,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;IAClD,OAAO,CAAC,CAAC;AACX,CAAC"}
|
|
@@ -1,63 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* @module memoryProvider
|
|
3
|
-
* @description 记忆后端的 sps-cli 侧装配:注册 builtin(进程内复用 core/memory 文件记忆)、
|
|
4
|
-
* 解析全局配置(SPS_MEMORY_PROVIDER / SPS_MEMORY_URL)、给 worker 透传 env、
|
|
5
|
-
* 以及按后端产出「写记忆」引导(leg ③)。
|
|
6
|
-
*
|
|
7
|
-
* @role util
|
|
8
|
-
* @layer core
|
|
9
|
-
* @boundedContext memory
|
|
10
|
-
*
|
|
11
|
-
* 设计见交接记忆 sps-cli-memory-plugin:cc-agent 的 createMemoryProvider 跑在 daemon 进程内,
|
|
12
|
-
* 故 builtin 直接进程内注入,复用 buildMemoryContext,不复制逻辑、不走 socket。
|
|
13
|
-
*/
|
|
14
|
-
export type MemoryProviderName = 'none' | 'builtin' | 'agentmemory' | 'custom';
|
|
15
|
-
export interface MemoryConfig {
|
|
16
|
-
provider: string;
|
|
17
|
-
/** custom/agentmemory 的后端 URL(空 = 用默认)。 */
|
|
18
|
-
url: string;
|
|
19
|
-
}
|
|
20
|
-
/** 幂等:在 daemon 进程内注册宿主提供的后端(builtin)。spawn worker 前调用一次。 */
|
|
21
|
-
export declare function ensureMemoryProvidersRegistered(): void;
|
|
22
|
-
/** 从配置(项目 conf 合并全局 env,或纯全局 env)解析记忆后端。默认 agentmemory。 */
|
|
23
|
-
export declare function resolveMemoryConfig(raw: Record<string, string>): MemoryConfig;
|
|
24
|
-
/** 透传给 cc-agent 工厂的 worker env(extraEnv)。 */
|
|
25
|
-
export declare function memoryEnv(cfg: MemoryConfig): Record<string, string>;
|
|
26
|
-
/**
|
|
27
|
-
* leg ③:**统一**的 worker 写记忆引导(不分后端,none → 空串)。
|
|
28
|
-
* agent 无论后端是什么,都只用 `sps memory search/add` 这一套 CLI;由 CLI 内部按
|
|
29
|
-
* SPS_MEMORY_PROVIDER 分发到 builtin/agentmemory/custom。
|
|
30
|
-
*/
|
|
31
|
-
export declare function buildWorkerMemoryInstructions(project: string, provider: string): string;
|
|
32
|
-
export interface UnifiedAddInput {
|
|
33
|
-
type: string;
|
|
34
|
-
name: string;
|
|
35
|
-
description?: string;
|
|
36
|
-
body: string;
|
|
37
|
-
}
|
|
38
|
-
/** 统一写:builtin→文件;agentmemory/custom→REST /remember;none→跳过。 */
|
|
39
|
-
export declare function addMemoryUnified(project: string, input: UnifiedAddInput, raw: Record<string, string>): Promise<{
|
|
40
|
-
ok: boolean;
|
|
41
|
-
message: string;
|
|
42
|
-
}>;
|
|
43
|
-
export interface AuditGroup {
|
|
44
|
-
key: string;
|
|
45
|
-
count: number;
|
|
46
|
-
items: string[];
|
|
47
|
-
}
|
|
48
|
-
export interface AuditResult {
|
|
49
|
-
provider: string;
|
|
50
|
-
total: number;
|
|
51
|
-
duplicateGroups: AuditGroup[];
|
|
52
|
-
}
|
|
53
|
-
/**
|
|
54
|
-
* Runtime 事后审计(v1:只读去重报告)。按归一化标题分组,报告重复组。
|
|
55
|
-
* agent 直接写(propose)后,这里事后扫库找重复供清理。实际删除待验证后端 forget 端点(v2)。
|
|
56
|
-
*/
|
|
57
|
-
export declare function auditMemoryUnified(project: string, raw: Record<string, string>, limit?: number): Promise<AuditResult>;
|
|
58
|
-
/** 统一搜索:builtin→文件包含匹配;agentmemory/custom→REST smart-search;none→空。 */
|
|
59
|
-
export declare function searchMemoryUnified(project: string, query: string, raw: Record<string, string>, limit?: number): Promise<{
|
|
60
|
-
provider: string;
|
|
61
|
-
hits: string[];
|
|
62
|
-
}>;
|
|
63
|
-
//# sourceMappingURL=memoryProvider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memoryProvider.d.ts","sourceRoot":"","sources":["../../src/core/memoryProvider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAYH,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,SAAS,GAAG,aAAa,GAAG,QAAQ,CAAC;AAE/E,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,GAAG,EAAE,MAAM,CAAC;CACb;AAID,4DAA4D;AAC5D,wBAAgB,+BAA+B,IAAI,IAAI,CAiBtD;AAED,2DAA2D;AAC3D,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,YAAY,CAK7E;AAED,6CAA6C;AAC7C,wBAAgB,SAAS,CAAC,GAAG,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAInE;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAQvF;AAqCD,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,gEAAgE;AAChE,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,eAAe,EACtB,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC1B,OAAO,CAAC;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CA2B3C;AAED,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,eAAe,EAAE,UAAU,EAAE,CAAC;CAC/B;AAED;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,SAAM,GACV,OAAO,CAAC,WAAW,CAAC,CAmCtB;AAED,uEAAuE;AACvE,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,KAAK,SAAI,GACR,OAAO,CAAC;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CA8B/C"}
|