@coreyuan/vector-mind 1.0.53 → 1.1.0
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 +99 -72
- package/admin-panel/README.md +77 -0
- package/admin-panel/dist/client/assets/index-Bzyjdhh2.css +1 -0
- package/admin-panel/dist/client/assets/index-Ph73ewzt.js +9 -0
- package/admin-panel/dist/client/index.html +14 -0
- package/admin-panel/package.json +25 -0
- package/admin-panel/server/index.mjs +1424 -0
- package/admin-panel/server/security.mjs +117 -0
- package/admin-panel/server/security.test.mjs +113 -0
- package/admin-panel/server/storage.mjs +49 -0
- package/admin-panel/server/storage.test.mjs +36 -0
- package/dist/builtin-conventions.js +1 -1
- package/dist/builtin-conventions.js.map +1 -1
- package/dist/builtin-instructions.d.ts +1 -1
- package/dist/builtin-instructions.js +1 -1
- package/dist/builtin-instructions.js.map +1 -1
- package/dist/checkpoint-snapshot.d.ts +56 -0
- package/dist/checkpoint-snapshot.js +411 -0
- package/dist/checkpoint-snapshot.js.map +1 -0
- package/dist/config.d.ts +4 -1
- package/dist/config.js +25 -1
- package/dist/config.js.map +1 -1
- package/dist/context-governance.d.ts +56 -0
- package/dist/context-governance.js +176 -0
- package/dist/context-governance.js.map +1 -0
- package/dist/database-runtime.d.ts +6 -1
- package/dist/database-runtime.js +555 -127
- package/dist/database-runtime.js.map +1 -1
- package/dist/development-warnings.d.ts +2 -1
- package/dist/development-warnings.js +92 -22
- package/dist/development-warnings.js.map +1 -1
- package/dist/file-indexing.d.ts +2 -1
- package/dist/file-indexing.js +127 -47
- package/dist/file-indexing.js.map +1 -1
- package/dist/grep.js +4 -0
- package/dist/grep.js.map +1 -1
- package/dist/index.js +8 -2
- package/dist/index.js.map +1 -1
- package/dist/large-file-split.d.ts +53 -8
- package/dist/large-file-split.js +294 -75
- package/dist/large-file-split.js.map +1 -1
- package/dist/memory-maintenance/compaction.d.ts +7 -0
- package/dist/memory-maintenance/compaction.js +133 -0
- package/dist/memory-maintenance/compaction.js.map +1 -0
- package/dist/memory-maintenance/context.d.ts +37 -0
- package/dist/memory-maintenance/context.js +52 -0
- package/dist/memory-maintenance/context.js.map +1 -0
- package/dist/memory-maintenance/index-prune.d.ts +22 -0
- package/dist/memory-maintenance/index-prune.js +243 -0
- package/dist/memory-maintenance/index-prune.js.map +1 -0
- package/dist/memory-maintenance/metrics.d.ts +5 -0
- package/dist/memory-maintenance/metrics.js +30 -0
- package/dist/memory-maintenance/metrics.js.map +1 -0
- package/dist/memory-maintenance/pending.d.ts +4 -0
- package/dist/memory-maintenance/pending.js +74 -0
- package/dist/memory-maintenance/pending.js.map +1 -0
- package/dist/memory-maintenance/purge.d.ts +7 -0
- package/dist/memory-maintenance/purge.js +115 -0
- package/dist/memory-maintenance/purge.js.map +1 -0
- package/dist/memory-maintenance/runner.d.ts +5 -0
- package/dist/memory-maintenance/runner.js +182 -0
- package/dist/memory-maintenance/runner.js.map +1 -0
- package/dist/memory-maintenance/sqlite.d.ts +10 -0
- package/dist/memory-maintenance/sqlite.js +67 -0
- package/dist/memory-maintenance/sqlite.js.map +1 -0
- package/dist/memory-maintenance/types.d.ts +87 -0
- package/dist/memory-maintenance/types.js +2 -0
- package/dist/memory-maintenance/types.js.map +1 -0
- package/dist/memory-maintenance.d.ts +5 -80
- package/dist/memory-maintenance.js +3 -536
- package/dist/memory-maintenance.js.map +1 -1
- package/dist/memory-mutations.d.ts +3 -3
- package/dist/memory-mutations.js +109 -43
- package/dist/memory-mutations.js.map +1 -1
- package/dist/memory-recall.d.ts +3 -1
- package/dist/memory-recall.js +33 -1
- package/dist/memory-recall.js.map +1 -1
- package/dist/operation-scope.js +42 -12
- package/dist/operation-scope.js.map +1 -1
- package/dist/path-containment.d.ts +5 -0
- package/dist/path-containment.js +64 -0
- package/dist/path-containment.js.map +1 -0
- package/dist/path-filters.d.ts +1 -1
- package/dist/path-filters.js +7 -6
- package/dist/path-filters.js.map +1 -1
- package/dist/path-rules.d.ts +1 -0
- package/dist/path-rules.js +23 -1
- package/dist/path-rules.js.map +1 -1
- package/dist/pending-changes.d.ts +5 -0
- package/dist/pending-changes.js +30 -16
- package/dist/pending-changes.js.map +1 -1
- package/dist/project-files.d.ts +1 -0
- package/dist/project-files.js +19 -10
- package/dist/project-files.js.map +1 -1
- package/dist/root.d.ts +4 -1
- package/dist/root.js +34 -4
- package/dist/root.js.map +1 -1
- package/dist/rtk-integrity.d.ts +5 -0
- package/dist/rtk-integrity.js +35 -0
- package/dist/rtk-integrity.js.map +1 -0
- package/dist/rtk-shim.js +22 -9
- package/dist/rtk-shim.js.map +1 -1
- package/dist/rtk-tools.d.ts +8 -0
- package/dist/rtk-tools.js +59 -42
- package/dist/rtk-tools.js.map +1 -1
- package/dist/server-instructions.js +8 -88
- package/dist/server-instructions.js.map +1 -1
- package/dist/tool-catalog.d.ts +2 -0
- package/dist/tool-catalog.js +77 -24
- package/dist/tool-catalog.js.map +1 -1
- package/dist/tool-handlers/context-recovery.js +79 -54
- package/dist/tool-handlers/context-recovery.js.map +1 -1
- package/dist/tool-handlers/large-files.js +615 -41
- package/dist/tool-handlers/large-files.js.map +1 -1
- package/dist/tool-handlers/memory-diagnostics.js +240 -45
- package/dist/tool-handlers/memory-diagnostics.js.map +1 -1
- package/dist/tool-handlers/memory.js +167 -22
- package/dist/tool-handlers/memory.js.map +1 -1
- package/dist/tool-handlers/operations.js +28 -8
- package/dist/tool-handlers/operations.js.map +1 -1
- package/dist/tool-handlers/requirement-status.d.ts +5 -0
- package/dist/tool-handlers/requirement-status.js +267 -0
- package/dist/tool-handlers/requirement-status.js.map +1 -0
- package/dist/tool-handlers/requirements.js +851 -115
- package/dist/tool-handlers/requirements.js.map +1 -1
- package/dist/tool-handlers.d.ts +4 -0
- package/dist/tool-handlers.js +439 -6
- package/dist/tool-handlers.js.map +1 -1
- package/dist/tool-output.d.ts +71 -2
- package/dist/tool-output.js +56 -13
- package/dist/tool-output.js.map +1 -1
- package/dist/tool-schemas.d.ts +243 -0
- package/dist/tool-schemas.js +112 -26
- package/dist/tool-schemas.js.map +1 -1
- package/dist/types.d.ts +10 -1
- package/docs/capability-matrix.md +23 -17
- package/package.json +21 -5
- package/skills/vector-mind-autopilot/SKILL.md +82 -23
- package/skills/vector-mind-autopilot/references/claude-project-instructions.md +14 -11
- package/skills/vector-mind-autopilot/references/universal-system-prompt.md +24 -16
package/dist/large-file-split.js
CHANGED
|
@@ -1,11 +1,21 @@
|
|
|
1
1
|
import fs from "node:fs";
|
|
2
2
|
import path from "node:path";
|
|
3
|
+
import * as readline from "node:readline";
|
|
4
|
+
import crypto from "node:crypto";
|
|
3
5
|
import { normalizeToDbPath } from "./root.js";
|
|
6
|
+
export const LARGE_FILE_SPLIT_PLANNER_VERSION = 2;
|
|
4
7
|
function oneLine(input, max = 120) {
|
|
5
8
|
const normalized = String(input ?? "").replace(/\s+/g, " ").trim();
|
|
6
9
|
if (normalized.length <= max)
|
|
7
10
|
return normalized;
|
|
8
|
-
return `${normalized.slice(0, Math.max(0, max - 1))}
|
|
11
|
+
return `${normalized.slice(0, Math.max(0, max - 1))}...`;
|
|
12
|
+
}
|
|
13
|
+
export function hasOrdinalModuleName(input) {
|
|
14
|
+
const normalized = input.replace(/\\/g, "/").trim();
|
|
15
|
+
return normalized.split("/").some((segment) => {
|
|
16
|
+
const base = path.basename(segment, path.extname(segment));
|
|
17
|
+
return /^\d+(?:$|[\s._-]+)/.test(base);
|
|
18
|
+
});
|
|
9
19
|
}
|
|
10
20
|
function declarationRegexForExtension(ext) {
|
|
11
21
|
switch (ext) {
|
|
@@ -23,53 +33,127 @@ function declarationRegexForExtension(ext) {
|
|
|
23
33
|
case ".cjs":
|
|
24
34
|
return /^\s*(?:export\s+)?(?:default\s+)?(?:async\s+)?(?:function|class|interface|type|enum|const|let|var)\s+([A-Za-z_$][\w$]*)?/;
|
|
25
35
|
default:
|
|
26
|
-
return /^\s*(?:
|
|
36
|
+
return /^\s*(?:(?:pub\s+)?(?:class|struct|enum|interface|type)\s+([A-Za-z_][\w]*)|(?:[A-Za-z_][\w:<>,\s*&?\[\]]+)\s+([A-Za-z_][\w]*)\s*\()/;
|
|
27
37
|
}
|
|
28
38
|
}
|
|
39
|
+
const GENERIC_ROLE_TOKENS = new Set([
|
|
40
|
+
"api", "app", "base", "client", "controller", "core", "data", "default", "factory", "handler",
|
|
41
|
+
"helper", "impl", "manager", "model", "module", "provider", "repository", "request", "response",
|
|
42
|
+
"service", "state", "store", "type", "types", "util", "utils", "view",
|
|
43
|
+
]);
|
|
44
|
+
function identifierTokens(input) {
|
|
45
|
+
return input
|
|
46
|
+
.replace(/([a-z0-9])([A-Z])/g, "$1 $2")
|
|
47
|
+
.replace(/[^A-Za-z0-9]+/g, " ")
|
|
48
|
+
.trim()
|
|
49
|
+
.toLowerCase()
|
|
50
|
+
.split(/\s+/)
|
|
51
|
+
.filter((token) => token.length >= 2);
|
|
52
|
+
}
|
|
29
53
|
function moduleNameFromDeclaration(name, signature) {
|
|
30
54
|
const text = `${name} ${signature}`.toLowerCase();
|
|
31
|
-
const
|
|
32
|
-
[/(config|setting|
|
|
33
|
-
[/(
|
|
34
|
-
[/(api|client|request|response|
|
|
35
|
-
[/(
|
|
36
|
-
[/(
|
|
37
|
-
[/(
|
|
38
|
-
[/(
|
|
39
|
-
[/(repair|cleanup|probe|health)/, "maintenance"],
|
|
40
|
-
[/(path|sanitize|normalize|host|ip|util|helper)/, "util"],
|
|
55
|
+
const infrastructureRules = [
|
|
56
|
+
[/(config|setting|environment|\benv\b)/, "config"],
|
|
57
|
+
[/(database|storage|persist|cache|transaction)/, "storage"],
|
|
58
|
+
[/(http|api|client|request|response|transport)/, "transport"],
|
|
59
|
+
[/(log|logger|redact|telemetry|metric)/, "observability"],
|
|
60
|
+
[/(window|dialog|form|component|render|button|view)/, "ui"],
|
|
61
|
+
[/(repair|cleanup|migration|probe|health)/, "maintenance"],
|
|
62
|
+
[/(path|sanitize|normalize|parse|format|convert)/, "utilities"],
|
|
41
63
|
[/(test|mock|fixture)/, "tests"],
|
|
42
64
|
];
|
|
43
|
-
for (const [pattern, moduleName] of
|
|
65
|
+
for (const [pattern, moduleName] of infrastructureRules) {
|
|
44
66
|
if (pattern.test(text))
|
|
45
67
|
return moduleName;
|
|
46
68
|
}
|
|
47
|
-
|
|
69
|
+
const domainToken = identifierTokens(name).find((token) => token.length >= 3 && !GENERIC_ROLE_TOKENS.has(token) && !/^\d+$/.test(token));
|
|
70
|
+
return domainToken?.replace(/[^a-z0-9_-]/g, "") || "core";
|
|
71
|
+
}
|
|
72
|
+
function braceDelta(line) {
|
|
73
|
+
const withoutStrings = line
|
|
74
|
+
.replace(/(['"`])(?:\\.|(?!\1).)*\1/g, "")
|
|
75
|
+
.replace(/\/\/.*$/, "");
|
|
76
|
+
let delta = 0;
|
|
77
|
+
for (const char of withoutStrings) {
|
|
78
|
+
if (char === "{")
|
|
79
|
+
delta += 1;
|
|
80
|
+
if (char === "}")
|
|
81
|
+
delta -= 1;
|
|
82
|
+
}
|
|
83
|
+
return delta;
|
|
48
84
|
}
|
|
49
|
-
function
|
|
50
|
-
const
|
|
51
|
-
const lines = content.split(/\r?\n/);
|
|
85
|
+
async function scanTopLevelDeclarations(absPath, ext, declarationLimit) {
|
|
86
|
+
const declarations = [];
|
|
52
87
|
const regex = declarationRegexForExtension(ext);
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
88
|
+
const hash = crypto.createHash("sha256");
|
|
89
|
+
const stream = fs.createReadStream(absPath);
|
|
90
|
+
stream.on("data", (chunk) => hash.update(chunk));
|
|
91
|
+
const reader = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
92
|
+
const braceLanguage = ext !== ".py";
|
|
93
|
+
let lineCount = 0;
|
|
94
|
+
let detected = 0;
|
|
95
|
+
let depth = 0;
|
|
96
|
+
try {
|
|
97
|
+
for await (const raw of reader) {
|
|
98
|
+
lineCount += 1;
|
|
99
|
+
const trimmed = raw.trim();
|
|
100
|
+
const topLevel = !braceLanguage ? raw.length === raw.trimStart().length : depth === 0;
|
|
101
|
+
if (topLevel && trimmed && !trimmed.startsWith("//") && !trimmed.startsWith("#")) {
|
|
102
|
+
const match = raw.match(regex);
|
|
103
|
+
if (match) {
|
|
104
|
+
detected += 1;
|
|
105
|
+
if (declarations.length < declarationLimit) {
|
|
106
|
+
const fallback = trimmed.split(/\s+/).slice(0, 3).join("_").replace(/[^\w$]+/g, "_");
|
|
107
|
+
const matchedName = match.slice(1).find((value) => typeof value === "string" && value.length > 0);
|
|
108
|
+
const name = (matchedName || fallback || `declaration_${lineCount}`).replace(/^[^A-Za-z_]+/, "") || `declaration_${lineCount}`;
|
|
109
|
+
const kind = trimmed.split(/\s+/).find((part) => ["fn", "function", "class", "struct", "enum", "trait", "impl", "mod", "type", "const", "static", "interface"].includes(part.replace(/[({].*$/, ""))) ?? "declaration";
|
|
110
|
+
const previous = declarations.at(-1);
|
|
111
|
+
if (previous)
|
|
112
|
+
previous.end_line = Math.max(previous.line, lineCount - 1);
|
|
113
|
+
declarations.push({
|
|
114
|
+
line: lineCount,
|
|
115
|
+
end_line: lineCount,
|
|
116
|
+
kind,
|
|
117
|
+
name,
|
|
118
|
+
signature: oneLine(trimmed, 220),
|
|
119
|
+
suggested_module: moduleNameFromDeclaration(name, trimmed),
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
if (braceLanguage)
|
|
125
|
+
depth = Math.max(0, depth + braceDelta(raw));
|
|
126
|
+
}
|
|
71
127
|
}
|
|
72
|
-
|
|
128
|
+
finally {
|
|
129
|
+
reader.close();
|
|
130
|
+
stream.destroy();
|
|
131
|
+
}
|
|
132
|
+
const finalDeclaration = declarations.at(-1);
|
|
133
|
+
if (finalDeclaration)
|
|
134
|
+
finalDeclaration.end_line = Math.max(finalDeclaration.line, lineCount);
|
|
135
|
+
return { lineCount, detected, declarations, contentHash: hash.digest("hex") };
|
|
136
|
+
}
|
|
137
|
+
export async function countFileLinesStreaming(absPath) {
|
|
138
|
+
const stream = fs.createReadStream(absPath, { encoding: "utf8" });
|
|
139
|
+
const reader = readline.createInterface({ input: stream, crlfDelay: Infinity });
|
|
140
|
+
let lineCount = 0;
|
|
141
|
+
try {
|
|
142
|
+
for await (const _line of reader)
|
|
143
|
+
lineCount += 1;
|
|
144
|
+
}
|
|
145
|
+
finally {
|
|
146
|
+
reader.close();
|
|
147
|
+
stream.destroy();
|
|
148
|
+
}
|
|
149
|
+
return lineCount;
|
|
150
|
+
}
|
|
151
|
+
export async function hashFileContentStreaming(absPath) {
|
|
152
|
+
const hash = crypto.createHash("sha256");
|
|
153
|
+
const stream = fs.createReadStream(absPath);
|
|
154
|
+
for await (const chunk of stream)
|
|
155
|
+
hash.update(chunk);
|
|
156
|
+
return hash.digest("hex");
|
|
73
157
|
}
|
|
74
158
|
function targetPathForModule(originalFilePath, targetDir, moduleName) {
|
|
75
159
|
const ext = path.extname(originalFilePath) || ".txt";
|
|
@@ -78,69 +162,204 @@ function targetPathForModule(originalFilePath, targetDir, moduleName) {
|
|
|
78
162
|
return `${moduleName}${ext}`;
|
|
79
163
|
return `${normalizedTargetDir}/${moduleName}${ext}`;
|
|
80
164
|
}
|
|
81
|
-
|
|
82
|
-
const
|
|
83
|
-
const
|
|
84
|
-
|
|
165
|
+
function boundedModuleGroups(declarations, maxModules) {
|
|
166
|
+
const initial = new Map();
|
|
167
|
+
for (const declaration of declarations) {
|
|
168
|
+
const list = initial.get(declaration.suggested_module) ?? [];
|
|
169
|
+
list.push(declaration);
|
|
170
|
+
initial.set(declaration.suggested_module, list);
|
|
171
|
+
}
|
|
172
|
+
if (initial.size <= maxModules)
|
|
173
|
+
return initial;
|
|
174
|
+
const core = [...(initial.get("core") ?? [])];
|
|
175
|
+
const ranked = [...initial.entries()]
|
|
176
|
+
.filter(([name]) => name !== "core")
|
|
177
|
+
.sort((a, b) => b[1].length - a[1].length || a[0].localeCompare(b[0]));
|
|
178
|
+
const kept = new Map(ranked.slice(0, Math.max(1, maxModules - 1)));
|
|
179
|
+
for (const [, overflow] of ranked.slice(Math.max(1, maxModules - 1)))
|
|
180
|
+
core.push(...overflow);
|
|
181
|
+
if (core.length)
|
|
182
|
+
kept.set("core", core.sort((a, b) => a.line - b.line));
|
|
183
|
+
return kept;
|
|
184
|
+
}
|
|
185
|
+
function overriddenModuleGroups(declarations, overrides) {
|
|
186
|
+
const groups = new Map();
|
|
187
|
+
const targetPaths = new Map();
|
|
188
|
+
const assigned = new Map();
|
|
189
|
+
const warnings = [];
|
|
190
|
+
for (const override of overrides) {
|
|
191
|
+
const names = new Set(override.declaration_names ?? []);
|
|
192
|
+
const ranges = override.line_ranges ?? [];
|
|
193
|
+
const matches = declarations.filter((declaration) => names.has(declaration.name) || ranges.some((range) => declaration.line >= range.start && declaration.line <= range.end));
|
|
194
|
+
if (!names.size && !ranges.length) {
|
|
195
|
+
warnings.push(`Module override ${override.module} has no declaration_names or line_ranges selector.`);
|
|
196
|
+
}
|
|
197
|
+
if (!matches.length)
|
|
198
|
+
warnings.push(`Module override ${override.module} did not match any detected declaration.`);
|
|
199
|
+
const accepted = [];
|
|
200
|
+
for (const declaration of matches) {
|
|
201
|
+
const previousModule = assigned.get(declaration);
|
|
202
|
+
if (previousModule) {
|
|
203
|
+
warnings.push(`Declaration ${declaration.name} @L${declaration.line} is assigned to both ${previousModule} and ${override.module}.`);
|
|
204
|
+
continue;
|
|
205
|
+
}
|
|
206
|
+
assigned.set(declaration, override.module);
|
|
207
|
+
accepted.push(declaration);
|
|
208
|
+
}
|
|
209
|
+
groups.set(override.module, accepted.sort((a, b) => a.line - b.line));
|
|
210
|
+
targetPaths.set(override.module, override.target_path);
|
|
211
|
+
}
|
|
212
|
+
const unassigned = declarations.filter((declaration) => !assigned.has(declaration));
|
|
213
|
+
if (unassigned.length) {
|
|
214
|
+
warnings.push(`${unassigned.length} detected declarations are not assigned by module_overrides: ${unassigned
|
|
215
|
+
.slice(0, 12)
|
|
216
|
+
.map((declaration) => `${declaration.name}@L${declaration.line}`)
|
|
217
|
+
.join(", ")}.`);
|
|
218
|
+
}
|
|
219
|
+
return {
|
|
220
|
+
groups,
|
|
221
|
+
targetPaths,
|
|
222
|
+
assignedCount: assigned.size,
|
|
223
|
+
complete: declarations.length > 0 && assigned.size === declarations.length && warnings.length === 0,
|
|
224
|
+
warnings,
|
|
225
|
+
};
|
|
226
|
+
}
|
|
227
|
+
function moduleDependencies(groups) {
|
|
228
|
+
const declarationModules = new Map();
|
|
229
|
+
for (const [moduleName, declarations] of groups) {
|
|
230
|
+
for (const declaration of declarations)
|
|
231
|
+
declarationModules.set(declaration.name.toLowerCase(), moduleName);
|
|
232
|
+
}
|
|
233
|
+
const result = new Map();
|
|
234
|
+
for (const [moduleName, declarations] of groups) {
|
|
235
|
+
const dependencies = new Set();
|
|
236
|
+
for (const declaration of declarations) {
|
|
237
|
+
const referencedNames = declaration.signature.toLowerCase().match(/[a-z_$][\w$]*/g) ?? [];
|
|
238
|
+
for (const name of referencedNames) {
|
|
239
|
+
const dependencyModule = declarationModules.get(name);
|
|
240
|
+
if (dependencyModule && dependencyModule !== moduleName)
|
|
241
|
+
dependencies.add(dependencyModule);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
result.set(moduleName, [...dependencies].sort());
|
|
245
|
+
}
|
|
246
|
+
return result;
|
|
247
|
+
}
|
|
248
|
+
export async function buildLargeFileSplitPlan(args) {
|
|
249
|
+
const stat = fs.statSync(args.absPath);
|
|
85
250
|
const ext = path.extname(args.absPath).toLowerCase();
|
|
251
|
+
const declarationLimit = Math.max(500, args.declarationLimit ?? 10_000);
|
|
252
|
+
const maxDeclarationsPerModule = Math.min(200, Math.max(20, args.maxDeclarationsPerModule ?? 200));
|
|
253
|
+
const maxEstimatedLinesPerModule = Math.min(1200, Math.max(100, args.maxEstimatedLinesPerModule ?? 1200));
|
|
254
|
+
const scan = await scanTopLevelDeclarations(args.absPath, ext, declarationLimit);
|
|
86
255
|
const baseName = path.basename(args.filePath, path.extname(args.filePath));
|
|
87
256
|
const parentDir = path.dirname(args.filePath).replace(/\\/g, "/");
|
|
88
257
|
const defaultTargetDir = parentDir === "." ? baseName : `${parentDir}/${baseName}`;
|
|
89
258
|
const targetDir = normalizeToDbPath(args.targetDir ?? defaultTargetDir);
|
|
90
|
-
const
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
if (!grouped.size)
|
|
99
|
-
grouped.set("core", []);
|
|
100
|
-
const modules = Array.from(grouped.entries())
|
|
101
|
-
.slice(0, args.maxModules)
|
|
102
|
-
.map(([moduleName, decls]) => ({
|
|
259
|
+
const overrideResult = args.moduleOverrides?.length
|
|
260
|
+
? overriddenModuleGroups(scan.declarations, args.moduleOverrides)
|
|
261
|
+
: null;
|
|
262
|
+
const groups = overrideResult?.groups ?? boundedModuleGroups(scan.declarations, args.maxModules);
|
|
263
|
+
const dependencies = moduleDependencies(groups);
|
|
264
|
+
const modules = [...groups.entries()]
|
|
265
|
+
.sort((a, b) => a[1][0]?.line - b[1][0]?.line)
|
|
266
|
+
.map(([moduleName, declarations]) => ({
|
|
103
267
|
module: moduleName,
|
|
104
|
-
target_path: targetPathForModule(args.filePath, targetDir, moduleName),
|
|
105
|
-
|
|
106
|
-
|
|
268
|
+
target_path: overrideResult?.targetPaths.get(moduleName) ?? targetPathForModule(args.filePath, targetDir, moduleName),
|
|
269
|
+
declaration_count: declarations.length,
|
|
270
|
+
estimated_lines: declarations.reduce((total, declaration) => total + Math.max(1, declaration.end_line - declaration.line + 1), 0),
|
|
271
|
+
declarations: declarations.slice(0, 48).map((declaration) => `${declaration.kind} ${declaration.name} @L${declaration.line}`),
|
|
272
|
+
omitted_declarations: Math.max(0, declarations.length - 48),
|
|
273
|
+
dependencies: dependencies.get(moduleName) ?? [],
|
|
274
|
+
reason: moduleName === "core"
|
|
275
|
+
? "Fallback group for declarations without a stable domain boundary; refine this group before moving it as one module."
|
|
276
|
+
: `Group declarations around the ${moduleName} domain/infrastructure boundary while preserving behavior.`,
|
|
277
|
+
}));
|
|
278
|
+
const omitted = Math.max(0, scan.detected - scan.declarations.length);
|
|
279
|
+
const complete = omitted === 0 && scan.declarations.length > 0 && (overrideResult?.complete ?? true);
|
|
280
|
+
const coreCount = groups.get("core")?.length ?? 0;
|
|
281
|
+
const coreNeedsRefinement = !overrideResult && coreCount > Math.max(12, Math.floor(scan.declarations.length * 0.35));
|
|
282
|
+
const oversizedModules = modules
|
|
283
|
+
.filter((module) => module.declaration_count > maxDeclarationsPerModule ||
|
|
284
|
+
module.estimated_lines >= maxEstimatedLinesPerModule)
|
|
285
|
+
.map((module) => ({
|
|
286
|
+
module: module.module,
|
|
287
|
+
declaration_count: module.declaration_count,
|
|
288
|
+
estimated_lines: module.estimated_lines,
|
|
107
289
|
}));
|
|
290
|
+
const warnings = [];
|
|
291
|
+
warnings.push(...(overrideResult?.warnings ?? []));
|
|
292
|
+
if (groups.size > args.maxModules) {
|
|
293
|
+
warnings.push(`module_overrides defines ${groups.size} modules, exceeding max_modules=${args.maxModules}.`);
|
|
294
|
+
}
|
|
295
|
+
if (omitted > 0)
|
|
296
|
+
warnings.push(`${omitted} declarations exceeded the safety limit; refine the plan before editing.`);
|
|
297
|
+
if (!scan.detected)
|
|
298
|
+
warnings.push("No top-level declarations were detected; a manual boundary plan is required before editing.");
|
|
299
|
+
if (coreNeedsRefinement) {
|
|
300
|
+
warnings.push(`The core fallback contains ${coreCount} declarations and must be refined into semantic modules before execution.`);
|
|
301
|
+
}
|
|
302
|
+
if (oversizedModules.length) {
|
|
303
|
+
warnings.push(`Target modules exceed the ${maxDeclarationsPerModule}-declaration or ${maxEstimatedLinesPerModule}-line estimate: ${oversizedModules
|
|
304
|
+
.slice(0, 8)
|
|
305
|
+
.map((module) => `${module.module}=${module.declaration_count} declarations/${module.estimated_lines} lines`)
|
|
306
|
+
.join(", ")}. Refine responsibilities instead of moving the god file intact.`);
|
|
307
|
+
}
|
|
108
308
|
return {
|
|
109
|
-
ok:
|
|
309
|
+
ok: complete && !coreNeedsRefinement && oversizedModules.length === 0 && groups.size <= args.maxModules,
|
|
110
310
|
file_path: args.filePath,
|
|
111
|
-
line_count:
|
|
112
|
-
bytes:
|
|
311
|
+
line_count: scan.lineCount,
|
|
312
|
+
bytes: stat.size,
|
|
313
|
+
source_content_hash: scan.contentHash,
|
|
314
|
+
planner_fingerprint: args.plannerFingerprint,
|
|
113
315
|
huge_threshold_lines: args.hugeThresholdLines,
|
|
114
316
|
required_action: "mechanical_modularization",
|
|
115
317
|
intent: args.intent,
|
|
116
318
|
target_dir: targetDir,
|
|
117
|
-
|
|
319
|
+
analysis_mode: "heuristic_stream",
|
|
320
|
+
confidence: "low",
|
|
321
|
+
coverage: {
|
|
322
|
+
detected_declarations: scan.detected,
|
|
323
|
+
assigned_declarations: overrideResult?.assignedCount ?? scan.declarations.length,
|
|
324
|
+
omitted_declarations: omitted,
|
|
325
|
+
declaration_limit: declarationLimit,
|
|
326
|
+
complete,
|
|
327
|
+
},
|
|
328
|
+
module_constraints: {
|
|
329
|
+
max_declarations_per_module: maxDeclarationsPerModule,
|
|
330
|
+
max_estimated_lines_per_module: maxEstimatedLinesPerModule,
|
|
331
|
+
oversized_modules: oversizedModules,
|
|
332
|
+
satisfied: oversizedModules.length === 0,
|
|
333
|
+
},
|
|
334
|
+
forbidden_patterns: ["*.generated.*", "*.parts", "*.rs.parts", "*_part*", "*Part*", "[0-9]_*", "[0-9]-*", "[0-9].*"],
|
|
118
335
|
mechanical_rules: [
|
|
119
336
|
"Move only complete declarations/impl blocks/functions/classes/types; do not split a declaration body.",
|
|
120
|
-
"Use real module names and clear directory boundaries; do not create generated/parts/partN files.",
|
|
337
|
+
"Use real semantic module names and clear directory boundaries; do not create generated/parts/partN files or ordinal names.",
|
|
121
338
|
"Preserve behavior, names, API semantics, data formats, side effects, and test expectations.",
|
|
122
|
-
"Only add necessary module declarations, imports,
|
|
339
|
+
"Only add necessary module declarations, imports, visibility adjustments, and re-exports.",
|
|
123
340
|
"Run formatter, build/check, and relevant tests after each small phase.",
|
|
124
341
|
],
|
|
125
342
|
modules,
|
|
126
343
|
steps: [
|
|
127
|
-
"
|
|
128
|
-
"
|
|
129
|
-
"Keep the original file as
|
|
344
|
+
"Keep this mechanical modularization attached to the current requirement and selected split plan.",
|
|
345
|
+
"Move one cohesive declaration group at a time into the planned semantic module directory.",
|
|
346
|
+
"Keep the original file as thin entry/orchestration glue where possible.",
|
|
130
347
|
"After each group, run formatter and the smallest available compile/test command.",
|
|
131
|
-
"Record
|
|
132
|
-
"
|
|
348
|
+
"Record in_progress or partial progress against the same plan_id.",
|
|
349
|
+
"Mark the plan resolved only after module paths, remaining line count, and verification evidence pass validation.",
|
|
133
350
|
],
|
|
134
351
|
validation: [
|
|
135
|
-
"
|
|
136
|
-
"
|
|
137
|
-
"
|
|
138
|
-
"
|
|
139
|
-
"
|
|
352
|
+
"Every detected declaration is assigned; coverage.complete must be true.",
|
|
353
|
+
"No generated/parts/numbered module files or ordinal-prefixed directories were created.",
|
|
354
|
+
"The original file is below the huge threshold or contains only thin orchestration glue.",
|
|
355
|
+
"All recorded module paths exist under project_root.",
|
|
356
|
+
"Formatter, build/check, and relevant tests pass.",
|
|
357
|
+
],
|
|
358
|
+
warnings,
|
|
359
|
+
notes: [
|
|
360
|
+
`Detected ${scan.detected} top-level declarations with bounded-memory streaming analysis.`,
|
|
361
|
+
"Dependency hints are signature-based; verify runtime/private-state dependencies against repository facts before moving code.",
|
|
140
362
|
],
|
|
141
|
-
notes: declarations.length
|
|
142
|
-
? [`Detected ${declarations.length} top-level declarations for mechanical grouping.`]
|
|
143
|
-
: ["No top-level declarations were detected by lightweight scanning; split by obvious cohesive sections and verify after each move."],
|
|
144
363
|
};
|
|
145
364
|
}
|
|
146
365
|
//# sourceMappingURL=large-file-split.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"large-file-split.js","sourceRoot":"","sources":["../src/large-file-split.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"large-file-split.js","sourceRoot":"","sources":["../src/large-file-split.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import { logActivity } from "../activity-log.js";
|
|
2
|
+
import { oneLine, safeJson } from "../tool-output.js";
|
|
3
|
+
import { getDb, getInsertMemoryItemStatement, isHiddenFromDefaultRecall, metadataStatus, parseMetadataJson, sha256Hex, } from "./context.js";
|
|
4
|
+
function selectCompactionCandidates(opts) {
|
|
5
|
+
const kinds = opts.compactNotes
|
|
6
|
+
? ["requirement", "change_intent", "note", "large_file_split_plan"]
|
|
7
|
+
: ["requirement", "change_intent", "large_file_split_plan"];
|
|
8
|
+
const placeholders = kinds.map(() => "?").join(", ");
|
|
9
|
+
const rows = getDb()
|
|
10
|
+
.prepare(`SELECT
|
|
11
|
+
m.id, m.kind, m.title, m.content, m.file_path, m.start_line, m.end_line,
|
|
12
|
+
m.req_id, m.metadata_json, m.content_hash, m.created_at, m.updated_at,
|
|
13
|
+
r.status AS req_status
|
|
14
|
+
FROM memory_items m
|
|
15
|
+
LEFT JOIN requirements r ON r.id = m.req_id
|
|
16
|
+
WHERE m.kind IN (${placeholders})
|
|
17
|
+
AND m.updated_at < datetime('now', ?)
|
|
18
|
+
ORDER BY m.updated_at ASC, m.id ASC
|
|
19
|
+
LIMIT ?`)
|
|
20
|
+
.all(...kinds, `-${opts.compactAfterDays} days`, Math.min(20_000, opts.maxMemoryItems * 5));
|
|
21
|
+
return rows
|
|
22
|
+
.filter((row) => !isHiddenFromDefaultRecall(row))
|
|
23
|
+
.filter((row) => metadataStatus(row) !== "current" && metadataStatus(row) !== "active")
|
|
24
|
+
.filter((row) => row.kind !== "large_file_split_plan" || ["resolved", "superseded", "deferred", "abandoned"].includes(metadataStatus(row) ?? ""))
|
|
25
|
+
.filter((row) => row.req_status !== "active")
|
|
26
|
+
.filter((row) => row.kind !== "note" || opts.compactNotes)
|
|
27
|
+
.slice(0, opts.maxMemoryItems);
|
|
28
|
+
}
|
|
29
|
+
function compactionLine(row) {
|
|
30
|
+
const date = oneLine(row.updated_at || row.created_at, 19);
|
|
31
|
+
const title = row.title ? ` ${oneLine(row.title, 80)}` : "";
|
|
32
|
+
const file = row.file_path ? ` file=${row.file_path}${row.start_line != null ? `:${row.start_line}` : ""}` : "";
|
|
33
|
+
const req = row.req_id != null ? ` req#${row.req_id}` : "";
|
|
34
|
+
return `- ${date} #${row.id} ${row.kind}${req}${file}${title}: ${oneLine(row.content, 220)}`;
|
|
35
|
+
}
|
|
36
|
+
export function compactOldMemoryItems(opts) {
|
|
37
|
+
const candidates = selectCompactionCandidates(opts);
|
|
38
|
+
const cutoff = new Date(Date.now() - opts.compactAfterDays * 86_400_000).toISOString();
|
|
39
|
+
const samples = candidates.slice(0, 20).map((row) => ({
|
|
40
|
+
id: row.id,
|
|
41
|
+
kind: row.kind,
|
|
42
|
+
title: row.title,
|
|
43
|
+
file_path: row.file_path,
|
|
44
|
+
updated_at: row.updated_at,
|
|
45
|
+
}));
|
|
46
|
+
if (opts.dryRun || !candidates.length) {
|
|
47
|
+
return {
|
|
48
|
+
cutoff,
|
|
49
|
+
candidates: candidates.length,
|
|
50
|
+
compacted: 0,
|
|
51
|
+
summary_memory_id: null,
|
|
52
|
+
archived: 0,
|
|
53
|
+
samples,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
const now = new Date().toISOString();
|
|
57
|
+
const lines = [
|
|
58
|
+
`Auto-compacted ${candidates.length} old VectorMind memory items.`,
|
|
59
|
+
`Cutoff: items updated before ${cutoff} (${opts.compactAfterDays} days).`,
|
|
60
|
+
"",
|
|
61
|
+
"This compact summary keeps old history searchable while detailed stale items are hidden from default recall.",
|
|
62
|
+
"Durable decisions, conventions, and project summaries are never compacted by this automatic pass.",
|
|
63
|
+
"",
|
|
64
|
+
...candidates.map(compactionLine),
|
|
65
|
+
];
|
|
66
|
+
const content = lines.join("\n");
|
|
67
|
+
const title = `Memory compaction ${now.slice(0, 10)}`;
|
|
68
|
+
const metadata = {
|
|
69
|
+
source: "maintenance",
|
|
70
|
+
status: "current",
|
|
71
|
+
compacted_item_ids: candidates.map((c) => c.id),
|
|
72
|
+
compact_after_days: opts.compactAfterDays,
|
|
73
|
+
compact_notes: opts.compactNotes,
|
|
74
|
+
generated_at: now,
|
|
75
|
+
};
|
|
76
|
+
let summaryMemoryId = 0;
|
|
77
|
+
let archived = 0;
|
|
78
|
+
const archiveStmt = getDb().prepare(`INSERT OR IGNORE INTO memory_item_archive
|
|
79
|
+
(memory_id, original_kind, original_title, original_content, original_file_path,
|
|
80
|
+
original_start_line, original_end_line, original_req_id, original_metadata_json,
|
|
81
|
+
original_content_hash, original_created_at, original_updated_at, archive_reason, compacted_into_id)
|
|
82
|
+
VALUES
|
|
83
|
+
(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)`);
|
|
84
|
+
const updateMemoryStmt = getDb().prepare(`UPDATE memory_items
|
|
85
|
+
SET content = ?, metadata_json = ?, content_hash = ?, updated_at = CURRENT_TIMESTAMP
|
|
86
|
+
WHERE id = ?`);
|
|
87
|
+
const tx = getDb().transaction(() => {
|
|
88
|
+
const info = getInsertMemoryItemStatement().run("memory_compaction", title, content, null, null, null, null, safeJson(metadata), sha256Hex(content));
|
|
89
|
+
summaryMemoryId = Number(info.lastInsertRowid);
|
|
90
|
+
for (const row of candidates) {
|
|
91
|
+
const archiveInfo = archiveStmt.run(row.id, row.kind, row.title, row.content, row.file_path, row.start_line, row.end_line, row.req_id, row.metadata_json, row.content_hash, row.created_at, row.updated_at, "auto_compaction", summaryMemoryId);
|
|
92
|
+
if (archiveInfo.changes > 0)
|
|
93
|
+
archived += 1;
|
|
94
|
+
const patchedMeta = {
|
|
95
|
+
...parseMetadataJson(row.metadata_json),
|
|
96
|
+
status: "compacted",
|
|
97
|
+
compacted: true,
|
|
98
|
+
compacted_at: now,
|
|
99
|
+
compacted_into_memory_id: summaryMemoryId,
|
|
100
|
+
};
|
|
101
|
+
const stub = [
|
|
102
|
+
`[compacted into memory item #${summaryMemoryId}]`,
|
|
103
|
+
`Original ${row.kind} #${row.id} was older than ${opts.compactAfterDays} days and is excluded from default recall.`,
|
|
104
|
+
`Summary: ${oneLine(row.title || row.content, 260)}`,
|
|
105
|
+
].join("\n");
|
|
106
|
+
updateMemoryStmt.run(stub, safeJson(patchedMeta), sha256Hex(stub), row.id);
|
|
107
|
+
}
|
|
108
|
+
});
|
|
109
|
+
try {
|
|
110
|
+
tx();
|
|
111
|
+
}
|
|
112
|
+
catch (err) {
|
|
113
|
+
console.error("[vectormind] compact old memory failed:", err);
|
|
114
|
+
summaryMemoryId = 0;
|
|
115
|
+
}
|
|
116
|
+
if (summaryMemoryId) {
|
|
117
|
+
logActivity("memory_maintenance", {
|
|
118
|
+
reason: "compact_old_memories",
|
|
119
|
+
compacted: candidates.length,
|
|
120
|
+
summary_memory_id: summaryMemoryId,
|
|
121
|
+
archived,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
return {
|
|
125
|
+
cutoff,
|
|
126
|
+
candidates: candidates.length,
|
|
127
|
+
compacted: summaryMemoryId ? candidates.length : 0,
|
|
128
|
+
summary_memory_id: summaryMemoryId || null,
|
|
129
|
+
archived,
|
|
130
|
+
samples,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=compaction.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"compaction.js","sourceRoot":"","sources":["../../src/memory-maintenance/compaction.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AACtD,OAAO,EACL,KAAK,EACL,4BAA4B,EAC5B,yBAAyB,EACzB,cAAc,EACd,iBAAiB,EACjB,SAAS,GACV,MAAM,cAAc,CAAC;AAGtB,SAAS,0BAA0B,CAAC,IAInC;IACC,MAAM,KAAK,GAAG,IAAI,CAAC,YAAY;QAC7B,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,uBAAuB,CAAC;QACnE,CAAC,CAAC,CAAC,aAAa,EAAE,eAAe,EAAE,uBAAuB,CAAC,CAAC;IAC9D,MAAM,YAAY,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACrD,MAAM,IAAI,GAAG,KAAK,EAAE;SACjB,OAAO,CACN;;;;;;0BAMoB,YAAY;;;eAGvB,CACV;SACA,GAAG,CAAC,GAAG,KAAK,EAAE,IAAI,IAAI,CAAC,gBAAgB,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,cAAc,GAAG,CAAC,CAAC,CAE3F,CAAC;IAEF,OAAO,IAAI;SACR,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,yBAAyB,CAAC,GAAG,CAAC,CAAC;SAChD,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,SAAS,IAAI,cAAc,CAAC,GAAG,CAAC,KAAK,QAAQ,CAAC;SACtF,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,uBAAuB,IAAI,CAAC,UAAU,EAAE,YAAY,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;SAChJ,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,UAAU,KAAK,QAAQ,CAAC;SAC5C,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,KAAK,MAAM,IAAI,IAAI,CAAC,YAAY,CAAC;SACzD,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC;AACnC,CAAC;AACD,SAAS,cAAc,CAAC,GAAkB;IACxC,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,GAAG,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IAC3D,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,GAAG,CAAC,SAAS,GAAG,GAAG,CAAC,UAAU,IAAI,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAChH,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,IAAI,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC3D,OAAO,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,GAAG,KAAK,KAAK,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE,CAAC;AAC/F,CAAC;AACD,MAAM,UAAU,qBAAqB,CAAC,IAKrC;IACC,MAAM,UAAU,GAAG,0BAA0B,CAAC,IAAI,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,IAAI,CAAC,gBAAgB,GAAG,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;IACvF,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QACpD,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,IAAI,EAAE,GAAG,CAAC,IAAI;QACd,KAAK,EAAE,GAAG,CAAC,KAAK;QAChB,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,UAAU,EAAE,GAAG,CAAC,UAAU;KAC3B,CAAC,CAAC,CAAC;IAEJ,IAAI,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC;QACtC,OAAO;YACL,MAAM;YACN,UAAU,EAAE,UAAU,CAAC,MAAM;YAC7B,SAAS,EAAE,CAAC;YACZ,iBAAiB,EAAE,IAAI;YACvB,QAAQ,EAAE,CAAC;YACX,OAAO;SACR,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG;QACZ,kBAAkB,UAAU,CAAC,MAAM,+BAA+B;QAClE,gCAAgC,MAAM,KAAK,IAAI,CAAC,gBAAgB,SAAS;QACzE,EAAE;QACF,8GAA8G;QAC9G,mGAAmG;QACnG,EAAE;QACF,GAAG,UAAU,CAAC,GAAG,CAAC,cAAc,CAAC;KAClC,CAAC;IACF,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,KAAK,GAAG,qBAAqB,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACtD,MAAM,QAAQ,GAAG;QACf,MAAM,EAAE,aAAa;QACrB,MAAM,EAAE,SAAS;QACjB,kBAAkB,EAAE,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/C,kBAAkB,EAAE,IAAI,CAAC,gBAAgB;QACzC,aAAa,EAAE,IAAI,CAAC,YAAY;QAChC,YAAY,EAAE,GAAG;KAClB,CAAC;IAEF,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;IACjB,MAAM,WAAW,GAAG,KAAK,EAAE,CAAC,OAAO,CACjC;;;;;kDAK8C,CAC/C,CAAC;IACF,MAAM,gBAAgB,GAAG,KAAK,EAAE,CAAC,OAAO,CACtC;;kBAEc,CACf,CAAC;IAEF,MAAM,EAAE,GAAG,KAAK,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,4BAA4B,EAAE,CAAC,GAAG,CAC7C,mBAAmB,EACnB,KAAK,EACL,OAAO,EACP,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,IAAI,EACJ,QAAQ,CAAC,QAAQ,CAAC,EAClB,SAAS,CAAC,OAAO,CAAC,CACnB,CAAC;QACF,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAE/C,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;YAC7B,MAAM,WAAW,GAAG,WAAW,CAAC,GAAG,CACjC,GAAG,CAAC,EAAE,EACN,GAAG,CAAC,IAAI,EACR,GAAG,CAAC,KAAK,EACT,GAAG,CAAC,OAAO,EACX,GAAG,CAAC,SAAS,EACb,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,QAAQ,EACZ,GAAG,CAAC,MAAM,EACV,GAAG,CAAC,aAAa,EACjB,GAAG,CAAC,YAAY,EAChB,GAAG,CAAC,UAAU,EACd,GAAG,CAAC,UAAU,EACd,iBAAiB,EACjB,eAAe,CAChB,CAAC;YACF,IAAI,WAAW,CAAC,OAAO,GAAG,CAAC;gBAAE,QAAQ,IAAI,CAAC,CAAC;YAE3C,MAAM,WAAW,GAAG;gBAClB,GAAG,iBAAiB,CAAC,GAAG,CAAC,aAAa,CAAC;gBACvC,MAAM,EAAE,WAAW;gBACnB,SAAS,EAAE,IAAI;gBACf,YAAY,EAAE,GAAG;gBACjB,wBAAwB,EAAE,eAAe;aAC1C,CAAC;YACF,MAAM,IAAI,GAAG;gBACX,gCAAgC,eAAe,GAAG;gBAClD,YAAY,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,mBAAmB,IAAI,CAAC,gBAAgB,4CAA4C;gBACnH,YAAY,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,EAAE;aACrD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC;QACH,EAAE,EAAE,CAAC;IACP,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,KAAK,CAAC,yCAAyC,EAAE,GAAG,CAAC,CAAC;QAC9D,eAAe,GAAG,CAAC,CAAC;IACtB,CAAC;IAED,IAAI,eAAe,EAAE,CAAC;QACpB,WAAW,CAAC,oBAAoB,EAAE;YAChC,MAAM,EAAE,sBAAsB;YAC9B,SAAS,EAAE,UAAU,CAAC,MAAM;YAC5B,iBAAiB,EAAE,eAAe;YAClC,QAAQ;SACT,CAAC,CAAC;IACL,CAAC;IAED,OAAO;QACL,MAAM;QACN,UAAU,EAAE,UAAU,CAAC,MAAM;QAC7B,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;QAClD,iBAAiB,EAAE,eAAe,IAAI,IAAI;QAC1C,QAAQ;QACR,OAAO;KACR,CAAC;AACJ,CAAC"}
|