@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.
Files changed (140) hide show
  1. package/README.md +99 -72
  2. package/admin-panel/README.md +77 -0
  3. package/admin-panel/dist/client/assets/index-Bzyjdhh2.css +1 -0
  4. package/admin-panel/dist/client/assets/index-Ph73ewzt.js +9 -0
  5. package/admin-panel/dist/client/index.html +14 -0
  6. package/admin-panel/package.json +25 -0
  7. package/admin-panel/server/index.mjs +1424 -0
  8. package/admin-panel/server/security.mjs +117 -0
  9. package/admin-panel/server/security.test.mjs +113 -0
  10. package/admin-panel/server/storage.mjs +49 -0
  11. package/admin-panel/server/storage.test.mjs +36 -0
  12. package/dist/builtin-conventions.js +1 -1
  13. package/dist/builtin-conventions.js.map +1 -1
  14. package/dist/builtin-instructions.d.ts +1 -1
  15. package/dist/builtin-instructions.js +1 -1
  16. package/dist/builtin-instructions.js.map +1 -1
  17. package/dist/checkpoint-snapshot.d.ts +56 -0
  18. package/dist/checkpoint-snapshot.js +411 -0
  19. package/dist/checkpoint-snapshot.js.map +1 -0
  20. package/dist/config.d.ts +4 -1
  21. package/dist/config.js +25 -1
  22. package/dist/config.js.map +1 -1
  23. package/dist/context-governance.d.ts +56 -0
  24. package/dist/context-governance.js +176 -0
  25. package/dist/context-governance.js.map +1 -0
  26. package/dist/database-runtime.d.ts +6 -1
  27. package/dist/database-runtime.js +555 -127
  28. package/dist/database-runtime.js.map +1 -1
  29. package/dist/development-warnings.d.ts +2 -1
  30. package/dist/development-warnings.js +92 -22
  31. package/dist/development-warnings.js.map +1 -1
  32. package/dist/file-indexing.d.ts +2 -1
  33. package/dist/file-indexing.js +127 -47
  34. package/dist/file-indexing.js.map +1 -1
  35. package/dist/grep.js +4 -0
  36. package/dist/grep.js.map +1 -1
  37. package/dist/index.js +8 -2
  38. package/dist/index.js.map +1 -1
  39. package/dist/large-file-split.d.ts +53 -8
  40. package/dist/large-file-split.js +294 -75
  41. package/dist/large-file-split.js.map +1 -1
  42. package/dist/memory-maintenance/compaction.d.ts +7 -0
  43. package/dist/memory-maintenance/compaction.js +133 -0
  44. package/dist/memory-maintenance/compaction.js.map +1 -0
  45. package/dist/memory-maintenance/context.d.ts +37 -0
  46. package/dist/memory-maintenance/context.js +52 -0
  47. package/dist/memory-maintenance/context.js.map +1 -0
  48. package/dist/memory-maintenance/index-prune.d.ts +22 -0
  49. package/dist/memory-maintenance/index-prune.js +243 -0
  50. package/dist/memory-maintenance/index-prune.js.map +1 -0
  51. package/dist/memory-maintenance/metrics.d.ts +5 -0
  52. package/dist/memory-maintenance/metrics.js +30 -0
  53. package/dist/memory-maintenance/metrics.js.map +1 -0
  54. package/dist/memory-maintenance/pending.d.ts +4 -0
  55. package/dist/memory-maintenance/pending.js +74 -0
  56. package/dist/memory-maintenance/pending.js.map +1 -0
  57. package/dist/memory-maintenance/purge.d.ts +7 -0
  58. package/dist/memory-maintenance/purge.js +115 -0
  59. package/dist/memory-maintenance/purge.js.map +1 -0
  60. package/dist/memory-maintenance/runner.d.ts +5 -0
  61. package/dist/memory-maintenance/runner.js +182 -0
  62. package/dist/memory-maintenance/runner.js.map +1 -0
  63. package/dist/memory-maintenance/sqlite.d.ts +10 -0
  64. package/dist/memory-maintenance/sqlite.js +67 -0
  65. package/dist/memory-maintenance/sqlite.js.map +1 -0
  66. package/dist/memory-maintenance/types.d.ts +87 -0
  67. package/dist/memory-maintenance/types.js +2 -0
  68. package/dist/memory-maintenance/types.js.map +1 -0
  69. package/dist/memory-maintenance.d.ts +5 -80
  70. package/dist/memory-maintenance.js +3 -536
  71. package/dist/memory-maintenance.js.map +1 -1
  72. package/dist/memory-mutations.d.ts +3 -3
  73. package/dist/memory-mutations.js +109 -43
  74. package/dist/memory-mutations.js.map +1 -1
  75. package/dist/memory-recall.d.ts +3 -1
  76. package/dist/memory-recall.js +33 -1
  77. package/dist/memory-recall.js.map +1 -1
  78. package/dist/operation-scope.js +42 -12
  79. package/dist/operation-scope.js.map +1 -1
  80. package/dist/path-containment.d.ts +5 -0
  81. package/dist/path-containment.js +64 -0
  82. package/dist/path-containment.js.map +1 -0
  83. package/dist/path-filters.d.ts +1 -1
  84. package/dist/path-filters.js +7 -6
  85. package/dist/path-filters.js.map +1 -1
  86. package/dist/path-rules.d.ts +1 -0
  87. package/dist/path-rules.js +23 -1
  88. package/dist/path-rules.js.map +1 -1
  89. package/dist/pending-changes.d.ts +5 -0
  90. package/dist/pending-changes.js +30 -16
  91. package/dist/pending-changes.js.map +1 -1
  92. package/dist/project-files.d.ts +1 -0
  93. package/dist/project-files.js +19 -10
  94. package/dist/project-files.js.map +1 -1
  95. package/dist/root.d.ts +4 -1
  96. package/dist/root.js +34 -4
  97. package/dist/root.js.map +1 -1
  98. package/dist/rtk-integrity.d.ts +5 -0
  99. package/dist/rtk-integrity.js +35 -0
  100. package/dist/rtk-integrity.js.map +1 -0
  101. package/dist/rtk-shim.js +22 -9
  102. package/dist/rtk-shim.js.map +1 -1
  103. package/dist/rtk-tools.d.ts +8 -0
  104. package/dist/rtk-tools.js +59 -42
  105. package/dist/rtk-tools.js.map +1 -1
  106. package/dist/server-instructions.js +8 -88
  107. package/dist/server-instructions.js.map +1 -1
  108. package/dist/tool-catalog.d.ts +2 -0
  109. package/dist/tool-catalog.js +77 -24
  110. package/dist/tool-catalog.js.map +1 -1
  111. package/dist/tool-handlers/context-recovery.js +79 -54
  112. package/dist/tool-handlers/context-recovery.js.map +1 -1
  113. package/dist/tool-handlers/large-files.js +615 -41
  114. package/dist/tool-handlers/large-files.js.map +1 -1
  115. package/dist/tool-handlers/memory-diagnostics.js +240 -45
  116. package/dist/tool-handlers/memory-diagnostics.js.map +1 -1
  117. package/dist/tool-handlers/memory.js +167 -22
  118. package/dist/tool-handlers/memory.js.map +1 -1
  119. package/dist/tool-handlers/operations.js +28 -8
  120. package/dist/tool-handlers/operations.js.map +1 -1
  121. package/dist/tool-handlers/requirement-status.d.ts +5 -0
  122. package/dist/tool-handlers/requirement-status.js +267 -0
  123. package/dist/tool-handlers/requirement-status.js.map +1 -0
  124. package/dist/tool-handlers/requirements.js +851 -115
  125. package/dist/tool-handlers/requirements.js.map +1 -1
  126. package/dist/tool-handlers.d.ts +4 -0
  127. package/dist/tool-handlers.js +439 -6
  128. package/dist/tool-handlers.js.map +1 -1
  129. package/dist/tool-output.d.ts +71 -2
  130. package/dist/tool-output.js +56 -13
  131. package/dist/tool-output.js.map +1 -1
  132. package/dist/tool-schemas.d.ts +243 -0
  133. package/dist/tool-schemas.js +112 -26
  134. package/dist/tool-schemas.js.map +1 -1
  135. package/dist/types.d.ts +10 -1
  136. package/docs/capability-matrix.md +23 -17
  137. package/package.json +21 -5
  138. package/skills/vector-mind-autopilot/SKILL.md +82 -23
  139. package/skills/vector-mind-autopilot/references/claude-project-instructions.md +14 -11
  140. package/skills/vector-mind-autopilot/references/universal-system-prompt.md +24 -16
@@ -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*(?:pub\s+)?(?:async\s+)?(?:fn|function|class|struct|enum|interface|type|const|static)\s+([A-Za-z_][\w]*)?/;
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 rules = [
32
- [/(config|setting|env)/, "config"],
33
- [/(state|store|persist)/, "state"],
34
- [/(api|client|request|response|heartbeat|activate|sync)/, "api"],
35
- [/(service|daemon|install|start|stop)/, "service"],
36
- [/(log|logger|redact)/, "logging"],
37
- [/(gui|window|dialog|form|view|button|list)/, "ui"],
38
- [/(share|disk|smb|unc|folder|directory)/, "share"],
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 rules) {
65
+ for (const [pattern, moduleName] of infrastructureRules) {
44
66
  if (pattern.test(text))
45
67
  return moduleName;
46
68
  }
47
- return "core";
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 topLevelDeclarationsForPlan(content, ext, maxDecls = 160) {
50
- const decls = [];
51
- const lines = content.split(/\r?\n/);
85
+ async function scanTopLevelDeclarations(absPath, ext, declarationLimit) {
86
+ const declarations = [];
52
87
  const regex = declarationRegexForExtension(ext);
53
- for (let i = 0; i < lines.length && decls.length < maxDecls; i++) {
54
- const raw = lines[i];
55
- const trimmed = raw.trim();
56
- if (!trimmed || trimmed.startsWith("//") || trimmed.startsWith("#"))
57
- continue;
58
- const m = raw.match(regex);
59
- if (!m)
60
- continue;
61
- const fallback = trimmed.split(/\s+/).slice(0, 3).join("_").replace(/[^\w$]+/g, "_");
62
- const name = (m[1] || fallback || `declaration_${i + 1}`).replace(/^[^A-Za-z_]+/, "") || `declaration_${i + 1}`;
63
- const kind = trimmed.split(/\s+/).find((part) => ["fn", "function", "class", "struct", "enum", "trait", "impl", "mod", "type", "const", "static", "interface"].includes(part.replace(/[({].*$/, ""))) ?? "declaration";
64
- decls.push({
65
- line: i + 1,
66
- kind,
67
- name,
68
- signature: oneLine(trimmed, 180),
69
- suggested_module: moduleNameFromDeclaration(name, trimmed),
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
- return decls;
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
- export function buildLargeFileSplitPlan(args) {
82
- const content = fs.readFileSync(args.absPath, "utf8");
83
- const st = fs.statSync(args.absPath);
84
- const lines = content.split(/\r?\n/).length;
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 declarations = topLevelDeclarationsForPlan(content, ext);
91
- const grouped = new Map();
92
- for (const decl of declarations) {
93
- const key = grouped.size >= args.maxModules && !grouped.has(decl.suggested_module) ? "core" : decl.suggested_module;
94
- const list = grouped.get(key) ?? [];
95
- list.push(decl);
96
- grouped.set(key, list);
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
- declarations: decls.slice(0, 24).map((d) => `${d.kind} ${d.name} @L${d.line}`),
106
- reason: `Move whole ${moduleName}-related declarations together without changing behavior.`,
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: true,
309
+ ok: complete && !coreNeedsRefinement && oversizedModules.length === 0 && groups.size <= args.maxModules,
110
310
  file_path: args.filePath,
111
- line_count: lines,
112
- bytes: st.size,
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
- forbidden_patterns: ["*.generated.*", "*.parts", "*.rs.parts", "*_part*", "*Part*"],
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, pub(crate), and re-exports to make moved code compile.",
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
- "Create a dedicated mechanical modularization requirement before touching the huge file.",
128
- "Add the target module directory and move one cohesive declaration group at a time.",
129
- "Keep the original file as a thin entry/mod orchestration file where possible.",
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 the split with record_large_file_split(status='partial' or 'resolved').",
132
- "Resume the original feature only after the target huge file is no longer the default place for new code.",
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
- "No *.generated.*, *.parts, *.rs.parts, or numbered part files were created.",
136
- "The original file line count decreased or contains only thin orchestration glue.",
137
- "Formatter passes.",
138
- "Build/check passes.",
139
- "Relevant tests pass.",
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,7 @@
1
+ import type { MaintenanceCompactionResult } from "./types.js";
2
+ export declare function compactOldMemoryItems(opts: {
3
+ dryRun: boolean;
4
+ compactAfterDays: number;
5
+ maxMemoryItems: number;
6
+ compactNotes: boolean;
7
+ }): MaintenanceCompactionResult;
@@ -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":"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"}