@coreyuan/vector-mind 1.0.49 → 1.0.53
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 +67 -61
- package/dist/activity-log.d.ts +19 -0
- package/dist/activity-log.js +106 -0
- package/dist/activity-log.js.map +1 -0
- package/dist/builtin-conventions.d.ts +2 -1
- package/dist/builtin-conventions.js +5 -0
- package/dist/builtin-conventions.js.map +1 -1
- package/dist/config.d.ts +28 -0
- package/dist/config.js +189 -0
- package/dist/config.js.map +1 -0
- package/dist/database-runtime.d.ts +54 -0
- package/dist/database-runtime.js +512 -0
- package/dist/database-runtime.js.map +1 -0
- package/dist/development-warnings.d.ts +93 -0
- package/dist/development-warnings.js +589 -0
- package/dist/development-warnings.js.map +1 -0
- package/dist/file-indexing.d.ts +22 -0
- package/dist/file-indexing.js +243 -0
- package/dist/file-indexing.js.map +1 -0
- package/dist/fix-patterns.d.ts +58 -0
- package/dist/fix-patterns.js +347 -0
- package/dist/fix-patterns.js.map +1 -0
- package/dist/grep.d.ts +64 -0
- package/dist/grep.js +475 -0
- package/dist/grep.js.map +1 -0
- package/dist/index.js +167 -7279
- package/dist/index.js.map +1 -1
- package/dist/large-file-split.d.ts +29 -0
- package/dist/large-file-split.js +146 -0
- package/dist/large-file-split.js.map +1 -0
- package/dist/memory-maintenance.d.ts +80 -0
- package/dist/memory-maintenance.js +537 -0
- package/dist/memory-maintenance.js.map +1 -0
- package/dist/memory-mutations.d.ts +23 -0
- package/dist/memory-mutations.js +83 -0
- package/dist/memory-mutations.js.map +1 -0
- package/dist/memory-recall.d.ts +93 -0
- package/dist/memory-recall.js +801 -0
- package/dist/memory-recall.js.map +1 -0
- package/dist/operation-scope.d.ts +63 -0
- package/dist/operation-scope.js +438 -0
- package/dist/operation-scope.js.map +1 -0
- package/dist/path-filters.d.ts +1 -0
- package/dist/path-filters.js +27 -0
- package/dist/path-filters.js.map +1 -0
- package/dist/path-rules.d.ts +12 -0
- package/dist/path-rules.js +208 -0
- package/dist/path-rules.js.map +1 -0
- package/dist/pending-changes.d.ts +22 -0
- package/dist/pending-changes.js +166 -0
- package/dist/pending-changes.js.map +1 -0
- package/dist/project-files.d.ts +66 -0
- package/dist/project-files.js +215 -0
- package/dist/project-files.js.map +1 -0
- package/dist/root.d.ts +15 -0
- package/dist/root.js +191 -0
- package/dist/root.js.map +1 -0
- package/dist/rtk-tools.d.ts +20 -0
- package/dist/rtk-tools.js +318 -0
- package/dist/rtk-tools.js.map +1 -0
- package/dist/server-instructions.d.ts +1 -0
- package/dist/server-instructions.js +92 -0
- package/dist/server-instructions.js.map +1 -0
- package/dist/symbols.d.ts +2 -0
- package/dist/symbols.js +159 -0
- package/dist/symbols.js.map +1 -0
- package/dist/token-savings.d.ts +40 -0
- package/dist/token-savings.js +50 -0
- package/dist/token-savings.js.map +1 -0
- package/dist/tool-catalog.d.ts +18 -0
- package/dist/tool-catalog.js +249 -0
- package/dist/tool-catalog.js.map +1 -0
- package/dist/tool-handlers/context-recovery.d.ts +6 -0
- package/dist/tool-handlers/context-recovery.js +319 -0
- package/dist/tool-handlers/context-recovery.js.map +1 -0
- package/dist/tool-handlers/context.d.ts +34 -0
- package/dist/tool-handlers/context.js +2 -0
- package/dist/tool-handlers/context.js.map +1 -0
- package/dist/tool-handlers/diagnostics.d.ts +8 -0
- package/dist/tool-handlers/diagnostics.js +114 -0
- package/dist/tool-handlers/diagnostics.js.map +1 -0
- package/dist/tool-handlers/files.d.ts +8 -0
- package/dist/tool-handlers/files.js +493 -0
- package/dist/tool-handlers/files.js.map +1 -0
- package/dist/tool-handlers/large-files.d.ts +4 -0
- package/dist/tool-handlers/large-files.js +139 -0
- package/dist/tool-handlers/large-files.js.map +1 -0
- package/dist/tool-handlers/maintenance.d.ts +4 -0
- package/dist/tool-handlers/maintenance.js +160 -0
- package/dist/tool-handlers/maintenance.js.map +1 -0
- package/dist/tool-handlers/memory-diagnostics.d.ts +5 -0
- package/dist/tool-handlers/memory-diagnostics.js +558 -0
- package/dist/tool-handlers/memory-diagnostics.js.map +1 -0
- package/dist/tool-handlers/memory.d.ts +6 -0
- package/dist/tool-handlers/memory.js +352 -0
- package/dist/tool-handlers/memory.js.map +1 -0
- package/dist/tool-handlers/notes-decisions.d.ts +7 -0
- package/dist/tool-handlers/notes-decisions.js +169 -0
- package/dist/tool-handlers/notes-decisions.js.map +1 -0
- package/dist/tool-handlers/operations.d.ts +4 -0
- package/dist/tool-handlers/operations.js +62 -0
- package/dist/tool-handlers/operations.js.map +1 -0
- package/dist/tool-handlers/requirements.d.ts +7 -0
- package/dist/tool-handlers/requirements.js +399 -0
- package/dist/tool-handlers/requirements.js.map +1 -0
- package/dist/tool-handlers.d.ts +4 -0
- package/dist/tool-handlers.js +107 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/tool-output.d.ts +266 -0
- package/dist/tool-output.js +328 -0
- package/dist/tool-output.js.map +1 -0
- package/dist/tool-schemas.d.ts +460 -0
- package/dist/tool-schemas.js +350 -0
- package/dist/tool-schemas.js.map +1 -0
- package/dist/types.d.ts +61 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/docs/capability-matrix.md +43 -0
- package/package.json +11 -10
- package/skills/vector-mind-autopilot/SKILL.md +173 -0
- package/skills/vector-mind-autopilot/references/claude-desktop-mcp-config.json +9 -0
- package/skills/vector-mind-autopilot/references/claude-project-instructions.md +51 -0
- package/skills/vector-mind-autopilot/references/universal-system-prompt.md +81 -0
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
export const IGNORED_PATH_SEGMENTS = new Set([
|
|
3
|
+
// VCS / tooling
|
|
4
|
+
".git",
|
|
5
|
+
".hg",
|
|
6
|
+
".svn",
|
|
7
|
+
".idea",
|
|
8
|
+
".vscode",
|
|
9
|
+
// VectorMind artifacts
|
|
10
|
+
".vectormind",
|
|
11
|
+
// Node ecosystem
|
|
12
|
+
"node_modules",
|
|
13
|
+
".next",
|
|
14
|
+
".nuxt",
|
|
15
|
+
".svelte-kit",
|
|
16
|
+
".turbo",
|
|
17
|
+
".nx",
|
|
18
|
+
".cache",
|
|
19
|
+
".parcel-cache",
|
|
20
|
+
// .NET / VS build artifacts
|
|
21
|
+
"bin",
|
|
22
|
+
"obj",
|
|
23
|
+
".vs",
|
|
24
|
+
"testresults",
|
|
25
|
+
// General build outputs
|
|
26
|
+
"dist",
|
|
27
|
+
"build",
|
|
28
|
+
"buildfiles",
|
|
29
|
+
"out",
|
|
30
|
+
"target",
|
|
31
|
+
"coverage",
|
|
32
|
+
"artifacts",
|
|
33
|
+
// Python caches/venvs
|
|
34
|
+
"__pycache__",
|
|
35
|
+
".pytest_cache",
|
|
36
|
+
".mypy_cache",
|
|
37
|
+
".ruff_cache",
|
|
38
|
+
".venv",
|
|
39
|
+
"venv",
|
|
40
|
+
"env",
|
|
41
|
+
".tox",
|
|
42
|
+
".nox",
|
|
43
|
+
// C/C++ common build dirs
|
|
44
|
+
"cmakefiles",
|
|
45
|
+
"debug",
|
|
46
|
+
"release",
|
|
47
|
+
"x64",
|
|
48
|
+
"x86",
|
|
49
|
+
].map((s) => s.toLowerCase()));
|
|
50
|
+
export const NOISE_FILE_SUFFIXES = [
|
|
51
|
+
".min.js",
|
|
52
|
+
".min.css",
|
|
53
|
+
".bundle.js",
|
|
54
|
+
".bundle.css",
|
|
55
|
+
".chunk.js",
|
|
56
|
+
".chunk.css",
|
|
57
|
+
];
|
|
58
|
+
export const NOISE_FILE_BASENAMES = [
|
|
59
|
+
"package-lock.json",
|
|
60
|
+
"pnpm-lock.yaml",
|
|
61
|
+
"yarn.lock",
|
|
62
|
+
"bun.lockb",
|
|
63
|
+
"cargo.lock",
|
|
64
|
+
"composer.lock",
|
|
65
|
+
];
|
|
66
|
+
export const IGNORED_LIKE_PATTERNS = (() => {
|
|
67
|
+
const patterns = [];
|
|
68
|
+
for (const seg of IGNORED_PATH_SEGMENTS) {
|
|
69
|
+
patterns.push(`${seg}/%`);
|
|
70
|
+
patterns.push(`%/${seg}/%`);
|
|
71
|
+
}
|
|
72
|
+
return patterns;
|
|
73
|
+
})();
|
|
74
|
+
function pathHasIgnoredSegments(posixPath) {
|
|
75
|
+
const segments = posixPath
|
|
76
|
+
.replace(/\\/g, "/")
|
|
77
|
+
.split("/")
|
|
78
|
+
.filter(Boolean)
|
|
79
|
+
.map((s) => s.toLowerCase());
|
|
80
|
+
for (const seg of segments) {
|
|
81
|
+
if (IGNORED_PATH_SEGMENTS.has(seg))
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
return false;
|
|
85
|
+
}
|
|
86
|
+
export function shouldIgnoreDbFilePath(filePath) {
|
|
87
|
+
if (!filePath)
|
|
88
|
+
return false;
|
|
89
|
+
return pathHasIgnoredSegments(filePath);
|
|
90
|
+
}
|
|
91
|
+
export function shouldIgnorePath(inputPath, projectRoot) {
|
|
92
|
+
const normalizedAbs = path.resolve(inputPath);
|
|
93
|
+
const rel = path.relative(projectRoot, normalizedAbs);
|
|
94
|
+
if (rel.startsWith("..") || path.isAbsolute(rel))
|
|
95
|
+
return true;
|
|
96
|
+
const relPosix = rel.replace(/\\/g, "/");
|
|
97
|
+
if (pathHasIgnoredSegments(relPosix))
|
|
98
|
+
return true;
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
export function isSymbolIndexableFile(filePath) {
|
|
102
|
+
if (shouldIgnoreContentFile(filePath))
|
|
103
|
+
return false;
|
|
104
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
105
|
+
const allowed = new Set([
|
|
106
|
+
".ts",
|
|
107
|
+
".tsx",
|
|
108
|
+
".js",
|
|
109
|
+
".jsx",
|
|
110
|
+
".mjs",
|
|
111
|
+
".cjs",
|
|
112
|
+
".py",
|
|
113
|
+
".go",
|
|
114
|
+
".rs",
|
|
115
|
+
".java",
|
|
116
|
+
".kt",
|
|
117
|
+
".cs",
|
|
118
|
+
".c",
|
|
119
|
+
".cc",
|
|
120
|
+
".cpp",
|
|
121
|
+
".h",
|
|
122
|
+
".hpp",
|
|
123
|
+
]);
|
|
124
|
+
return allowed.has(ext);
|
|
125
|
+
}
|
|
126
|
+
export function shouldIgnoreContentFile(filePath) {
|
|
127
|
+
const base = path.basename(filePath).toLowerCase();
|
|
128
|
+
if (NOISE_FILE_BASENAMES.includes(base))
|
|
129
|
+
return true;
|
|
130
|
+
if (NOISE_FILE_SUFFIXES.some((suffix) => base.endsWith(suffix)))
|
|
131
|
+
return true;
|
|
132
|
+
return false;
|
|
133
|
+
}
|
|
134
|
+
export function looksLikeGeneratedFile(content) {
|
|
135
|
+
const head = content.slice(0, 4000).toLowerCase();
|
|
136
|
+
if (head.includes("@generated"))
|
|
137
|
+
return true;
|
|
138
|
+
if (head.includes("do not edit") && (head.includes("generated") || head.includes("auto-generated"))) {
|
|
139
|
+
return true;
|
|
140
|
+
}
|
|
141
|
+
if (head.includes("this file was generated") && head.includes("do not edit"))
|
|
142
|
+
return true;
|
|
143
|
+
return false;
|
|
144
|
+
}
|
|
145
|
+
export function looksLikeMinifiedBundle(content) {
|
|
146
|
+
if (content.length < 30_000)
|
|
147
|
+
return false;
|
|
148
|
+
let lines = 1;
|
|
149
|
+
let currentLen = 0;
|
|
150
|
+
let maxLineLen = 0;
|
|
151
|
+
let longLines = 0;
|
|
152
|
+
for (let i = 0; i < content.length; i++) {
|
|
153
|
+
const code = content.charCodeAt(i);
|
|
154
|
+
if (code === 10 /* \n */) {
|
|
155
|
+
if (currentLen > maxLineLen)
|
|
156
|
+
maxLineLen = currentLen;
|
|
157
|
+
if (currentLen >= 800)
|
|
158
|
+
longLines += 1;
|
|
159
|
+
currentLen = 0;
|
|
160
|
+
lines += 1;
|
|
161
|
+
continue;
|
|
162
|
+
}
|
|
163
|
+
currentLen += 1;
|
|
164
|
+
}
|
|
165
|
+
if (currentLen > maxLineLen)
|
|
166
|
+
maxLineLen = currentLen;
|
|
167
|
+
if (currentLen >= 800)
|
|
168
|
+
longLines += 1;
|
|
169
|
+
const avgLineLen = content.length / Math.max(1, lines);
|
|
170
|
+
if (lines <= 2 && maxLineLen >= 2000)
|
|
171
|
+
return true;
|
|
172
|
+
if (maxLineLen >= 6000)
|
|
173
|
+
return true;
|
|
174
|
+
if (avgLineLen >= 900)
|
|
175
|
+
return true;
|
|
176
|
+
if (lines <= 10 && longLines >= Math.ceil(lines * 0.6))
|
|
177
|
+
return true;
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
export function getContentChunkKind(filePath) {
|
|
181
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
182
|
+
const docExt = new Set([
|
|
183
|
+
".md",
|
|
184
|
+
".mdx",
|
|
185
|
+
".txt",
|
|
186
|
+
".rst",
|
|
187
|
+
".adoc",
|
|
188
|
+
".org",
|
|
189
|
+
".json",
|
|
190
|
+
".yml",
|
|
191
|
+
".yaml",
|
|
192
|
+
".toml",
|
|
193
|
+
".ini",
|
|
194
|
+
".env",
|
|
195
|
+
".sql",
|
|
196
|
+
]);
|
|
197
|
+
if (docExt.has(ext))
|
|
198
|
+
return "doc_chunk";
|
|
199
|
+
if (isSymbolIndexableFile(filePath))
|
|
200
|
+
return "code_chunk";
|
|
201
|
+
return null;
|
|
202
|
+
}
|
|
203
|
+
export function isContentIndexableFile(filePath) {
|
|
204
|
+
if (shouldIgnoreContentFile(filePath))
|
|
205
|
+
return false;
|
|
206
|
+
return getContentChunkKind(filePath) !== null;
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=path-rules.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"path-rules.js","sourceRoot":"","sources":["../src/path-rules.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import type { PendingChangeRow } from "./types.js";
|
|
3
|
+
type PendingChangesContext = {
|
|
4
|
+
getDb: () => Database.Database | undefined;
|
|
5
|
+
getProjectRoot: () => string;
|
|
6
|
+
getCountPendingChangesStatement: () => Database.Statement;
|
|
7
|
+
getDeleteOldPendingChangesStatement: () => Database.Statement | null;
|
|
8
|
+
getDeleteOldestPendingChangesStatement: () => Database.Statement | null;
|
|
9
|
+
getFileStateHash: (dbOrAbsPath: string) => string | null;
|
|
10
|
+
getLatestSyncedFileHash: (dbFilePath: string) => string | null;
|
|
11
|
+
};
|
|
12
|
+
export declare function configurePendingChanges(context: PendingChangesContext): void;
|
|
13
|
+
export declare function mergePendingWithGit(pending: PendingChangeRow[], opts: {
|
|
14
|
+
offset: number;
|
|
15
|
+
limit: number;
|
|
16
|
+
}): {
|
|
17
|
+
total: number;
|
|
18
|
+
page: PendingChangeRow[];
|
|
19
|
+
truncated: boolean;
|
|
20
|
+
};
|
|
21
|
+
export declare function prunePendingChanges(): void;
|
|
22
|
+
export {};
|
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { IGNORED_LIKE_PATTERNS, shouldIgnoreDbFilePath } from "./path-rules.js";
|
|
5
|
+
import { PENDING_MAX_ENTRIES, PENDING_TTL_DAYS } from "./config.js";
|
|
6
|
+
import { logActivity } from "./activity-log.js";
|
|
7
|
+
let pendingChangesContext = null;
|
|
8
|
+
export function configurePendingChanges(context) {
|
|
9
|
+
pendingChangesContext = context;
|
|
10
|
+
}
|
|
11
|
+
function requirePendingChangesContext() {
|
|
12
|
+
if (!pendingChangesContext)
|
|
13
|
+
throw new Error("[VectorMind] pending changes context is not configured");
|
|
14
|
+
return pendingChangesContext;
|
|
15
|
+
}
|
|
16
|
+
function hasDb() {
|
|
17
|
+
return !!requirePendingChangesContext().getDb();
|
|
18
|
+
}
|
|
19
|
+
function getDb() {
|
|
20
|
+
const db = requirePendingChangesContext().getDb();
|
|
21
|
+
if (!db)
|
|
22
|
+
throw new Error("[VectorMind] database is not initialized");
|
|
23
|
+
return db;
|
|
24
|
+
}
|
|
25
|
+
function getProjectRoot() {
|
|
26
|
+
return requirePendingChangesContext().getProjectRoot();
|
|
27
|
+
}
|
|
28
|
+
function getCountPendingChangesStatement() {
|
|
29
|
+
return requirePendingChangesContext().getCountPendingChangesStatement();
|
|
30
|
+
}
|
|
31
|
+
function getDeleteOldPendingChangesStatement() {
|
|
32
|
+
return requirePendingChangesContext().getDeleteOldPendingChangesStatement();
|
|
33
|
+
}
|
|
34
|
+
function getDeleteOldestPendingChangesStatement() {
|
|
35
|
+
return requirePendingChangesContext().getDeleteOldestPendingChangesStatement();
|
|
36
|
+
}
|
|
37
|
+
function getFileStateHash(dbOrAbsPath) {
|
|
38
|
+
return requirePendingChangesContext().getFileStateHash(dbOrAbsPath);
|
|
39
|
+
}
|
|
40
|
+
function getLatestSyncedFileHash(dbFilePath) {
|
|
41
|
+
return requirePendingChangesContext().getLatestSyncedFileHash(dbFilePath);
|
|
42
|
+
}
|
|
43
|
+
function isProbablyGitRepository() {
|
|
44
|
+
try {
|
|
45
|
+
return fs.existsSync(path.join(getProjectRoot(), ".git"));
|
|
46
|
+
}
|
|
47
|
+
catch {
|
|
48
|
+
return false;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
function normalizeGitStatusPath(raw) {
|
|
52
|
+
const first = raw.split("\0")[0] ?? "";
|
|
53
|
+
return first.trim().replace(/\\/g, "/").replace(/^"(.*)"$/, "$1");
|
|
54
|
+
}
|
|
55
|
+
function collectGitPendingChanges(limit) {
|
|
56
|
+
if (limit <= 0 || !isProbablyGitRepository())
|
|
57
|
+
return [];
|
|
58
|
+
const git = spawnSync("git", ["status", "--porcelain=v1", "-z", "--untracked-files=normal"], {
|
|
59
|
+
cwd: getProjectRoot(),
|
|
60
|
+
encoding: "utf8",
|
|
61
|
+
timeout: 5000,
|
|
62
|
+
windowsHide: true,
|
|
63
|
+
maxBuffer: 2_000_000,
|
|
64
|
+
});
|
|
65
|
+
if (git.error || git.status !== 0 || !git.stdout)
|
|
66
|
+
return [];
|
|
67
|
+
const parts = git.stdout.split("\0").filter(Boolean);
|
|
68
|
+
const rows = [];
|
|
69
|
+
for (let i = 0; i < parts.length && rows.length < limit; i++) {
|
|
70
|
+
const rec = parts[i] ?? "";
|
|
71
|
+
const status = rec.slice(0, 2);
|
|
72
|
+
let rawPath = rec.slice(3);
|
|
73
|
+
if (status.startsWith("R") || status.startsWith("C")) {
|
|
74
|
+
// Porcelain -z rename/copy records include the destination in the next NUL field.
|
|
75
|
+
rawPath = parts[i + 1] ?? rawPath;
|
|
76
|
+
i += 1;
|
|
77
|
+
}
|
|
78
|
+
const filePath = normalizeGitStatusPath(rawPath);
|
|
79
|
+
if (!filePath || filePath === ".vectormind" || filePath.startsWith(".vectormind/"))
|
|
80
|
+
continue;
|
|
81
|
+
rows.push({
|
|
82
|
+
file_path: filePath,
|
|
83
|
+
last_event: status.includes("D") ? "unlink" : status === "??" ? "add" : "change",
|
|
84
|
+
updated_at: new Date().toISOString(),
|
|
85
|
+
source: "git",
|
|
86
|
+
git_status: status.trim() || "modified",
|
|
87
|
+
file_state_hash: getFileStateHash(filePath) ?? undefined,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
return rows;
|
|
91
|
+
}
|
|
92
|
+
export function mergePendingWithGit(pending, opts) {
|
|
93
|
+
const byPath = new Map();
|
|
94
|
+
for (const p of pending) {
|
|
95
|
+
if (shouldIgnoreDbFilePath(p.file_path))
|
|
96
|
+
continue;
|
|
97
|
+
byPath.set(p.file_path, { ...p, source: p.source ?? "watcher" });
|
|
98
|
+
}
|
|
99
|
+
const gitRows = collectGitPendingChanges(Math.max(500, opts.offset + opts.limit * 4));
|
|
100
|
+
for (const g of gitRows) {
|
|
101
|
+
const latestSyncedHash = getLatestSyncedFileHash(g.file_path);
|
|
102
|
+
if (latestSyncedHash && g.file_state_hash && latestSyncedHash === g.file_state_hash)
|
|
103
|
+
continue;
|
|
104
|
+
const existing = byPath.get(g.file_path);
|
|
105
|
+
if (!existing) {
|
|
106
|
+
byPath.set(g.file_path, g);
|
|
107
|
+
continue;
|
|
108
|
+
}
|
|
109
|
+
byPath.set(g.file_path, {
|
|
110
|
+
...existing,
|
|
111
|
+
source: existing.source === "watcher" ? "watcher" : g.source,
|
|
112
|
+
git_status: g.git_status,
|
|
113
|
+
file_state_hash: g.file_state_hash,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
const all = Array.from(byPath.values()).sort((a, b) => {
|
|
117
|
+
const at = Date.parse(a.updated_at) || 0;
|
|
118
|
+
const bt = Date.parse(b.updated_at) || 0;
|
|
119
|
+
if (bt !== at)
|
|
120
|
+
return bt - at;
|
|
121
|
+
return a.file_path.localeCompare(b.file_path);
|
|
122
|
+
});
|
|
123
|
+
const page = all.slice(opts.offset, opts.offset + opts.limit);
|
|
124
|
+
return { total: all.length, page, truncated: all.length > opts.offset + opts.limit };
|
|
125
|
+
}
|
|
126
|
+
function pruneIgnoredPendingChanges() {
|
|
127
|
+
if (!hasDb())
|
|
128
|
+
return;
|
|
129
|
+
try {
|
|
130
|
+
if (!IGNORED_LIKE_PATTERNS.length)
|
|
131
|
+
return;
|
|
132
|
+
const where = IGNORED_LIKE_PATTERNS
|
|
133
|
+
.map(() => "LOWER(REPLACE(file_path, '\\\\', '/')) LIKE ?")
|
|
134
|
+
.join(" OR ");
|
|
135
|
+
getDb().prepare(`DELETE FROM pending_changes WHERE ${where}`).run(...IGNORED_LIKE_PATTERNS);
|
|
136
|
+
}
|
|
137
|
+
catch (err) {
|
|
138
|
+
console.error("[vectormind] prune pending_changes failed:", err);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
export function prunePendingChanges() {
|
|
142
|
+
if (!hasDb())
|
|
143
|
+
return;
|
|
144
|
+
try {
|
|
145
|
+
const before = Number(getCountPendingChangesStatement().get()?.total ?? 0);
|
|
146
|
+
pruneIgnoredPendingChanges();
|
|
147
|
+
if (PENDING_TTL_DAYS > 0) {
|
|
148
|
+
getDeleteOldPendingChangesStatement()?.run(`-${PENDING_TTL_DAYS} days`);
|
|
149
|
+
}
|
|
150
|
+
if (PENDING_MAX_ENTRIES > 0) {
|
|
151
|
+
const total = Number(getCountPendingChangesStatement().get()?.total ?? 0);
|
|
152
|
+
const overflow = total - PENDING_MAX_ENTRIES;
|
|
153
|
+
if (overflow > 0) {
|
|
154
|
+
getDeleteOldestPendingChangesStatement()?.run(overflow);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const after = Number(getCountPendingChangesStatement().get()?.total ?? 0);
|
|
158
|
+
if (before !== after) {
|
|
159
|
+
logActivity("pending_prune", { before, after });
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
catch (err) {
|
|
163
|
+
console.error("[vectormind] prune pending_changes failed:", err);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
//# sourceMappingURL=pending-changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pending-changes.js","sourceRoot":"","sources":["../src/pending-changes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
export declare function resolveProjectPathUnderRoot(projectRoot: string, normalizeToDbPath: (inputPath: string) => string, inputPath: string, opts?: {
|
|
2
|
+
allowRoot?: boolean;
|
|
3
|
+
}): {
|
|
4
|
+
absPath: string;
|
|
5
|
+
dbFilePath: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function resolveReadPathUnderProjectRoot(projectRoot: string, normalizeToDbPath: (inputPath: string) => string, inputPath: string): {
|
|
8
|
+
absPath: string;
|
|
9
|
+
dbFilePath: string;
|
|
10
|
+
};
|
|
11
|
+
export declare function resolveCodexTextPath(inputPath: string): {
|
|
12
|
+
absPath: string;
|
|
13
|
+
displayPath: string;
|
|
14
|
+
allowedRoot: string;
|
|
15
|
+
};
|
|
16
|
+
export declare function normalizeExtensionsFilter(values: string[] | undefined): string[] | null;
|
|
17
|
+
export declare function readTextFileLines(opts: {
|
|
18
|
+
absPath: string;
|
|
19
|
+
fromLine: number;
|
|
20
|
+
toLine: number;
|
|
21
|
+
maxLines: number;
|
|
22
|
+
maxChars: number;
|
|
23
|
+
}): Promise<{
|
|
24
|
+
text: string;
|
|
25
|
+
returned: number;
|
|
26
|
+
truncated: boolean;
|
|
27
|
+
}>;
|
|
28
|
+
export declare function readTextFileSlice(opts: {
|
|
29
|
+
absPath: string;
|
|
30
|
+
offset: number;
|
|
31
|
+
maxChars: number;
|
|
32
|
+
maxFileBytes: number;
|
|
33
|
+
}): {
|
|
34
|
+
text: string;
|
|
35
|
+
totalChars: number;
|
|
36
|
+
returnedChars: number;
|
|
37
|
+
truncated: boolean;
|
|
38
|
+
};
|
|
39
|
+
export type ProjectFileListEntry = {
|
|
40
|
+
path: string;
|
|
41
|
+
kind: "file" | "dir";
|
|
42
|
+
depth: number;
|
|
43
|
+
size?: number;
|
|
44
|
+
mtime?: string;
|
|
45
|
+
};
|
|
46
|
+
export declare function listProjectFilesInternal(opts: {
|
|
47
|
+
startAbsPath: string;
|
|
48
|
+
startDbPath: string;
|
|
49
|
+
recursive: boolean;
|
|
50
|
+
maxDepth: number;
|
|
51
|
+
includeFiles: boolean;
|
|
52
|
+
includeDirs: boolean;
|
|
53
|
+
includeHidden: boolean;
|
|
54
|
+
respectIgnore: boolean;
|
|
55
|
+
includePaths: string[] | null;
|
|
56
|
+
excludePaths: string[] | null;
|
|
57
|
+
extensions: string[] | null;
|
|
58
|
+
maxResults: number;
|
|
59
|
+
includeStats: boolean;
|
|
60
|
+
normalizeToDbPath: (inputPath: string) => string;
|
|
61
|
+
}): {
|
|
62
|
+
entries: ProjectFileListEntry[];
|
|
63
|
+
returned: number;
|
|
64
|
+
scanned: number;
|
|
65
|
+
truncated: boolean;
|
|
66
|
+
};
|