@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.
- package/README.md +67 -60
- 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/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 +796 -0
- package/dist/memory-recall.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 +88 -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 +243 -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 +509 -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 +334 -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/requirements.d.ts +7 -0
- package/dist/tool-handlers/requirements.js +357 -0
- package/dist/tool-handlers/requirements.js.map +1 -0
- package/dist/tool-handlers.d.ts +4 -0
- package/dist/tool-handlers.js +105 -0
- package/dist/tool-handlers.js.map +1 -0
- package/dist/tool-output.d.ts +213 -0
- package/dist/tool-output.js +278 -0
- package/dist/tool-output.js.map +1 -0
- package/dist/tool-schemas.d.ts +434 -0
- package/dist/tool-schemas.js +328 -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 +149 -0
- package/skills/vector-mind-autopilot/references/claude-desktop-mcp-config.json +9 -0
- package/skills/vector-mind-autopilot/references/claude-project-instructions.md +47 -0
- package/skills/vector-mind-autopilot/references/universal-system-prompt.md +78 -0
|
@@ -0,0 +1,357 @@
|
|
|
1
|
+
import path from "node:path";
|
|
2
|
+
import { CompleteRequirementArgsSchema, GetPendingChangesArgsSchema, MAX_PENDING_LIMIT, PreflightChangeScopeArgsSchema, StartRequirementArgsSchema, SyncChangeIntentArgsSchema } from "../tool-schemas.js";
|
|
3
|
+
import { buildDevelopmentWarnings, buildRequirementMappingWarnings, buildRequirementScopeContract, buildRequirementStartWarnings, buildScopeDriftWarnings, getRequirementItems, getRequirementScopeContract, isDevelopmentWarningBlockingForChangeMode, mergeScopeContracts, normalizeRequirementItems } from "../development-warnings.js";
|
|
4
|
+
import { mergePendingWithGit } from "../pending-changes.js";
|
|
5
|
+
import { toolCompactOrJson } from "../token-savings.js";
|
|
6
|
+
import { flushPendingChangeBuffer, indexFile } from "../file-indexing.js";
|
|
7
|
+
import { completeAllActiveRequirementMemoryItems, completeRequirementMemoryItemsByReqId } from "../memory-mutations.js";
|
|
8
|
+
import { makePreviewText } from "../memory-recall.js";
|
|
9
|
+
import { logActivity } from "../activity-log.js";
|
|
10
|
+
import { compactPreflightChangeScopeText, safeJson, toolJson } from "../tool-output.js";
|
|
11
|
+
export async function handleStartRequirement(rawArgs, context) {
|
|
12
|
+
const sha256Hex = context.sha256Hex;
|
|
13
|
+
const { insertRequirementStmt, completeAllActiveRequirementsStmt, insertMemoryItemStmt } = context.getStatements();
|
|
14
|
+
const args = StartRequirementArgsSchema.parse(rawArgs);
|
|
15
|
+
flushPendingChangeBuffer();
|
|
16
|
+
const scope_contract = buildRequirementScopeContract({
|
|
17
|
+
title: args.title,
|
|
18
|
+
background: args.background,
|
|
19
|
+
scope_allow: args.scope_allow,
|
|
20
|
+
scope_deny: args.scope_deny,
|
|
21
|
+
allowed_paths: args.allowed_paths,
|
|
22
|
+
denied_paths: args.denied_paths,
|
|
23
|
+
});
|
|
24
|
+
const requirement_items = normalizeRequirementItems(args.requirement_items);
|
|
25
|
+
const development_warnings = buildRequirementStartWarnings({
|
|
26
|
+
title: args.title,
|
|
27
|
+
background: args.background,
|
|
28
|
+
close_previous: args.close_previous,
|
|
29
|
+
});
|
|
30
|
+
if (args.close_previous) {
|
|
31
|
+
try {
|
|
32
|
+
completeAllActiveRequirementsStmt.run();
|
|
33
|
+
completeAllActiveRequirementMemoryItems();
|
|
34
|
+
}
|
|
35
|
+
catch (err) {
|
|
36
|
+
console.error("[vectormind] failed to close previous active requirements:", err);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const info = insertRequirementStmt.run(args.title, args.background || null);
|
|
40
|
+
const id = Number(info.lastInsertRowid);
|
|
41
|
+
const background = args.background?.trim() ?? "";
|
|
42
|
+
const content = background ? `${args.title}\n\n${background}` : args.title;
|
|
43
|
+
const memoryInfo = insertMemoryItemStmt.run("requirement", args.title, content, null, null, null, id, safeJson({ status: "active", scope_contract, requirement_items }), sha256Hex(content));
|
|
44
|
+
const memory_id = Number(memoryInfo.lastInsertRowid);
|
|
45
|
+
logActivity("start_requirement", {
|
|
46
|
+
req_id: id,
|
|
47
|
+
title: args.title,
|
|
48
|
+
closed_previous: args.close_previous,
|
|
49
|
+
scope_contract,
|
|
50
|
+
requirement_items,
|
|
51
|
+
development_warnings: development_warnings.length,
|
|
52
|
+
});
|
|
53
|
+
return {
|
|
54
|
+
content: [
|
|
55
|
+
{
|
|
56
|
+
type: "text",
|
|
57
|
+
text: toolJson({
|
|
58
|
+
ok: true,
|
|
59
|
+
requirement: { id, title: args.title },
|
|
60
|
+
memory_item: { id: memory_id },
|
|
61
|
+
closed_previous: args.close_previous,
|
|
62
|
+
scope_contract,
|
|
63
|
+
requirement_items,
|
|
64
|
+
development_warnings,
|
|
65
|
+
}),
|
|
66
|
+
},
|
|
67
|
+
],
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
export async function handlePreflightChangeScope(rawArgs, context) {
|
|
71
|
+
const normalizeToDbPath = context.normalizeToDbPath;
|
|
72
|
+
const { getActiveRequirementStmt } = context.getStatements();
|
|
73
|
+
const args = PreflightChangeScopeArgsSchema.parse(rawArgs);
|
|
74
|
+
const changeMode = args.change_mode;
|
|
75
|
+
flushPendingChangeBuffer();
|
|
76
|
+
const files = (args.files ?? args.planned_files ?? []).filter((f) => typeof f === "string" && f.length > 0);
|
|
77
|
+
const active = getActiveRequirementStmt.get();
|
|
78
|
+
const explicitContract = buildRequirementScopeContract({
|
|
79
|
+
title: active?.title ?? "",
|
|
80
|
+
background: active?.context_data ?? "",
|
|
81
|
+
scope_allow: args.scope_allow,
|
|
82
|
+
scope_deny: args.scope_deny,
|
|
83
|
+
allowed_paths: args.allowed_paths,
|
|
84
|
+
denied_paths: args.denied_paths,
|
|
85
|
+
});
|
|
86
|
+
const explicitRequirementItems = normalizeRequirementItems(args.requirement_items);
|
|
87
|
+
const requirementItems = explicitRequirementItems.length
|
|
88
|
+
? explicitRequirementItems
|
|
89
|
+
: active
|
|
90
|
+
? getRequirementItems(active.id)
|
|
91
|
+
: [];
|
|
92
|
+
const fileInputs = files.map((file_path) => ({ file_path }));
|
|
93
|
+
const development_warnings = [
|
|
94
|
+
...buildDevelopmentWarnings(fileInputs, { includeUnspecified: fileInputs.length === 0 }),
|
|
95
|
+
...buildScopeDriftWarnings({
|
|
96
|
+
requirement: active,
|
|
97
|
+
contract: explicitContract,
|
|
98
|
+
intent: args.intent,
|
|
99
|
+
files: fileInputs,
|
|
100
|
+
includeMissingContractHint: true,
|
|
101
|
+
}),
|
|
102
|
+
...buildRequirementMappingWarnings({
|
|
103
|
+
requirement: active,
|
|
104
|
+
requirement_items: requirementItems,
|
|
105
|
+
planned_changes: args.planned_changes,
|
|
106
|
+
files: fileInputs,
|
|
107
|
+
change_mode: changeMode,
|
|
108
|
+
}),
|
|
109
|
+
];
|
|
110
|
+
const scope_contract = mergeScopeContracts(active ? getRequirementScopeContract(active.id) : null, explicitContract);
|
|
111
|
+
logActivity("preflight_change_scope", {
|
|
112
|
+
req_id: active?.id ?? null,
|
|
113
|
+
intent_preview: makePreviewText(args.intent, 200),
|
|
114
|
+
change_mode: changeMode,
|
|
115
|
+
files: files.slice(0, 25),
|
|
116
|
+
files_total: files.length,
|
|
117
|
+
development_warnings: development_warnings.length,
|
|
118
|
+
});
|
|
119
|
+
const hasTargetFiles = fileInputs.length > 0;
|
|
120
|
+
const hugeWarnings = development_warnings.filter((w) => w.code === "huge_file_modularization_required");
|
|
121
|
+
const hasHugeFile = hugeWarnings.length > 0;
|
|
122
|
+
const blockingWarnings = development_warnings.filter((w) => isDevelopmentWarningBlockingForChangeMode(w, changeMode));
|
|
123
|
+
const hasBlockingWarnings = blockingWarnings.length > 0;
|
|
124
|
+
const safeToEdit = hasTargetFiles && !hasBlockingWarnings;
|
|
125
|
+
const recommendedAction = !hasTargetFiles
|
|
126
|
+
? "Identify the intended target files/modules and rerun preflight_change_scope before editing."
|
|
127
|
+
: hasHugeFile && changeMode === "mechanical_modularization" && safeToEdit
|
|
128
|
+
? "Proceed only with mechanical modularization: call plan_large_file_split, move whole declarations into real named modules/directories, avoid generated/parts files, validate, then record_large_file_split."
|
|
129
|
+
: hasHugeFile && changeMode === "emergency_hotfix" && safeToEdit
|
|
130
|
+
? "Proceed only with the smallest urgent fix, do not add new responsibilities, record why mechanical modularization was deferred, and plan/record the split next."
|
|
131
|
+
: hasHugeFile
|
|
132
|
+
? "Stop normal feature work. Call plan_large_file_split and perform mechanical modularization first, or rerun preflight_change_scope with change_mode='mechanical_modularization' for the split itself."
|
|
133
|
+
: hasBlockingWarnings
|
|
134
|
+
? "Stop before editing. Narrow the planned files or explicitly expand the current requirement/scope contract."
|
|
135
|
+
: "Planned files are within the current generic scope checks.";
|
|
136
|
+
const requiredAction = hasHugeFile && changeMode !== "mechanical_modularization"
|
|
137
|
+
? "mechanical_modularization"
|
|
138
|
+
: undefined;
|
|
139
|
+
const allowedChangeModes = hasHugeFile
|
|
140
|
+
? ["mechanical_modularization", "emergency_hotfix"]
|
|
141
|
+
: undefined;
|
|
142
|
+
const outputValue = {
|
|
143
|
+
ok: safeToEdit,
|
|
144
|
+
safe_to_edit: safeToEdit,
|
|
145
|
+
change_mode: changeMode,
|
|
146
|
+
recommended_action: recommendedAction,
|
|
147
|
+
required_action: requiredAction,
|
|
148
|
+
allowed_change_modes: allowedChangeModes,
|
|
149
|
+
active_requirement: active ? { id: active.id, title: active.title } : null,
|
|
150
|
+
intent: args.intent,
|
|
151
|
+
files: files.map(normalizeToDbPath),
|
|
152
|
+
requirement_mapping: {
|
|
153
|
+
requirement_items: requirementItems,
|
|
154
|
+
planned_changes: args.planned_changes ?? [],
|
|
155
|
+
},
|
|
156
|
+
scope_contract,
|
|
157
|
+
development_warnings,
|
|
158
|
+
};
|
|
159
|
+
return {
|
|
160
|
+
content: [
|
|
161
|
+
{
|
|
162
|
+
type: "text",
|
|
163
|
+
text: toolCompactOrJson("preflight_change_scope", outputValue, compactPreflightChangeScopeText(outputValue), args.format),
|
|
164
|
+
},
|
|
165
|
+
],
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
export async function handleSyncChangeIntent(rawArgs, context) {
|
|
169
|
+
const db = context.getDb();
|
|
170
|
+
const projectRoot = context.getProjectRoot();
|
|
171
|
+
const normalizeToDbPath = context.normalizeToDbPath;
|
|
172
|
+
const sha256Hex = context.sha256Hex;
|
|
173
|
+
const getFileStateHash = context.getFileStateHash;
|
|
174
|
+
const { insertChangeLogStmt, insertMemoryItemStmt, getActiveRequirementStmt, listPendingChangesStmt, deletePendingChangeStmt, deleteAllPendingChangesStmt, } = context.getStatements();
|
|
175
|
+
const args = SyncChangeIntentArgsSchema.parse(rawArgs);
|
|
176
|
+
flushPendingChangeBuffer();
|
|
177
|
+
const explicitFiles = (args.files ?? args.affected_files ?? []).filter((f) => typeof f === "string" && f.length > 0);
|
|
178
|
+
const active = getActiveRequirementStmt.get();
|
|
179
|
+
if (!active) {
|
|
180
|
+
return {
|
|
181
|
+
isError: true,
|
|
182
|
+
content: [
|
|
183
|
+
{
|
|
184
|
+
type: "text",
|
|
185
|
+
text: toolJson({
|
|
186
|
+
ok: false,
|
|
187
|
+
error: "No active requirement. Call start_requirement({ project_root, title, background }) before syncing change intent.",
|
|
188
|
+
}),
|
|
189
|
+
},
|
|
190
|
+
],
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
const created = [];
|
|
194
|
+
const synced_files = [];
|
|
195
|
+
const insertTx = db.transaction(() => {
|
|
196
|
+
const targets = [];
|
|
197
|
+
if (explicitFiles.length) {
|
|
198
|
+
for (const rawFile of explicitFiles) {
|
|
199
|
+
const dbFilePath = normalizeToDbPath(rawFile);
|
|
200
|
+
targets.push({ rawFile, dbFilePath, event: "manual", source: "args" });
|
|
201
|
+
}
|
|
202
|
+
for (const t of targets) {
|
|
203
|
+
deletePendingChangeStmt.run(t.dbFilePath);
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
else {
|
|
207
|
+
const pendingAll = listPendingChangesStmt.all();
|
|
208
|
+
const merged = mergePendingWithGit(pendingAll, { offset: 0, limit: MAX_PENDING_LIMIT });
|
|
209
|
+
if (merged.page.length) {
|
|
210
|
+
for (const p of merged.page) {
|
|
211
|
+
targets.push({
|
|
212
|
+
rawFile: p.file_path,
|
|
213
|
+
dbFilePath: p.file_path,
|
|
214
|
+
event: p.last_event,
|
|
215
|
+
source: p.source === "git" ? "pending" : "pending",
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
deleteAllPendingChangesStmt.run();
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
targets.push({
|
|
222
|
+
rawFile: "(unspecified)",
|
|
223
|
+
dbFilePath: "(unspecified)",
|
|
224
|
+
event: "manual",
|
|
225
|
+
source: "unspecified",
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
for (const t of targets) {
|
|
230
|
+
const isUnspecified = t.dbFilePath === "(unspecified)";
|
|
231
|
+
const changeInfo = insertChangeLogStmt.run(active.id, t.dbFilePath, args.intent);
|
|
232
|
+
const change_log_id = Number(changeInfo.lastInsertRowid);
|
|
233
|
+
const memoryInfo = insertMemoryItemStmt.run("change_intent", active.title, args.intent, isUnspecified ? null : t.dbFilePath, null, null, active.id, safeJson({
|
|
234
|
+
change_log_id,
|
|
235
|
+
event: t.event,
|
|
236
|
+
source: t.source,
|
|
237
|
+
file_state_hash: isUnspecified ? null : getFileStateHash(t.rawFile),
|
|
238
|
+
}), sha256Hex(args.intent));
|
|
239
|
+
const memory_item_id = Number(memoryInfo.lastInsertRowid);
|
|
240
|
+
synced_files.push({ file_path: t.dbFilePath, event: t.event, source: t.source });
|
|
241
|
+
created.push({
|
|
242
|
+
file_path: t.dbFilePath,
|
|
243
|
+
event: t.event,
|
|
244
|
+
source: t.source,
|
|
245
|
+
change_log_id,
|
|
246
|
+
memory_item_id,
|
|
247
|
+
});
|
|
248
|
+
if (!isUnspecified && t.event !== "unlink") {
|
|
249
|
+
const abs = path.isAbsolute(t.rawFile)
|
|
250
|
+
? t.rawFile
|
|
251
|
+
: path.join(projectRoot, t.rawFile);
|
|
252
|
+
indexFile(abs, "manual");
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
});
|
|
256
|
+
insertTx();
|
|
257
|
+
const development_warnings = [
|
|
258
|
+
...buildDevelopmentWarnings(synced_files, {
|
|
259
|
+
includeUnspecified: synced_files.some((f) => f.file_path === "(unspecified)"),
|
|
260
|
+
}),
|
|
261
|
+
...buildScopeDriftWarnings({
|
|
262
|
+
requirement: active,
|
|
263
|
+
intent: args.intent,
|
|
264
|
+
files: synced_files,
|
|
265
|
+
}),
|
|
266
|
+
];
|
|
267
|
+
logActivity("sync_change_intent", {
|
|
268
|
+
req_id: active.id,
|
|
269
|
+
title: active.title,
|
|
270
|
+
intent_preview: makePreviewText(args.intent, 200),
|
|
271
|
+
files: synced_files.slice(0, 25),
|
|
272
|
+
files_total: synced_files.length,
|
|
273
|
+
development_warnings: development_warnings.length,
|
|
274
|
+
});
|
|
275
|
+
return {
|
|
276
|
+
content: [
|
|
277
|
+
{
|
|
278
|
+
type: "text",
|
|
279
|
+
text: toolJson({
|
|
280
|
+
ok: true,
|
|
281
|
+
linked_to_requirement: { id: active.id, title: active.title },
|
|
282
|
+
synced_files,
|
|
283
|
+
created,
|
|
284
|
+
development_warnings,
|
|
285
|
+
}),
|
|
286
|
+
},
|
|
287
|
+
],
|
|
288
|
+
};
|
|
289
|
+
}
|
|
290
|
+
export async function handleGetPendingChanges(rawArgs, context) {
|
|
291
|
+
const { getActiveRequirementStmt, listPendingChangesStmt } = context.getStatements();
|
|
292
|
+
const args = GetPendingChangesArgsSchema.parse(rawArgs);
|
|
293
|
+
flushPendingChangeBuffer();
|
|
294
|
+
const offset = args.offset;
|
|
295
|
+
const limit = args.limit;
|
|
296
|
+
const pendingDbRows = listPendingChangesStmt.all();
|
|
297
|
+
const mergedPending = mergePendingWithGit(pendingDbRows, { offset, limit });
|
|
298
|
+
const total = mergedPending.total;
|
|
299
|
+
const truncated = mergedPending.truncated;
|
|
300
|
+
const pending = mergedPending.page;
|
|
301
|
+
const activeForScope = getActiveRequirementStmt.get();
|
|
302
|
+
const development_warnings = [
|
|
303
|
+
...buildDevelopmentWarnings(pending),
|
|
304
|
+
...(activeForScope ? buildScopeDriftWarnings({ requirement: activeForScope, files: pending }) : []),
|
|
305
|
+
];
|
|
306
|
+
logActivity("get_pending_changes", {
|
|
307
|
+
total,
|
|
308
|
+
offset,
|
|
309
|
+
limit,
|
|
310
|
+
returned: pending.length,
|
|
311
|
+
truncated,
|
|
312
|
+
development_warnings: development_warnings.length,
|
|
313
|
+
});
|
|
314
|
+
return {
|
|
315
|
+
content: [
|
|
316
|
+
{
|
|
317
|
+
type: "text",
|
|
318
|
+
text: toolJson({ ok: true, total, offset, limit, truncated, pending, development_warnings }),
|
|
319
|
+
},
|
|
320
|
+
],
|
|
321
|
+
};
|
|
322
|
+
}
|
|
323
|
+
export async function handleCompleteRequirement(rawArgs, context) {
|
|
324
|
+
const db = context.getDb();
|
|
325
|
+
const { completeAllActiveRequirementsStmt, getActiveRequirementStmt, completeRequirementByIdStmt } = context.getStatements();
|
|
326
|
+
const args = CompleteRequirementArgsSchema.parse(rawArgs);
|
|
327
|
+
flushPendingChangeBuffer();
|
|
328
|
+
const updated = [];
|
|
329
|
+
if (args.all_active) {
|
|
330
|
+
const activeRows = db.prepare(`SELECT id FROM requirements WHERE status = 'active' ORDER BY created_at DESC, id DESC`).all().slice(0, 200);
|
|
331
|
+
try {
|
|
332
|
+
completeAllActiveRequirementsStmt.run();
|
|
333
|
+
completeAllActiveRequirementMemoryItems();
|
|
334
|
+
}
|
|
335
|
+
catch (err) {
|
|
336
|
+
console.error("[vectormind] complete all active requirements failed:", err);
|
|
337
|
+
}
|
|
338
|
+
for (const r of activeRows)
|
|
339
|
+
updated.push({ id: r.id });
|
|
340
|
+
logActivity("complete_requirement", { all_active: true, completed: updated.map((u) => u.id) });
|
|
341
|
+
return { content: [{ type: "text", text: toolJson({ ok: true, completed: updated }) }] };
|
|
342
|
+
}
|
|
343
|
+
const targetId = args.req_id ?? getActiveRequirementStmt.get()?.id ?? null;
|
|
344
|
+
if (!targetId) {
|
|
345
|
+
return { content: [{ type: "text", text: toolJson({ ok: true, completed: [] }) }] };
|
|
346
|
+
}
|
|
347
|
+
try {
|
|
348
|
+
completeRequirementByIdStmt.run(targetId);
|
|
349
|
+
completeRequirementMemoryItemsByReqId(targetId);
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
console.error("[vectormind] complete requirement failed:", err);
|
|
353
|
+
}
|
|
354
|
+
logActivity("complete_requirement", { req_id: targetId });
|
|
355
|
+
return { content: [{ type: "text", text: toolJson({ ok: true, completed: [{ id: targetId }] }) }] };
|
|
356
|
+
}
|
|
357
|
+
//# sourceMappingURL=requirements.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"requirements.js","sourceRoot":"","sources":["../../src/tool-handlers/requirements.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { Server } from "@modelcontextprotocol/sdk/server/index.js";
|
|
2
|
+
import type { ToolHandlerContext } from "./tool-handlers/context.js";
|
|
3
|
+
export type { ToolHandlerContext } from "./tool-handlers/context.js";
|
|
4
|
+
export declare function registerToolHandlers(server: Server, context: ToolHandlerContext): void;
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import { CallToolRequestSchema } from "@modelcontextprotocol/sdk/types.js";
|
|
2
|
+
import { handleStartRequirement, handlePreflightChangeScope, handleSyncChangeIntent, handleGetPendingChanges, handleCompleteRequirement } from "./tool-handlers/requirements.js";
|
|
3
|
+
import { handlePruneIndex, handleMaintainMemory } from "./tool-handlers/maintenance.js";
|
|
4
|
+
import { handlePlanLargeFileSplit, handleRecordLargeFileSplit } from "./tool-handlers/large-files.js";
|
|
5
|
+
import { handleBootstrapContext, handleGetBrainDump, handleReadMemoryItem, handleSemanticSearch } from "./tool-handlers/memory.js";
|
|
6
|
+
import { handleGrep, handleListProjectFiles, handleReadFileText, handleReadCodexTextFile, handleReadFileLines, handleQueryCodebase } from "./tool-handlers/files.js";
|
|
7
|
+
import { handleUpsertProjectSummary, handleAddNote, handleUpsertDecision, handleSupersedeMemory, handleUpsertConvention } from "./tool-handlers/notes-decisions.js";
|
|
8
|
+
import { handleGetActivityLog, handleGetActivitySummary, handleClearActivityLog, handleDetectRtk, handleInstallRtk, handleGetTokenSavings } from "./tool-handlers/diagnostics.js";
|
|
9
|
+
import { handleCreateCheckpoint, handleListCheckpoints, handleMemoryTimeline, handleRestoreCheckpointContext } from "./tool-handlers/context-recovery.js";
|
|
10
|
+
import { handleAnalyzeMemoryConflicts, handleCompareCheckpointContext, handleMemoryQualityReport } from "./tool-handlers/memory-diagnostics.js";
|
|
11
|
+
import { oneLine, toolJson } from "./tool-output.js";
|
|
12
|
+
const TOOL_HANDLERS = {
|
|
13
|
+
start_requirement: handleStartRequirement,
|
|
14
|
+
prune_index: handlePruneIndex,
|
|
15
|
+
maintain_memory: handleMaintainMemory,
|
|
16
|
+
preflight_change_scope: handlePreflightChangeScope,
|
|
17
|
+
plan_large_file_split: handlePlanLargeFileSplit,
|
|
18
|
+
record_large_file_split: handleRecordLargeFileSplit,
|
|
19
|
+
sync_change_intent: handleSyncChangeIntent,
|
|
20
|
+
bootstrap_context: handleBootstrapContext,
|
|
21
|
+
get_brain_dump: handleGetBrainDump,
|
|
22
|
+
get_pending_changes: handleGetPendingChanges,
|
|
23
|
+
complete_requirement: handleCompleteRequirement,
|
|
24
|
+
read_memory_item: handleReadMemoryItem,
|
|
25
|
+
get_activity_log: handleGetActivityLog,
|
|
26
|
+
get_activity_summary: handleGetActivitySummary,
|
|
27
|
+
clear_activity_log: handleClearActivityLog,
|
|
28
|
+
detect_rtk: handleDetectRtk,
|
|
29
|
+
install_rtk: handleInstallRtk,
|
|
30
|
+
get_token_savings: handleGetTokenSavings,
|
|
31
|
+
grep: handleGrep,
|
|
32
|
+
list_project_files: handleListProjectFiles,
|
|
33
|
+
read_file_text: handleReadFileText,
|
|
34
|
+
read_codex_text_file: handleReadCodexTextFile,
|
|
35
|
+
read_file_lines: handleReadFileLines,
|
|
36
|
+
query_codebase: handleQueryCodebase,
|
|
37
|
+
upsert_project_summary: handleUpsertProjectSummary,
|
|
38
|
+
add_note: handleAddNote,
|
|
39
|
+
upsert_decision: handleUpsertDecision,
|
|
40
|
+
supersede_memory: handleSupersedeMemory,
|
|
41
|
+
upsert_convention: handleUpsertConvention,
|
|
42
|
+
semantic_search: handleSemanticSearch,
|
|
43
|
+
memory_timeline: handleMemoryTimeline,
|
|
44
|
+
create_checkpoint: handleCreateCheckpoint,
|
|
45
|
+
list_checkpoints: handleListCheckpoints,
|
|
46
|
+
restore_checkpoint_context: handleRestoreCheckpointContext,
|
|
47
|
+
analyze_memory_conflicts: handleAnalyzeMemoryConflicts,
|
|
48
|
+
memory_quality_report: handleMemoryQualityReport,
|
|
49
|
+
compare_checkpoint_context: handleCompareCheckpointContext,
|
|
50
|
+
};
|
|
51
|
+
function attachProjectContextAdvisory(result, advisory) {
|
|
52
|
+
if (!advisory)
|
|
53
|
+
return result;
|
|
54
|
+
const content = result.content?.map((item, index) => {
|
|
55
|
+
if (index !== 0 || item.type !== "text" || typeof item.text !== "string")
|
|
56
|
+
return item;
|
|
57
|
+
const text = item.text.trim();
|
|
58
|
+
if (text.startsWith("{") || text.startsWith("[")) {
|
|
59
|
+
try {
|
|
60
|
+
const parsed = JSON.parse(item.text);
|
|
61
|
+
return {
|
|
62
|
+
...item,
|
|
63
|
+
text: toolJson({
|
|
64
|
+
...parsed,
|
|
65
|
+
project_context_advisory: advisory,
|
|
66
|
+
}),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
catch {
|
|
70
|
+
// Fall back to compact-text injection below.
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const advisoryLine = `project_context_advisory ${advisory.code}: external_reference=true read_only_reference=true previous="${oneLine(advisory.previous_project_root, 90)}" current="${oneLine(advisory.current_project_root, 90)}"`;
|
|
74
|
+
return {
|
|
75
|
+
...item,
|
|
76
|
+
text: `${advisoryLine}\n${item.text}`,
|
|
77
|
+
};
|
|
78
|
+
});
|
|
79
|
+
return { ...result, content };
|
|
80
|
+
}
|
|
81
|
+
export function registerToolHandlers(server, context) {
|
|
82
|
+
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
83
|
+
const toolName = request.params.name;
|
|
84
|
+
const rawArgs = (request.params.arguments ?? {});
|
|
85
|
+
try {
|
|
86
|
+
await context.ensureInitializedForArgs(rawArgs);
|
|
87
|
+
const handler = TOOL_HANDLERS[toolName];
|
|
88
|
+
if (!handler) {
|
|
89
|
+
return attachProjectContextAdvisory({
|
|
90
|
+
isError: true,
|
|
91
|
+
content: [{ type: "text", text: `Unknown tool: ${toolName}` }],
|
|
92
|
+
}, context.consumeProjectContextAdvisory());
|
|
93
|
+
}
|
|
94
|
+
const result = await handler(rawArgs, context);
|
|
95
|
+
return attachProjectContextAdvisory(result, context.consumeProjectContextAdvisory());
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
return attachProjectContextAdvisory({
|
|
99
|
+
isError: true,
|
|
100
|
+
content: [{ type: "text", text: String(err) }],
|
|
101
|
+
}, context.consumeProjectContextAdvisory());
|
|
102
|
+
}
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
//# sourceMappingURL=tool-handlers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool-handlers.js","sourceRoot":"","sources":["../src/tool-handlers.ts"],"names":[],"mappings":"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"}
|