@coreyuan/vector-mind 1.0.49 → 1.0.52

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 (114) hide show
  1. package/README.md +67 -60
  2. package/dist/activity-log.d.ts +19 -0
  3. package/dist/activity-log.js +106 -0
  4. package/dist/activity-log.js.map +1 -0
  5. package/dist/builtin-conventions.d.ts +2 -1
  6. package/dist/builtin-conventions.js +5 -0
  7. package/dist/builtin-conventions.js.map +1 -1
  8. package/dist/config.d.ts +28 -0
  9. package/dist/config.js +189 -0
  10. package/dist/config.js.map +1 -0
  11. package/dist/database-runtime.d.ts +54 -0
  12. package/dist/database-runtime.js +512 -0
  13. package/dist/database-runtime.js.map +1 -0
  14. package/dist/development-warnings.d.ts +93 -0
  15. package/dist/development-warnings.js +589 -0
  16. package/dist/development-warnings.js.map +1 -0
  17. package/dist/file-indexing.d.ts +22 -0
  18. package/dist/file-indexing.js +243 -0
  19. package/dist/file-indexing.js.map +1 -0
  20. package/dist/grep.d.ts +64 -0
  21. package/dist/grep.js +475 -0
  22. package/dist/grep.js.map +1 -0
  23. package/dist/index.js +167 -7279
  24. package/dist/index.js.map +1 -1
  25. package/dist/large-file-split.d.ts +29 -0
  26. package/dist/large-file-split.js +146 -0
  27. package/dist/large-file-split.js.map +1 -0
  28. package/dist/memory-maintenance.d.ts +80 -0
  29. package/dist/memory-maintenance.js +537 -0
  30. package/dist/memory-maintenance.js.map +1 -0
  31. package/dist/memory-mutations.d.ts +23 -0
  32. package/dist/memory-mutations.js +83 -0
  33. package/dist/memory-mutations.js.map +1 -0
  34. package/dist/memory-recall.d.ts +93 -0
  35. package/dist/memory-recall.js +796 -0
  36. package/dist/memory-recall.js.map +1 -0
  37. package/dist/path-filters.d.ts +1 -0
  38. package/dist/path-filters.js +27 -0
  39. package/dist/path-filters.js.map +1 -0
  40. package/dist/path-rules.d.ts +12 -0
  41. package/dist/path-rules.js +208 -0
  42. package/dist/path-rules.js.map +1 -0
  43. package/dist/pending-changes.d.ts +22 -0
  44. package/dist/pending-changes.js +166 -0
  45. package/dist/pending-changes.js.map +1 -0
  46. package/dist/project-files.d.ts +66 -0
  47. package/dist/project-files.js +215 -0
  48. package/dist/project-files.js.map +1 -0
  49. package/dist/root.d.ts +15 -0
  50. package/dist/root.js +191 -0
  51. package/dist/root.js.map +1 -0
  52. package/dist/rtk-tools.d.ts +20 -0
  53. package/dist/rtk-tools.js +318 -0
  54. package/dist/rtk-tools.js.map +1 -0
  55. package/dist/server-instructions.d.ts +1 -0
  56. package/dist/server-instructions.js +88 -0
  57. package/dist/server-instructions.js.map +1 -0
  58. package/dist/symbols.d.ts +2 -0
  59. package/dist/symbols.js +159 -0
  60. package/dist/symbols.js.map +1 -0
  61. package/dist/token-savings.d.ts +40 -0
  62. package/dist/token-savings.js +50 -0
  63. package/dist/token-savings.js.map +1 -0
  64. package/dist/tool-catalog.d.ts +18 -0
  65. package/dist/tool-catalog.js +243 -0
  66. package/dist/tool-catalog.js.map +1 -0
  67. package/dist/tool-handlers/context-recovery.d.ts +6 -0
  68. package/dist/tool-handlers/context-recovery.js +319 -0
  69. package/dist/tool-handlers/context-recovery.js.map +1 -0
  70. package/dist/tool-handlers/context.d.ts +34 -0
  71. package/dist/tool-handlers/context.js +2 -0
  72. package/dist/tool-handlers/context.js.map +1 -0
  73. package/dist/tool-handlers/diagnostics.d.ts +8 -0
  74. package/dist/tool-handlers/diagnostics.js +114 -0
  75. package/dist/tool-handlers/diagnostics.js.map +1 -0
  76. package/dist/tool-handlers/files.d.ts +8 -0
  77. package/dist/tool-handlers/files.js +493 -0
  78. package/dist/tool-handlers/files.js.map +1 -0
  79. package/dist/tool-handlers/large-files.d.ts +4 -0
  80. package/dist/tool-handlers/large-files.js +139 -0
  81. package/dist/tool-handlers/large-files.js.map +1 -0
  82. package/dist/tool-handlers/maintenance.d.ts +4 -0
  83. package/dist/tool-handlers/maintenance.js +160 -0
  84. package/dist/tool-handlers/maintenance.js.map +1 -0
  85. package/dist/tool-handlers/memory-diagnostics.d.ts +5 -0
  86. package/dist/tool-handlers/memory-diagnostics.js +509 -0
  87. package/dist/tool-handlers/memory-diagnostics.js.map +1 -0
  88. package/dist/tool-handlers/memory.d.ts +6 -0
  89. package/dist/tool-handlers/memory.js +334 -0
  90. package/dist/tool-handlers/memory.js.map +1 -0
  91. package/dist/tool-handlers/notes-decisions.d.ts +7 -0
  92. package/dist/tool-handlers/notes-decisions.js +169 -0
  93. package/dist/tool-handlers/notes-decisions.js.map +1 -0
  94. package/dist/tool-handlers/requirements.d.ts +7 -0
  95. package/dist/tool-handlers/requirements.js +357 -0
  96. package/dist/tool-handlers/requirements.js.map +1 -0
  97. package/dist/tool-handlers.d.ts +4 -0
  98. package/dist/tool-handlers.js +105 -0
  99. package/dist/tool-handlers.js.map +1 -0
  100. package/dist/tool-output.d.ts +213 -0
  101. package/dist/tool-output.js +278 -0
  102. package/dist/tool-output.js.map +1 -0
  103. package/dist/tool-schemas.d.ts +434 -0
  104. package/dist/tool-schemas.js +328 -0
  105. package/dist/tool-schemas.js.map +1 -0
  106. package/dist/types.d.ts +61 -0
  107. package/dist/types.js +2 -0
  108. package/dist/types.js.map +1 -0
  109. package/docs/capability-matrix.md +43 -0
  110. package/package.json +11 -10
  111. package/skills/vector-mind-autopilot/SKILL.md +149 -0
  112. package/skills/vector-mind-autopilot/references/claude-desktop-mcp-config.json +9 -0
  113. package/skills/vector-mind-autopilot/references/claude-project-instructions.md +47 -0
  114. package/skills/vector-mind-autopilot/references/universal-system-prompt.md +78 -0
@@ -0,0 +1,243 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import { INDEX_MAX_CODE_BYTES, INDEX_MAX_DOC_BYTES, INDEX_SKIP_MINIFIED, PENDING_FLUSH_MS, PENDING_PRUNE_EVERY, } from "./config.js";
4
+ import { getContentChunkKind, isContentIndexableFile, isSymbolIndexableFile, looksLikeGeneratedFile, looksLikeMinifiedBundle, shouldIgnorePath, } from "./path-rules.js";
5
+ import { extractSymbols } from "./symbols.js";
6
+ import { logActivity } from "./activity-log.js";
7
+ import { safeJson } from "./tool-output.js";
8
+ let fileIndexingContext = null;
9
+ const pendingChangeBuffer = new Map();
10
+ let pendingChangeFlushTimer = null;
11
+ let pendingEventsSincePrune = 0;
12
+ export function configureFileIndexing(context) {
13
+ fileIndexingContext = context;
14
+ }
15
+ function requireFileIndexingContext() {
16
+ if (!fileIndexingContext)
17
+ throw new Error("[VectorMind] file indexing context is not configured");
18
+ return fileIndexingContext;
19
+ }
20
+ function hasDb() {
21
+ return !!requireFileIndexingContext().getDb();
22
+ }
23
+ function getDb() {
24
+ const db = requireFileIndexingContext().getDb();
25
+ if (!db)
26
+ throw new Error("[VectorMind] database is not initialized");
27
+ return db;
28
+ }
29
+ function getProjectRoot() {
30
+ return requireFileIndexingContext().getProjectRoot();
31
+ }
32
+ function normalizeToDbPath(inputPath) {
33
+ return requireFileIndexingContext().normalizeToDbPath(inputPath);
34
+ }
35
+ function getIndexFileSymbolsTx() {
36
+ return requireFileIndexingContext().getIndexFileSymbolsTx();
37
+ }
38
+ function getDeleteFileChunkItemsStatement() {
39
+ return requireFileIndexingContext().getDeleteFileChunkItemsStatement();
40
+ }
41
+ function getInsertMemoryItemStatement() {
42
+ return requireFileIndexingContext().getInsertMemoryItemStatement();
43
+ }
44
+ function getUpsertPendingChangeStatement() {
45
+ return requireFileIndexingContext().getUpsertPendingChangeStatement();
46
+ }
47
+ function getDeleteSymbolsForFileStatement() {
48
+ return requireFileIndexingContext().getDeleteSymbolsForFileStatement();
49
+ }
50
+ function sha256Hex(input) {
51
+ return requireFileIndexingContext().sha256Hex(input);
52
+ }
53
+ function prunePendingChanges() {
54
+ requireFileIndexingContext().prunePendingChanges();
55
+ }
56
+ function chunkTextByLines(content, opts) {
57
+ const lines = content.split(/\r?\n/);
58
+ if (lines.length === 0)
59
+ return [];
60
+ const chunks = [];
61
+ let startLine = 1;
62
+ let currentLines = [];
63
+ let currentChars = 0;
64
+ for (let idx = 0; idx < lines.length; idx++) {
65
+ const line = lines[idx];
66
+ const nextChars = currentChars + line.length + 1;
67
+ const nextLines = currentLines.length + 1;
68
+ if (currentLines.length > 0 && (nextChars > opts.maxChars || nextLines > opts.maxLines)) {
69
+ const endLine = startLine + currentLines.length - 1;
70
+ chunks.push({ startLine, endLine, content: currentLines.join("\n") });
71
+ startLine = idx + 1;
72
+ currentLines = [];
73
+ currentChars = 0;
74
+ }
75
+ currentLines.push(line);
76
+ currentChars += line.length + 1;
77
+ }
78
+ if (currentLines.length > 0) {
79
+ const endLine = startLine + currentLines.length - 1;
80
+ chunks.push({ startLine, endLine, content: currentLines.join("\n") });
81
+ }
82
+ return chunks;
83
+ }
84
+ function indexFileContentChunks(dbFilePath, absPath, content) {
85
+ const kind = getContentChunkKind(absPath);
86
+ if (!kind)
87
+ return 0;
88
+ const opts = kind === "code_chunk"
89
+ ? { maxChars: 10_000, maxLines: 200 }
90
+ : { maxChars: 14_000, maxLines: 260 };
91
+ const chunks = chunkTextByLines(content, opts);
92
+ const ext = path.extname(absPath).toLowerCase();
93
+ const metadata = safeJson({ ext });
94
+ const tx = getDb().transaction(() => {
95
+ getDeleteFileChunkItemsStatement().run(dbFilePath);
96
+ for (const chunk of chunks) {
97
+ const title = `${dbFilePath}#L${chunk.startLine}-L${chunk.endLine}`;
98
+ const contentHash = sha256Hex(chunk.content);
99
+ getInsertMemoryItemStatement().run(kind, title, chunk.content, dbFilePath, chunk.startLine, chunk.endLine, null, metadata, contentHash);
100
+ }
101
+ });
102
+ try {
103
+ tx();
104
+ }
105
+ catch (err) {
106
+ console.error("[vectormind] failed to index file chunks:", dbFilePath, err);
107
+ }
108
+ return chunks.length;
109
+ }
110
+ export function flushPendingChangeBuffer() {
111
+ if (!hasDb())
112
+ return;
113
+ if (pendingChangeFlushTimer) {
114
+ clearTimeout(pendingChangeFlushTimer);
115
+ pendingChangeFlushTimer = null;
116
+ }
117
+ if (!pendingChangeBuffer.size)
118
+ return;
119
+ const entries = Array.from(pendingChangeBuffer.entries());
120
+ pendingChangeBuffer.clear();
121
+ try {
122
+ const tx = getDb().transaction(() => {
123
+ for (const [filePath, event] of entries) {
124
+ getUpsertPendingChangeStatement().run(filePath, event);
125
+ }
126
+ });
127
+ tx();
128
+ }
129
+ catch (err) {
130
+ console.error("[vectormind] failed to flush pending change buffer:", err);
131
+ }
132
+ logActivity("pending_flush", {
133
+ entries: entries.length,
134
+ sample: entries.slice(0, 10).map(([file_path, last_event]) => ({ file_path, last_event })),
135
+ });
136
+ pendingEventsSincePrune += entries.length;
137
+ if (pendingEventsSincePrune >= PENDING_PRUNE_EVERY) {
138
+ pendingEventsSincePrune = 0;
139
+ prunePendingChanges();
140
+ }
141
+ }
142
+ export function recordPendingChange(absPath, event) {
143
+ if (shouldIgnorePath(absPath, getProjectRoot()))
144
+ return;
145
+ const track = isSymbolIndexableFile(absPath) || isContentIndexableFile(absPath);
146
+ if (!track)
147
+ return;
148
+ const filePath = normalizeToDbPath(absPath);
149
+ pendingChangeBuffer.set(filePath, event);
150
+ if (pendingChangeFlushTimer)
151
+ return;
152
+ if (PENDING_FLUSH_MS === 0) {
153
+ flushPendingChangeBuffer();
154
+ return;
155
+ }
156
+ pendingChangeFlushTimer = setTimeout(flushPendingChangeBuffer, PENDING_FLUSH_MS);
157
+ }
158
+ export function indexFile(absPath, reason) {
159
+ if (shouldIgnorePath(absPath, getProjectRoot()))
160
+ return;
161
+ const indexSymbols = isSymbolIndexableFile(absPath);
162
+ const indexContent = isContentIndexableFile(absPath);
163
+ if (!indexSymbols && !indexContent)
164
+ return;
165
+ const kind = getContentChunkKind(absPath);
166
+ if (!kind)
167
+ return;
168
+ let stat;
169
+ try {
170
+ stat = fs.statSync(absPath);
171
+ }
172
+ catch {
173
+ return;
174
+ }
175
+ if (!stat.isFile())
176
+ return;
177
+ const maxBytes = kind === "code_chunk" ? INDEX_MAX_CODE_BYTES : INDEX_MAX_DOC_BYTES;
178
+ if (maxBytes > 0 && stat.size > maxBytes)
179
+ return;
180
+ let content;
181
+ try {
182
+ content = fs.readFileSync(absPath, "utf8");
183
+ }
184
+ catch {
185
+ return;
186
+ }
187
+ if (content.includes("\u0000"))
188
+ return;
189
+ const ext = path.extname(absPath).toLowerCase();
190
+ const filePath = normalizeToDbPath(absPath);
191
+ if (INDEX_SKIP_MINIFIED &&
192
+ kind === "code_chunk" &&
193
+ (ext === ".js" || ext === ".mjs" || ext === ".cjs" || ext === ".css") &&
194
+ looksLikeMinifiedBundle(content)) {
195
+ logActivity("index_skip", { file_path: filePath, reason: "minified_bundle", bytes: stat.size });
196
+ return;
197
+ }
198
+ if (kind === "code_chunk" && stat.size >= 20_000 && looksLikeGeneratedFile(content)) {
199
+ logActivity("index_skip", { file_path: filePath, reason: "generated_file", bytes: stat.size });
200
+ return;
201
+ }
202
+ let symbolCount = 0;
203
+ let chunkCount = 0;
204
+ if (indexSymbols) {
205
+ const symbols = extractSymbols(absPath, content);
206
+ symbolCount = symbols.length;
207
+ try {
208
+ getIndexFileSymbolsTx()?.(filePath, symbols);
209
+ }
210
+ catch (err) {
211
+ console.error("[vectormind] failed to index symbols:", filePath, err);
212
+ }
213
+ }
214
+ if (indexContent) {
215
+ chunkCount = indexFileContentChunks(filePath, absPath, content);
216
+ }
217
+ logActivity("index_file", {
218
+ file_path: filePath,
219
+ reason,
220
+ symbols: symbolCount,
221
+ chunks: chunkCount,
222
+ bytes: stat.size,
223
+ });
224
+ }
225
+ export function removeFileIndexes(absPath) {
226
+ if (shouldIgnorePath(absPath, getProjectRoot()))
227
+ return;
228
+ const filePath = normalizeToDbPath(absPath);
229
+ try {
230
+ getDeleteSymbolsForFileStatement().run(filePath);
231
+ }
232
+ catch (err) {
233
+ console.error("[vectormind] failed to remove symbols:", filePath, err);
234
+ }
235
+ try {
236
+ getDeleteFileChunkItemsStatement().run(filePath);
237
+ }
238
+ catch (err) {
239
+ console.error("[vectormind] failed to remove file chunks:", filePath, err);
240
+ }
241
+ logActivity("remove_file", { file_path: filePath });
242
+ }
243
+ //# sourceMappingURL=file-indexing.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-indexing.js","sourceRoot":"","sources":["../src/file-indexing.ts"],"names":[],"mappings":"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"}
package/dist/grep.d.ts ADDED
@@ -0,0 +1,64 @@
1
+ import Database from "better-sqlite3";
2
+ export declare function hasUppercaseAscii(s: string): boolean;
3
+ export type GrepMatch = {
4
+ file_path: string;
5
+ kind: string;
6
+ line: number;
7
+ col: number;
8
+ preview: string;
9
+ match: string;
10
+ };
11
+ export type GrepBackend = "ripgrep" | "indexed_fallback";
12
+ export declare function runRipgrepSearch(opts: {
13
+ query: string;
14
+ mode: "regex" | "literal";
15
+ smartCase: boolean;
16
+ caseSensitive: boolean;
17
+ includePaths: string[] | null;
18
+ excludePaths: string[] | null;
19
+ maxResults: number;
20
+ projectRoot: string;
21
+ }): {
22
+ ok: true;
23
+ backend: "ripgrep";
24
+ rg_command: string;
25
+ matches: GrepMatch[];
26
+ truncated: boolean;
27
+ total_matches: number;
28
+ } | {
29
+ ok: false;
30
+ unavailable: boolean;
31
+ error: string;
32
+ attempts: string[];
33
+ rg_command?: string;
34
+ exit_status?: number | null;
35
+ };
36
+ export declare function runIndexedGrepSearch(opts: {
37
+ query: string;
38
+ mode: "regex" | "literal";
39
+ smartCase: boolean;
40
+ caseSensitive: boolean;
41
+ literalHint: string;
42
+ kinds: string[];
43
+ includePaths: string[] | null;
44
+ excludePaths: string[] | null;
45
+ maxResults: number;
46
+ maxCandidates?: number;
47
+ db: Database.Database;
48
+ ftsAvailable: boolean;
49
+ ftsTableName: string;
50
+ buildFtsMatchQuery: (raw: string) => string;
51
+ escapeLike: (pattern: string) => string;
52
+ }): {
53
+ backend: "indexed_fallback";
54
+ hint: string;
55
+ kinds: string[];
56
+ include_paths: string[];
57
+ exclude_paths: string[];
58
+ candidates: {
59
+ total: number;
60
+ scanned: number;
61
+ };
62
+ matches: GrepMatch[];
63
+ truncated: boolean;
64
+ };