@coreyuan/vector-mind 1.0.48 → 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 +146 -394
- 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 +7 -2
- package/dist/builtin-conventions.js.map +1 -1
- package/dist/builtin-instructions.d.ts +1 -1
- package/dist/builtin-instructions.js +1 -1
- package/dist/builtin-instructions.js.map +1 -1
- package/dist/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 -6884
- 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,589 @@
|
|
|
1
|
+
import fs from "node:fs";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { DEVELOPMENT_BLOCK_FILE_LINES, DEVELOPMENT_HUGE_FILE_LINES, DEVELOPMENT_WARN_FILE_BYTES, DEVELOPMENT_WARN_FILE_LINES, DEVELOPMENT_WARN_PENDING_FILES, } from "./config.js";
|
|
4
|
+
let devWarningContext = null;
|
|
5
|
+
export function configureDevelopmentWarnings(context) {
|
|
6
|
+
devWarningContext = context;
|
|
7
|
+
}
|
|
8
|
+
function requireDevelopmentWarningsContext() {
|
|
9
|
+
if (!devWarningContext)
|
|
10
|
+
throw new Error("[VectorMind] development warning context is not configured");
|
|
11
|
+
return devWarningContext;
|
|
12
|
+
}
|
|
13
|
+
function getProjectRoot() {
|
|
14
|
+
return requireDevelopmentWarningsContext().getProjectRoot();
|
|
15
|
+
}
|
|
16
|
+
function normalizeToDbPath(inputPath) {
|
|
17
|
+
return requireDevelopmentWarningsContext().normalizeToDbPath(inputPath);
|
|
18
|
+
}
|
|
19
|
+
function escapeRegExp(literal) {
|
|
20
|
+
return literal.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&");
|
|
21
|
+
}
|
|
22
|
+
export function isLikelySourceImplementationFile(filePath) {
|
|
23
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
24
|
+
return new Set([
|
|
25
|
+
".ts",
|
|
26
|
+
".tsx",
|
|
27
|
+
".js",
|
|
28
|
+
".jsx",
|
|
29
|
+
".mjs",
|
|
30
|
+
".cjs",
|
|
31
|
+
".py",
|
|
32
|
+
".go",
|
|
33
|
+
".rs",
|
|
34
|
+
".java",
|
|
35
|
+
".kt",
|
|
36
|
+
".cs",
|
|
37
|
+
".c",
|
|
38
|
+
".cc",
|
|
39
|
+
".cpp",
|
|
40
|
+
".h",
|
|
41
|
+
".hpp",
|
|
42
|
+
".vue",
|
|
43
|
+
".svelte",
|
|
44
|
+
]).has(ext);
|
|
45
|
+
}
|
|
46
|
+
export function countFileLinesBounded(absPath, maxBytes) {
|
|
47
|
+
let stat;
|
|
48
|
+
try {
|
|
49
|
+
stat = fs.statSync(absPath);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
if (!stat.isFile())
|
|
55
|
+
return null;
|
|
56
|
+
const bytesToRead = Math.min(stat.size, maxBytes);
|
|
57
|
+
const fd = fs.openSync(absPath, "r");
|
|
58
|
+
try {
|
|
59
|
+
const buffer = Buffer.alloc(bytesToRead);
|
|
60
|
+
const read = fs.readSync(fd, buffer, 0, bytesToRead, 0);
|
|
61
|
+
let lines = read > 0 ? 1 : 0;
|
|
62
|
+
for (let i = 0; i < read; i++) {
|
|
63
|
+
if (buffer[i] === 10)
|
|
64
|
+
lines += 1;
|
|
65
|
+
}
|
|
66
|
+
return { lines, truncated: stat.size > bytesToRead };
|
|
67
|
+
}
|
|
68
|
+
finally {
|
|
69
|
+
fs.closeSync(fd);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
function isPathInsideProjectRoot(absPath) {
|
|
73
|
+
const root = path.resolve(getProjectRoot());
|
|
74
|
+
const rel = path.relative(root, path.resolve(absPath));
|
|
75
|
+
return rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
|
|
76
|
+
}
|
|
77
|
+
function checkPathScope(inputPath) {
|
|
78
|
+
const normalizedInput = inputPath.trim() || ".";
|
|
79
|
+
const absPath = path.resolve(path.isAbsolute(normalizedInput) ? normalizedInput : path.join(getProjectRoot(), normalizedInput));
|
|
80
|
+
return {
|
|
81
|
+
input_path: inputPath,
|
|
82
|
+
abs_path: absPath,
|
|
83
|
+
in_project: isPathInsideProjectRoot(absPath),
|
|
84
|
+
project_root: path.resolve(getProjectRoot()),
|
|
85
|
+
};
|
|
86
|
+
}
|
|
87
|
+
export function buildCrossProjectPathWarnings(paths) {
|
|
88
|
+
const checks = (paths ?? []).map((p) => checkPathScope(p)).filter((c) => !c.in_project);
|
|
89
|
+
if (!checks.length)
|
|
90
|
+
return [];
|
|
91
|
+
return [
|
|
92
|
+
{
|
|
93
|
+
code: "cross_project_path",
|
|
94
|
+
severity: "warning",
|
|
95
|
+
message: "A path points outside the current project_root. Switch project_root intentionally before reading/searching another repo; do not mix unrelated project context into the current requirement.",
|
|
96
|
+
files: checks.slice(0, 10).map((c) => c.input_path),
|
|
97
|
+
details: {
|
|
98
|
+
project_root: path.resolve(getProjectRoot()),
|
|
99
|
+
paths: checks.slice(0, 10),
|
|
100
|
+
total_paths: checks.length,
|
|
101
|
+
},
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
}
|
|
105
|
+
function buildLargeImplementationFileWarning(args) {
|
|
106
|
+
const linesValue = args.lineCountTruncated ? `${args.lineCount}+` : args.lineCount;
|
|
107
|
+
if (args.lineCount >= DEVELOPMENT_HUGE_FILE_LINES) {
|
|
108
|
+
return {
|
|
109
|
+
code: "huge_file_modularization_required",
|
|
110
|
+
severity: "blocker",
|
|
111
|
+
message: "This implementation file is huge. Before any normal feature work, perform mechanical modularization: move whole functions/types/impl blocks into real, clearly named modules/directories, avoid *.generated.* or *.parts files, preserve behavior, then run format/build/tests.",
|
|
112
|
+
files: [args.filePath],
|
|
113
|
+
details: {
|
|
114
|
+
lines: linesValue,
|
|
115
|
+
bytes: args.bytes,
|
|
116
|
+
warn_lines: DEVELOPMENT_WARN_FILE_LINES,
|
|
117
|
+
block_lines: DEVELOPMENT_BLOCK_FILE_LINES,
|
|
118
|
+
huge_lines: DEVELOPMENT_HUGE_FILE_LINES,
|
|
119
|
+
required_action: "mechanical_modularization",
|
|
120
|
+
allowed_change_modes: ["mechanical_modularization", "emergency_hotfix"],
|
|
121
|
+
forbidden_file_patterns: ["*.generated.*", "*.parts", "*.rs.parts", "*_part*"],
|
|
122
|
+
mechanical_rules: [
|
|
123
|
+
"move whole declarations only",
|
|
124
|
+
"use real module names and clear directory boundaries",
|
|
125
|
+
"preserve behavior and public semantics",
|
|
126
|
+
"only add necessary mod/use/pub(crate)/re-export glue",
|
|
127
|
+
"run formatter, build, and tests after each phase",
|
|
128
|
+
],
|
|
129
|
+
reading: !!args.reading,
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
return {
|
|
134
|
+
code: args.code,
|
|
135
|
+
severity: args.code === "large_file" || (args.code === "large_file_read" && args.lineCount < DEVELOPMENT_BLOCK_FILE_LINES)
|
|
136
|
+
? "warning"
|
|
137
|
+
: "blocker",
|
|
138
|
+
message: args.code === "large_file"
|
|
139
|
+
? "This implementation file is getting large. Prefer extracting focused modules instead of continuing to pile unrelated responsibilities into it."
|
|
140
|
+
: args.reading
|
|
141
|
+
? "You are reading a very large implementation file. Do not keep patching new feature code into it; identify a narrow function and split new behavior into focused modules unless this task is explicitly a planned extraction."
|
|
142
|
+
: "This implementation file is already very large. Do not add new feature code here by default; split into a focused module/service/component and keep this file as a thin entry.",
|
|
143
|
+
files: [args.filePath],
|
|
144
|
+
details: {
|
|
145
|
+
lines: linesValue,
|
|
146
|
+
bytes: args.bytes,
|
|
147
|
+
warn_lines: DEVELOPMENT_WARN_FILE_LINES,
|
|
148
|
+
block_lines: DEVELOPMENT_BLOCK_FILE_LINES,
|
|
149
|
+
huge_lines: DEVELOPMENT_HUGE_FILE_LINES,
|
|
150
|
+
},
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
export function buildFileReadDevelopmentWarnings(filePath, absPath, stat) {
|
|
154
|
+
const warnings = [];
|
|
155
|
+
if (!isPathInsideProjectRoot(absPath)) {
|
|
156
|
+
warnings.push(...buildCrossProjectPathWarnings([filePath]));
|
|
157
|
+
return warnings;
|
|
158
|
+
}
|
|
159
|
+
if (!isLikelySourceImplementationFile(filePath))
|
|
160
|
+
return warnings;
|
|
161
|
+
let st = stat;
|
|
162
|
+
try {
|
|
163
|
+
st ??= fs.statSync(absPath);
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
return warnings;
|
|
167
|
+
}
|
|
168
|
+
if (!st.isFile())
|
|
169
|
+
return warnings;
|
|
170
|
+
const lineInfo = countFileLinesBounded(absPath, 2_000_000);
|
|
171
|
+
const lineCount = lineInfo?.lines ?? 0;
|
|
172
|
+
const tooManyLines = lineCount >= DEVELOPMENT_BLOCK_FILE_LINES;
|
|
173
|
+
const warnLines = lineCount >= DEVELOPMENT_WARN_FILE_LINES;
|
|
174
|
+
const warnBytes = st.size >= DEVELOPMENT_WARN_FILE_BYTES;
|
|
175
|
+
if (!tooManyLines && !warnLines && !warnBytes)
|
|
176
|
+
return warnings;
|
|
177
|
+
warnings.push(buildLargeImplementationFileWarning({
|
|
178
|
+
code: "large_file_read",
|
|
179
|
+
filePath,
|
|
180
|
+
lineCount,
|
|
181
|
+
lineCountTruncated: lineInfo?.truncated,
|
|
182
|
+
bytes: st.size,
|
|
183
|
+
reading: true,
|
|
184
|
+
}));
|
|
185
|
+
return warnings;
|
|
186
|
+
}
|
|
187
|
+
export function buildMatchedFileDevelopmentWarnings(filePaths) {
|
|
188
|
+
const seen = new Set();
|
|
189
|
+
const warnings = [];
|
|
190
|
+
for (const fp of filePaths) {
|
|
191
|
+
if (!fp || seen.has(fp))
|
|
192
|
+
continue;
|
|
193
|
+
seen.add(fp);
|
|
194
|
+
const abs = path.isAbsolute(fp) ? path.resolve(fp) : path.join(getProjectRoot(), fp);
|
|
195
|
+
warnings.push(...buildFileReadDevelopmentWarnings(normalizeToDbPath(fp), abs));
|
|
196
|
+
if (warnings.length >= 8)
|
|
197
|
+
break;
|
|
198
|
+
}
|
|
199
|
+
return warnings;
|
|
200
|
+
}
|
|
201
|
+
export function buildRequirementStartWarnings(args) {
|
|
202
|
+
const warnings = [];
|
|
203
|
+
const activeReqs = requireDevelopmentWarningsContext().listActiveRequirements(10);
|
|
204
|
+
if (!args.close_previous && activeReqs.length > 0) {
|
|
205
|
+
warnings.push({
|
|
206
|
+
code: "multiple_active_requirements",
|
|
207
|
+
severity: "warning",
|
|
208
|
+
message: "Starting a requirement without closing previous active requirements can mix unrelated context. Only keep multiple active requirements when the user explicitly asked for parallel work.",
|
|
209
|
+
details: {
|
|
210
|
+
active_requirements: activeReqs.slice(0, 5).map((r) => ({ id: r.id, title: r.title, status: r.status })),
|
|
211
|
+
},
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
const text = `${args.title}\n${args.background}`.toLowerCase();
|
|
215
|
+
const broadTerms = [
|
|
216
|
+
"顺便",
|
|
217
|
+
"一起",
|
|
218
|
+
"所有",
|
|
219
|
+
"全部",
|
|
220
|
+
"整体",
|
|
221
|
+
"重构",
|
|
222
|
+
"统一",
|
|
223
|
+
"优化一下",
|
|
224
|
+
"顺手",
|
|
225
|
+
"相关的",
|
|
226
|
+
"all ",
|
|
227
|
+
"everything",
|
|
228
|
+
"refactor",
|
|
229
|
+
"cleanup",
|
|
230
|
+
"clean up",
|
|
231
|
+
];
|
|
232
|
+
const matched = broadTerms.filter((term) => text.includes(term));
|
|
233
|
+
if (matched.length >= 2 || text.length > 1800) {
|
|
234
|
+
warnings.push({
|
|
235
|
+
code: "broad_requirement_scope",
|
|
236
|
+
severity: "warning",
|
|
237
|
+
message: "The requirement wording looks broad. Treat the current user request as the only boundary; do not add extra workflows, fields, pages, interfaces, or touch completed related features unless explicitly required.",
|
|
238
|
+
details: { matched_terms: matched.slice(0, 10), text_length: text.length },
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
return warnings;
|
|
242
|
+
}
|
|
243
|
+
function normalizeScopeTerms(values) {
|
|
244
|
+
return Array.from(new Set((values ?? []).map((v) => v.trim()).filter(Boolean)));
|
|
245
|
+
}
|
|
246
|
+
export function normalizeRequirementItems(values) {
|
|
247
|
+
return (values ?? [])
|
|
248
|
+
.map((text, index) => ({ id: String(index + 1), text: text.trim() }))
|
|
249
|
+
.filter((item) => item.text.length > 0);
|
|
250
|
+
}
|
|
251
|
+
export function getRequirementItems(reqId) {
|
|
252
|
+
const memId = requireDevelopmentWarningsContext().getRequirementMemoryItemId(reqId)?.id;
|
|
253
|
+
if (memId == null)
|
|
254
|
+
return [];
|
|
255
|
+
const row = requireDevelopmentWarningsContext().getMemoryItemById(memId);
|
|
256
|
+
const meta = requireDevelopmentWarningsContext().parseMetadataJson(row?.metadata_json);
|
|
257
|
+
const raw = meta.requirement_items;
|
|
258
|
+
if (!Array.isArray(raw))
|
|
259
|
+
return [];
|
|
260
|
+
return raw
|
|
261
|
+
.map((item, index) => {
|
|
262
|
+
if (typeof item === "string")
|
|
263
|
+
return { id: String(index + 1), text: item.trim() };
|
|
264
|
+
if (!item || typeof item !== "object")
|
|
265
|
+
return null;
|
|
266
|
+
const obj = item;
|
|
267
|
+
const text = typeof obj.text === "string" ? obj.text.trim() : "";
|
|
268
|
+
const id = typeof obj.id === "string" && obj.id.trim() ? obj.id.trim() : String(index + 1);
|
|
269
|
+
return text ? { id, text } : null;
|
|
270
|
+
})
|
|
271
|
+
.filter((item) => !!item);
|
|
272
|
+
}
|
|
273
|
+
function normalizeRequirementRef(value) {
|
|
274
|
+
return value.trim().replace(/^#+/, "").toLowerCase();
|
|
275
|
+
}
|
|
276
|
+
function plannedChangeIsSupporting(change) {
|
|
277
|
+
if (change.supporting_change)
|
|
278
|
+
return true;
|
|
279
|
+
return new Set(["supporting_change", "mechanical_modularization", "validation", "formatting", "test", "build_fix"]).has(String(change.change_type ?? "").toLowerCase());
|
|
280
|
+
}
|
|
281
|
+
export function buildRequirementMappingWarnings(args) {
|
|
282
|
+
const items = args.requirement_items ?? [];
|
|
283
|
+
const planned = args.planned_changes ?? [];
|
|
284
|
+
const warnings = [];
|
|
285
|
+
if (!items.length && !planned.length)
|
|
286
|
+
return warnings;
|
|
287
|
+
if (args.change_mode === "mechanical_modularization" && planned.every(plannedChangeIsSupporting)) {
|
|
288
|
+
return warnings;
|
|
289
|
+
}
|
|
290
|
+
if (items.length && args.files.length > 0 && planned.length === 0) {
|
|
291
|
+
warnings.push({
|
|
292
|
+
code: "requirement_mapping_missing",
|
|
293
|
+
severity: "blocker",
|
|
294
|
+
message: "This requirement has explicit requirement_items, but the planned file changes were not mapped to those items. Add planned_changes with requirement_refs, or mark purely mechanical/test/build/formatting work as supporting_change.",
|
|
295
|
+
files: args.files.map((f) => normalizeToDbPath(f.file_path)).slice(0, 12),
|
|
296
|
+
details: {
|
|
297
|
+
requirement_id: args.requirement?.id ?? null,
|
|
298
|
+
requirement_title: args.requirement?.title ?? null,
|
|
299
|
+
requirement_items: items.slice(0, 20),
|
|
300
|
+
expected_planned_changes: true,
|
|
301
|
+
},
|
|
302
|
+
});
|
|
303
|
+
return warnings;
|
|
304
|
+
}
|
|
305
|
+
if (!items.length && planned.length > 0) {
|
|
306
|
+
warnings.push({
|
|
307
|
+
code: "requirement_mapping_missing",
|
|
308
|
+
severity: "info",
|
|
309
|
+
message: "planned_changes were provided, but no requirement_items are available to verify them. This is advisory evidence only; if the user request has explicit bullets, pass requirement_items to start_requirement or preflight_change_scope.",
|
|
310
|
+
files: planned.map((p) => p.file).filter((v) => typeof v === "string").slice(0, 12),
|
|
311
|
+
details: {
|
|
312
|
+
requirement_id: args.requirement?.id ?? null,
|
|
313
|
+
requirement_title: args.requirement?.title ?? null,
|
|
314
|
+
},
|
|
315
|
+
});
|
|
316
|
+
return warnings;
|
|
317
|
+
}
|
|
318
|
+
const validRefs = new Set();
|
|
319
|
+
for (const item of items) {
|
|
320
|
+
validRefs.add(normalizeRequirementRef(item.id));
|
|
321
|
+
validRefs.add(normalizeRequirementRef(`#${item.id}`));
|
|
322
|
+
validRefs.add(normalizeRequirementRef(item.text));
|
|
323
|
+
}
|
|
324
|
+
const missing = planned.filter((change) => {
|
|
325
|
+
if (plannedChangeIsSupporting(change))
|
|
326
|
+
return false;
|
|
327
|
+
const refs = change.requirement_refs ?? [];
|
|
328
|
+
if (!refs.length)
|
|
329
|
+
return true;
|
|
330
|
+
return refs.every((ref) => !validRefs.has(normalizeRequirementRef(ref)));
|
|
331
|
+
});
|
|
332
|
+
const plannedFiles = new Set(planned
|
|
333
|
+
.map((change) => change.file)
|
|
334
|
+
.filter((file) => typeof file === "string" && file.trim().length > 0)
|
|
335
|
+
.map((file) => normalizeToDbPath(file)));
|
|
336
|
+
const unmappedFiles = args.files
|
|
337
|
+
.map((f) => normalizeToDbPath(f.file_path))
|
|
338
|
+
.filter((filePath) => filePath !== "(unspecified)" && !plannedFiles.has(filePath));
|
|
339
|
+
if (missing.length || unmappedFiles.length) {
|
|
340
|
+
warnings.push({
|
|
341
|
+
code: "requirement_mapping_missing",
|
|
342
|
+
severity: "blocker",
|
|
343
|
+
message: "One or more planned changes or target files do not map to any explicit user requirement item. Do not implement unrelated or self-expanded behavior; map every target file/change to a requirement item, mark purely mechanical/test/build/formatting support as supporting_change, or ask the user to expand the requirement.",
|
|
344
|
+
files: Array.from(new Set([
|
|
345
|
+
...missing.map((m) => m.file).filter((v) => typeof v === "string"),
|
|
346
|
+
...unmappedFiles,
|
|
347
|
+
])).slice(0, 12),
|
|
348
|
+
details: {
|
|
349
|
+
requirement_id: args.requirement?.id ?? null,
|
|
350
|
+
requirement_title: args.requirement?.title ?? null,
|
|
351
|
+
requirement_items: items.slice(0, 20),
|
|
352
|
+
missing: missing.slice(0, 20),
|
|
353
|
+
unmapped_files: unmappedFiles.slice(0, 20),
|
|
354
|
+
},
|
|
355
|
+
});
|
|
356
|
+
}
|
|
357
|
+
return warnings;
|
|
358
|
+
}
|
|
359
|
+
export function buildRequirementScopeContract(args) {
|
|
360
|
+
const allowTerms = normalizeScopeTerms(args.scope_allow);
|
|
361
|
+
const denyTerms = normalizeScopeTerms(args.scope_deny);
|
|
362
|
+
const allowedPaths = normalizeScopeTerms(args.allowed_paths).map(normalizeToDbPath);
|
|
363
|
+
const deniedPaths = normalizeScopeTerms(args.denied_paths).map((p) => p.replace(/\\/g, "/"));
|
|
364
|
+
return {
|
|
365
|
+
allow_terms: allowTerms,
|
|
366
|
+
deny_terms: Array.from(new Set(denyTerms)),
|
|
367
|
+
allowed_paths: Array.from(new Set(allowedPaths)),
|
|
368
|
+
denied_paths: Array.from(new Set(deniedPaths)),
|
|
369
|
+
inferred_from: [],
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
export function getRequirementScopeContract(reqId) {
|
|
373
|
+
const memId = requireDevelopmentWarningsContext().getRequirementMemoryItemId(reqId)?.id;
|
|
374
|
+
if (memId == null)
|
|
375
|
+
return null;
|
|
376
|
+
const row = requireDevelopmentWarningsContext().getMemoryItemById(memId);
|
|
377
|
+
const meta = requireDevelopmentWarningsContext().parseMetadataJson(row?.metadata_json);
|
|
378
|
+
const raw = meta.scope_contract;
|
|
379
|
+
if (!raw || typeof raw !== "object" || Array.isArray(raw))
|
|
380
|
+
return null;
|
|
381
|
+
const obj = raw;
|
|
382
|
+
return {
|
|
383
|
+
allow_terms: Array.isArray(obj.allow_terms) ? obj.allow_terms.filter((v) => typeof v === "string") : [],
|
|
384
|
+
deny_terms: Array.isArray(obj.deny_terms) ? obj.deny_terms.filter((v) => typeof v === "string") : [],
|
|
385
|
+
allowed_paths: Array.isArray(obj.allowed_paths) ? obj.allowed_paths.filter((v) => typeof v === "string") : [],
|
|
386
|
+
denied_paths: Array.isArray(obj.denied_paths) ? obj.denied_paths.filter((v) => typeof v === "string") : [],
|
|
387
|
+
inferred_from: Array.isArray(obj.inferred_from) ? obj.inferred_from.filter((v) => typeof v === "string") : [],
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
function wildcardToRegex(pattern) {
|
|
391
|
+
const source = escapeRegExp(pattern).replace(/\\\*/g, ".*");
|
|
392
|
+
return new RegExp(source, "i");
|
|
393
|
+
}
|
|
394
|
+
function pathMatchesAnyPattern(filePath, patterns) {
|
|
395
|
+
const normalized = filePath.replace(/\\/g, "/");
|
|
396
|
+
return patterns.filter((p) => wildcardToRegex(p.replace(/\\/g, "/")).test(normalized));
|
|
397
|
+
}
|
|
398
|
+
function fileContentHasDeniedTerms(filePath, terms) {
|
|
399
|
+
if (!terms.length || filePath === "(unspecified)")
|
|
400
|
+
return [];
|
|
401
|
+
const abs = path.isAbsolute(filePath) ? path.resolve(filePath) : path.join(getProjectRoot(), filePath);
|
|
402
|
+
let st;
|
|
403
|
+
try {
|
|
404
|
+
st = fs.statSync(abs);
|
|
405
|
+
}
|
|
406
|
+
catch {
|
|
407
|
+
return [];
|
|
408
|
+
}
|
|
409
|
+
if (!st.isFile() || st.size > 2_000_000)
|
|
410
|
+
return [];
|
|
411
|
+
let content = "";
|
|
412
|
+
try {
|
|
413
|
+
content = fs.readFileSync(abs, "utf8");
|
|
414
|
+
}
|
|
415
|
+
catch {
|
|
416
|
+
return [];
|
|
417
|
+
}
|
|
418
|
+
const lower = `${filePath}\n${content.slice(0, 250_000)}`.toLowerCase();
|
|
419
|
+
return terms.filter((term) => lower.includes(term.toLowerCase()));
|
|
420
|
+
}
|
|
421
|
+
export function mergeScopeContracts(base, extra) {
|
|
422
|
+
if (!base && !extra)
|
|
423
|
+
return null;
|
|
424
|
+
return {
|
|
425
|
+
allow_terms: Array.from(new Set([...(base?.allow_terms ?? []), ...(extra?.allow_terms ?? [])])),
|
|
426
|
+
deny_terms: Array.from(new Set([...(base?.deny_terms ?? []), ...(extra?.deny_terms ?? [])])),
|
|
427
|
+
allowed_paths: Array.from(new Set([...(base?.allowed_paths ?? []), ...(extra?.allowed_paths ?? [])])),
|
|
428
|
+
denied_paths: Array.from(new Set([...(base?.denied_paths ?? []), ...(extra?.denied_paths ?? [])])),
|
|
429
|
+
inferred_from: Array.from(new Set([...(base?.inferred_from ?? []), ...(extra?.inferred_from ?? [])])),
|
|
430
|
+
};
|
|
431
|
+
}
|
|
432
|
+
export function buildScopeDriftWarnings(args) {
|
|
433
|
+
const requirementContract = args.requirement ? getRequirementScopeContract(args.requirement.id) : null;
|
|
434
|
+
const contract = mergeScopeContracts(requirementContract, args.contract);
|
|
435
|
+
const hasScopeRules = !!contract && (contract.allow_terms.length > 0 ||
|
|
436
|
+
contract.deny_terms.length > 0 ||
|
|
437
|
+
contract.allowed_paths.length > 0 ||
|
|
438
|
+
contract.denied_paths.length > 0);
|
|
439
|
+
const warnings = [];
|
|
440
|
+
if (!contract || !hasScopeRules) {
|
|
441
|
+
if (args.includeMissingContractHint && args.files.length > 0) {
|
|
442
|
+
warnings.push({
|
|
443
|
+
code: "scope_contract_missing",
|
|
444
|
+
severity: "warning",
|
|
445
|
+
message: "No explicit scope allow/deny contract is set for this requirement, so the planned files cannot be proven in-scope before editing. Define scope_allow/scope_deny or allowed_paths/denied_paths before editing.",
|
|
446
|
+
files: args.files.map((f) => normalizeToDbPath(f.file_path)).slice(0, 12),
|
|
447
|
+
details: {
|
|
448
|
+
requirement_id: args.requirement?.id ?? null,
|
|
449
|
+
requirement_title: args.requirement?.title ?? null,
|
|
450
|
+
},
|
|
451
|
+
});
|
|
452
|
+
}
|
|
453
|
+
return warnings;
|
|
454
|
+
}
|
|
455
|
+
const allowTerms = contract.allow_terms;
|
|
456
|
+
const denyTerms = contract.deny_terms;
|
|
457
|
+
const allowedPaths = contract.allowed_paths;
|
|
458
|
+
const deniedPaths = contract.denied_paths;
|
|
459
|
+
const intentText = args.intent ?? "";
|
|
460
|
+
const intentDenied = denyTerms.filter((term) => intentText.toLowerCase().includes(term.toLowerCase()));
|
|
461
|
+
const suspicious = [];
|
|
462
|
+
for (const f of args.files) {
|
|
463
|
+
const fp = normalizeToDbPath(f.file_path);
|
|
464
|
+
if (fp === "(unspecified)")
|
|
465
|
+
continue;
|
|
466
|
+
const matchedDeniedPaths = pathMatchesAnyPattern(fp, deniedPaths);
|
|
467
|
+
const matchedDeniedTerms = [
|
|
468
|
+
...denyTerms.filter((term) => fp.toLowerCase().includes(term.toLowerCase())),
|
|
469
|
+
...fileContentHasDeniedTerms(fp, denyTerms),
|
|
470
|
+
];
|
|
471
|
+
const isExplicitlyAllowed = pathMatchesAnyPattern(fp, allowedPaths).length > 0 ||
|
|
472
|
+
allowTerms.some((term) => fp.toLowerCase().includes(term.toLowerCase()));
|
|
473
|
+
const violatesAllowedPaths = allowedPaths.length > 0 && pathMatchesAnyPattern(fp, allowedPaths).length === 0;
|
|
474
|
+
if ((matchedDeniedPaths.length || matchedDeniedTerms.length || intentDenied.length || violatesAllowedPaths) &&
|
|
475
|
+
!isExplicitlyAllowed) {
|
|
476
|
+
suspicious.push({
|
|
477
|
+
file_path: fp,
|
|
478
|
+
matched_terms: Array.from(new Set([...matchedDeniedTerms, ...intentDenied])).slice(0, 12),
|
|
479
|
+
matched_paths: [
|
|
480
|
+
...matchedDeniedPaths.slice(0, 12),
|
|
481
|
+
...(violatesAllowedPaths ? [`outside allowed_paths: ${allowedPaths.slice(0, 5).join(", ")}`] : []),
|
|
482
|
+
],
|
|
483
|
+
});
|
|
484
|
+
}
|
|
485
|
+
}
|
|
486
|
+
if (suspicious.length) {
|
|
487
|
+
warnings.push({
|
|
488
|
+
code: "scope_drift",
|
|
489
|
+
severity: "blocker",
|
|
490
|
+
message: "The current requirement appears to be touching a denied or out-of-scope domain. Stop and narrow the change unless the user explicitly expanded this requirement.",
|
|
491
|
+
files: suspicious.slice(0, 12).map((s) => s.file_path),
|
|
492
|
+
details: {
|
|
493
|
+
requirement_id: args.requirement?.id ?? null,
|
|
494
|
+
requirement_title: args.requirement?.title ?? null,
|
|
495
|
+
inferred_from: contract.inferred_from,
|
|
496
|
+
deny_terms: denyTerms.slice(0, 30),
|
|
497
|
+
denied_paths: deniedPaths.slice(0, 30),
|
|
498
|
+
suspicious: suspicious.slice(0, 12),
|
|
499
|
+
},
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
return warnings;
|
|
503
|
+
}
|
|
504
|
+
export function buildDevelopmentWarnings(files, opts = {}) {
|
|
505
|
+
const warnings = [];
|
|
506
|
+
const uniqueFiles = Array.from(new Set(files
|
|
507
|
+
.map((f) => f.file_path)
|
|
508
|
+
.filter((f) => !!f && f !== "(unspecified)")
|
|
509
|
+
.map((f) => normalizeToDbPath(f))));
|
|
510
|
+
if (opts.includeUnspecified || files.some((f) => f.file_path === "(unspecified)")) {
|
|
511
|
+
warnings.push({
|
|
512
|
+
code: "unspecified_change_target",
|
|
513
|
+
severity: "warning",
|
|
514
|
+
message: "No changed file target was captured. For development work, sync concrete files so the current requirement owns only its real changes.",
|
|
515
|
+
});
|
|
516
|
+
}
|
|
517
|
+
if (uniqueFiles.length >= DEVELOPMENT_WARN_PENDING_FILES) {
|
|
518
|
+
warnings.push({
|
|
519
|
+
code: "many_pending_files",
|
|
520
|
+
severity: "warning",
|
|
521
|
+
message: "This requirement touches many files. Re-check the user request and keep only files required by the current requirement.",
|
|
522
|
+
files: uniqueFiles.slice(0, 20),
|
|
523
|
+
details: { total_files: uniqueFiles.length, threshold: DEVELOPMENT_WARN_PENDING_FILES },
|
|
524
|
+
});
|
|
525
|
+
}
|
|
526
|
+
const topDirs = new Set(uniqueFiles
|
|
527
|
+
.map((f) => f.replace(/\\/g, "/").split("/").filter(Boolean)[0] ?? "")
|
|
528
|
+
.filter(Boolean));
|
|
529
|
+
if (uniqueFiles.length >= 6 && topDirs.size >= 4) {
|
|
530
|
+
warnings.push({
|
|
531
|
+
code: "broad_change_surface",
|
|
532
|
+
severity: "warning",
|
|
533
|
+
message: "Changed files span several top-level areas. Avoid modifying completed or merely related features unless the current requirement explicitly needs it.",
|
|
534
|
+
files: uniqueFiles.slice(0, 20),
|
|
535
|
+
details: { top_level_dirs: Array.from(topDirs).slice(0, 12), total_dirs: topDirs.size },
|
|
536
|
+
});
|
|
537
|
+
}
|
|
538
|
+
for (const relPath of uniqueFiles) {
|
|
539
|
+
if (!isLikelySourceImplementationFile(relPath))
|
|
540
|
+
continue;
|
|
541
|
+
const absPath = path.isAbsolute(relPath) ? relPath : path.join(getProjectRoot(), relPath);
|
|
542
|
+
let stat;
|
|
543
|
+
try {
|
|
544
|
+
stat = fs.statSync(absPath);
|
|
545
|
+
}
|
|
546
|
+
catch {
|
|
547
|
+
continue;
|
|
548
|
+
}
|
|
549
|
+
if (!stat.isFile())
|
|
550
|
+
continue;
|
|
551
|
+
const lineInfo = countFileLinesBounded(absPath, 2_000_000);
|
|
552
|
+
const lineCount = lineInfo?.lines ?? 0;
|
|
553
|
+
const tooManyLines = lineCount >= DEVELOPMENT_BLOCK_FILE_LINES;
|
|
554
|
+
const warnLines = lineCount >= DEVELOPMENT_WARN_FILE_LINES;
|
|
555
|
+
const warnBytes = stat.size >= DEVELOPMENT_WARN_FILE_BYTES;
|
|
556
|
+
if (!tooManyLines && !warnLines && !warnBytes)
|
|
557
|
+
continue;
|
|
558
|
+
warnings.push(buildLargeImplementationFileWarning({
|
|
559
|
+
code: tooManyLines ? "very_large_file" : "large_file",
|
|
560
|
+
filePath: relPath,
|
|
561
|
+
lineCount,
|
|
562
|
+
lineCountTruncated: lineInfo?.truncated,
|
|
563
|
+
bytes: stat.size,
|
|
564
|
+
}));
|
|
565
|
+
}
|
|
566
|
+
return warnings;
|
|
567
|
+
}
|
|
568
|
+
function isLargeFileWarningCode(code) {
|
|
569
|
+
return (code === "large_file" ||
|
|
570
|
+
code === "very_large_file" ||
|
|
571
|
+
code === "large_file_read" ||
|
|
572
|
+
code === "huge_file_modularization_required");
|
|
573
|
+
}
|
|
574
|
+
export function isDevelopmentWarningBlockingForChangeMode(warning, changeMode) {
|
|
575
|
+
if (changeMode === "mechanical_modularization") {
|
|
576
|
+
if (isLargeFileWarningCode(warning.code))
|
|
577
|
+
return false;
|
|
578
|
+
if (warning.code === "scope_contract_missing")
|
|
579
|
+
return false;
|
|
580
|
+
}
|
|
581
|
+
if (changeMode === "emergency_hotfix") {
|
|
582
|
+
if (isLargeFileWarningCode(warning.code))
|
|
583
|
+
return false;
|
|
584
|
+
if (warning.code === "scope_contract_missing")
|
|
585
|
+
return false;
|
|
586
|
+
}
|
|
587
|
+
return warning.severity === "blocker" || warning.severity === "warning";
|
|
588
|
+
}
|
|
589
|
+
//# sourceMappingURL=development-warnings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"development-warnings.js","sourceRoot":"","sources":["../src/development-warnings.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import Database from "better-sqlite3";
|
|
2
|
+
import type { ExtractedSymbol } from "./types.js";
|
|
3
|
+
type FileIndexingContext = {
|
|
4
|
+
getDb: () => Database.Database | undefined;
|
|
5
|
+
getProjectRoot: () => string;
|
|
6
|
+
normalizeToDbPath: (inputPath: string) => string;
|
|
7
|
+
getIndexFileSymbolsTx: () => ((filePath: string, symbols: ExtractedSymbol[]) => void) | null;
|
|
8
|
+
getDeleteFileChunkItemsStatement: () => Database.Statement;
|
|
9
|
+
getInsertMemoryItemStatement: () => Database.Statement;
|
|
10
|
+
getUpsertPendingChangeStatement: () => Database.Statement;
|
|
11
|
+
getDeleteSymbolsForFileStatement: () => Database.Statement;
|
|
12
|
+
sha256Hex: (input: string) => string;
|
|
13
|
+
prunePendingChanges: () => void;
|
|
14
|
+
};
|
|
15
|
+
export declare function configureFileIndexing(context: FileIndexingContext): void;
|
|
16
|
+
type PendingChangeEvent = "add" | "change" | "unlink";
|
|
17
|
+
export declare function flushPendingChangeBuffer(): void;
|
|
18
|
+
export declare function recordPendingChange(absPath: string, event: PendingChangeEvent): void;
|
|
19
|
+
export declare function indexFile(absPath: string, reason: IndexReason): void;
|
|
20
|
+
export declare function removeFileIndexes(absPath: string): void;
|
|
21
|
+
type IndexReason = "add" | "change" | "manual";
|
|
22
|
+
export {};
|