@osovv/vv-opencode 0.29.1 → 0.30.2
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 +5 -10
- package/dist/commands/doctor.js +0 -1
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/plugin-list.js +3 -0
- package/dist/commands/plugin-list.js.map +1 -1
- package/dist/commands/status.js +0 -1
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/upgrade.js +4 -0
- package/dist/commands/upgrade.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js +6 -6
- package/dist/index.js.map +1 -1
- package/dist/lib/agent-models.d.ts +1 -1
- package/dist/lib/agent-models.js +7 -1
- package/dist/lib/agent-models.js.map +1 -1
- package/dist/lib/managed-agents.d.ts +1 -1
- package/dist/lib/managed-agents.js +3 -8
- package/dist/lib/managed-agents.js.map +1 -1
- package/dist/lib/model-roles.d.ts +0 -1
- package/dist/lib/model-roles.js +7 -4
- package/dist/lib/model-roles.js.map +1 -1
- package/dist/lib/opencode.d.ts +1 -8
- package/dist/lib/opencode.js +9 -19
- package/dist/lib/opencode.js.map +1 -1
- package/dist/lib/vvoc-config.d.ts +0 -28
- package/dist/lib/vvoc-config.js +21 -97
- package/dist/lib/vvoc-config.js.map +1 -1
- package/dist/lib/vvoc-paths.js +1 -1
- package/dist/lib/vvoc-paths.js.map +1 -1
- package/dist/lib/vvoc-preset-registry.d.ts +12 -3
- package/dist/lib/vvoc-preset-registry.js +11 -2
- package/dist/lib/vvoc-preset-registry.js.map +1 -1
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js +4 -0
- package/dist/plugins/hashline-edit/autocorrect-replacement-lines.js.map +1 -1
- package/dist/plugins/hashline-edit/edit-operation-primitives.js +4 -0
- package/dist/plugins/hashline-edit/edit-operation-primitives.js.map +1 -1
- package/dist/plugins/hashline-edit/file-text-canonicalization.js +4 -0
- package/dist/plugins/hashline-edit/file-text-canonicalization.js.map +1 -1
- package/dist/plugins/hashline-edit/normalize-edits.js +4 -0
- package/dist/plugins/hashline-edit/normalize-edits.js.map +1 -1
- package/dist/plugins/hashline-edit/types.js +4 -0
- package/dist/plugins/hashline-edit/types.js.map +1 -1
- package/dist/plugins/secrets-redaction/config.js +2 -0
- package/dist/plugins/secrets-redaction/config.js.map +1 -1
- package/dist/plugins/secrets-redaction/deep.js +4 -0
- package/dist/plugins/secrets-redaction/deep.js.map +1 -1
- package/dist/plugins/secrets-redaction/engine.js +3 -0
- package/dist/plugins/secrets-redaction/engine.js.map +1 -1
- package/dist/plugins/secrets-redaction/index.js +4 -0
- package/dist/plugins/secrets-redaction/index.js.map +1 -1
- package/dist/plugins/secrets-redaction/patterns.js +8 -0
- package/dist/plugins/secrets-redaction/patterns.js.map +1 -1
- package/dist/plugins/secrets-redaction/restore.js +4 -0
- package/dist/plugins/secrets-redaction/restore.js.map +1 -1
- package/dist/plugins/secrets-redaction/session.js +8 -0
- package/dist/plugins/secrets-redaction/session.js.map +1 -1
- package/dist/plugins/secrets-redaction.js +4 -0
- package/dist/plugins/secrets-redaction.js.map +1 -1
- package/dist/plugins/system-context-injection/index.js +1 -1
- package/dist/plugins/system-context-injection/index.js.map +1 -1
- package/dist/plugins/workflow/index.js +1 -1
- package/dist/plugins/workflow/index.js.map +1 -1
- package/package.json +3 -8
- package/schemas/vvoc/v3.json +2 -13
- package/templates/agents/vv-controller.md +7 -7
- package/dist/plugins/memory/index.d.ts +0 -2
- package/dist/plugins/memory/index.js +0 -440
- package/dist/plugins/memory/index.js.map +0 -1
- package/dist/plugins/memory/system-instruction.md +0 -8
- package/dist/plugins/memory-store.d.ts +0 -51
- package/dist/plugins/memory-store.js +0 -461
- package/dist/plugins/memory-store.js.map +0 -1
- package/schemas/vvoc/v1.json +0 -94
- package/schemas/vvoc/v2.json +0 -124
- package/templates/agents/memory-reviewer.md +0 -40
|
@@ -1,461 +0,0 @@
|
|
|
1
|
-
// FILE: src/plugins/memory-store.ts
|
|
2
|
-
// VERSION: 0.3.1
|
|
3
|
-
// START_MODULE_CONTRACT
|
|
4
|
-
// PURPOSE: Persist and query explicit vvoc memory entries across local and shared scopes.
|
|
5
|
-
// SCOPE: Canonical vvoc memory config loading, scope-aware storage roots, CRUD operations, lexical search, and JSON-backed filesystem helpers.
|
|
6
|
-
// DEPENDS: [node:child_process, node:crypto, node:fs/promises, node:path, src/lib/vvoc-config.ts, src/lib/vvoc-paths.ts]
|
|
7
|
-
// LINKS: [M-PLUGIN-MEMORY-STORE]
|
|
8
|
-
// ROLE: RUNTIME
|
|
9
|
-
// MAP_MODE: EXPORTS
|
|
10
|
-
// END_MODULE_CONTRACT
|
|
11
|
-
//
|
|
12
|
-
// START_MODULE_MAP
|
|
13
|
-
// MemoryScopeType - Supported write scope categories for explicit memory.
|
|
14
|
-
// MemoryReadScopeType - Supported read scopes including the cross-scope `all` selector.
|
|
15
|
-
// MemoryScope - Scope selector used by list/search filters.
|
|
16
|
-
// MemoryEntry - Canonical persisted memory record shape.
|
|
17
|
-
// MemoryRuntimeConfig - Resolved runtime config including local and shared storage roots.
|
|
18
|
-
// MemoryFilters - Shared filter shape for list/search operations.
|
|
19
|
-
// MemoryConfigOverrides - Parsed memory config override values.
|
|
20
|
-
// loadMemoryRuntimeConfig - Loads canonical vvoc memory settings and storage roots.
|
|
21
|
-
// parseMemoryConfigText - Parses a memory section JSON snippet.
|
|
22
|
-
// renderMemoryConfig - Renders a memory section JSON snippet.
|
|
23
|
-
// getDefaultSearchLimit - Returns the effective default limit for memory list/search operations.
|
|
24
|
-
// getDefaultProjectScopeKey - Returns the canonical project scope key.
|
|
25
|
-
// getDefaultSharedScopeKey - Returns the canonical shared scope fallback key.
|
|
26
|
-
// normalizeReadScopeType - Normalizes list/search scope arguments including `all`.
|
|
27
|
-
// normalizeWriteScopeType - Normalizes memory write scope arguments.
|
|
28
|
-
// resolveBranchScopeKey - Resolves the current git branch fallback key.
|
|
29
|
-
// listMemories - Lists explicit memory entries for the requested filters.
|
|
30
|
-
// getMemory - Loads a single explicit memory entry by id.
|
|
31
|
-
// putMemory - Persists a new explicit memory entry.
|
|
32
|
-
// updateMemory - Updates a stored explicit memory entry.
|
|
33
|
-
// deleteMemory - Deletes an explicit memory entry by id.
|
|
34
|
-
// searchMemories - Performs ranked lexical memory search across resolved scopes.
|
|
35
|
-
// END_MODULE_MAP
|
|
36
|
-
//
|
|
37
|
-
// START_CHANGE_SUMMARY
|
|
38
|
-
// LAST_CHANGE: [v0.3.1 - Stopped exposing reviewer model fields from memory runtime config so reviewer model authority comes from roles.fast.]
|
|
39
|
-
// LAST_CHANGE: [v0.3.0 - Switched memory settings to the canonical global vvoc.json config file.]
|
|
40
|
-
// END_CHANGE_SUMMARY
|
|
41
|
-
import { spawnSync } from "node:child_process";
|
|
42
|
-
import crypto from "node:crypto";
|
|
43
|
-
import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
|
|
44
|
-
import { dirname, join } from "node:path";
|
|
45
|
-
import { getGlobalVvocDataDir, getGlobalVvocConfigPath, getGlobalVvocProjectDataDir, } from "../lib/vvoc-paths.js";
|
|
46
|
-
import { createMemoryConfig, loadLenientVvocConfigText, parseMemoryConfigText, renderMemoryConfig, } from "../lib/vvoc-config.js";
|
|
47
|
-
const MEMORY_SCOPE_TYPES = ["session", "branch", "project", "shared"];
|
|
48
|
-
const MEMORY_SCOPE_TYPES_WITH_ALL = [...MEMORY_SCOPE_TYPES, "all"];
|
|
49
|
-
const DEFAULT_PROJECT_SCOPE_KEY = "project";
|
|
50
|
-
const DEFAULT_SHARED_SCOPE_KEY = "default";
|
|
51
|
-
const SCOPE_PRIORITY = {
|
|
52
|
-
session: 4,
|
|
53
|
-
branch: 3,
|
|
54
|
-
project: 2,
|
|
55
|
-
shared: 1,
|
|
56
|
-
};
|
|
57
|
-
export { parseMemoryConfigText, renderMemoryConfig };
|
|
58
|
-
// START_BLOCK_LOAD_MEMORY_RUNTIME_CONFIG
|
|
59
|
-
export async function loadMemoryRuntimeConfig(directory) {
|
|
60
|
-
const sources = [];
|
|
61
|
-
const warnings = [];
|
|
62
|
-
const configPath = getGlobalVvocConfigPath();
|
|
63
|
-
const currentText = await readOptionalText(configPath);
|
|
64
|
-
const memoryConfig = currentText
|
|
65
|
-
? (sources.push(configPath),
|
|
66
|
-
loadLenientVvocConfigText(currentText, configPath, warnings).memory)
|
|
67
|
-
: createMemoryConfig();
|
|
68
|
-
return {
|
|
69
|
-
enabled: memoryConfig.enabled,
|
|
70
|
-
projectStorageRoot: join(getGlobalVvocProjectDataDir(directory), "memory"),
|
|
71
|
-
sharedStorageRoot: join(getGlobalVvocDataDir(), "memory"),
|
|
72
|
-
defaultSearchLimit: memoryConfig.defaultSearchLimit,
|
|
73
|
-
sources,
|
|
74
|
-
warnings,
|
|
75
|
-
};
|
|
76
|
-
}
|
|
77
|
-
// END_BLOCK_LOAD_MEMORY_RUNTIME_CONFIG
|
|
78
|
-
export function getDefaultSearchLimit(config) {
|
|
79
|
-
return config.defaultSearchLimit;
|
|
80
|
-
}
|
|
81
|
-
export function getDefaultProjectScopeKey() {
|
|
82
|
-
return DEFAULT_PROJECT_SCOPE_KEY;
|
|
83
|
-
}
|
|
84
|
-
export function getDefaultSharedScopeKey() {
|
|
85
|
-
return DEFAULT_SHARED_SCOPE_KEY;
|
|
86
|
-
}
|
|
87
|
-
export function normalizeReadScopeType(value) {
|
|
88
|
-
const normalized = typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
89
|
-
return MEMORY_SCOPE_TYPES_WITH_ALL.includes(normalized)
|
|
90
|
-
? normalized
|
|
91
|
-
: undefined;
|
|
92
|
-
}
|
|
93
|
-
export function normalizeWriteScopeType(value) {
|
|
94
|
-
const normalized = typeof value === "string" ? value.trim().toLowerCase() : "";
|
|
95
|
-
return MEMORY_SCOPE_TYPES.includes(normalized)
|
|
96
|
-
? normalized
|
|
97
|
-
: undefined;
|
|
98
|
-
}
|
|
99
|
-
export function resolveBranchScopeKey(cwd) {
|
|
100
|
-
const result = spawnSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
|
|
101
|
-
cwd,
|
|
102
|
-
encoding: "utf8",
|
|
103
|
-
stdio: ["ignore", "pipe", "ignore"],
|
|
104
|
-
});
|
|
105
|
-
if (result.status !== 0) {
|
|
106
|
-
return "no-git-branch";
|
|
107
|
-
}
|
|
108
|
-
const branch = String(result.stdout || "").trim();
|
|
109
|
-
if (!branch || branch === "HEAD") {
|
|
110
|
-
return "detached-head";
|
|
111
|
-
}
|
|
112
|
-
return branch;
|
|
113
|
-
}
|
|
114
|
-
// START_BLOCK_MEMORY_CRUD_AND_SEARCH
|
|
115
|
-
export async function listMemories(config, filters = {}) {
|
|
116
|
-
return (await loadMemories(config, filters)).slice(0, resolveLimit(config, filters.limit));
|
|
117
|
-
}
|
|
118
|
-
export async function getMemory(config, id) {
|
|
119
|
-
return (await findRecordById(config, id))?.entry ?? null;
|
|
120
|
-
}
|
|
121
|
-
export async function putMemory(config, entry) {
|
|
122
|
-
const normalized = normalizeEntry(entry);
|
|
123
|
-
if (!normalized) {
|
|
124
|
-
throw new Error("Memory text is required.");
|
|
125
|
-
}
|
|
126
|
-
await ensureEntryDir(config, normalized);
|
|
127
|
-
await writeFile(getEntryPath(config, normalized), serializeEntry(normalized), "utf8");
|
|
128
|
-
return normalized;
|
|
129
|
-
}
|
|
130
|
-
export async function updateMemory(config, id, patch = {}) {
|
|
131
|
-
const record = await findRecordById(config, id);
|
|
132
|
-
if (!record)
|
|
133
|
-
return null;
|
|
134
|
-
const merged = normalizeEntry({
|
|
135
|
-
...record.entry,
|
|
136
|
-
kind: patch.kind === undefined ? record.entry.kind : patch.kind,
|
|
137
|
-
text: patch.text === undefined ? record.entry.text : patch.text,
|
|
138
|
-
tags: patch.tags === undefined ? record.entry.tags : patch.tags,
|
|
139
|
-
meta: patch.meta === undefined ? record.entry.meta : patch.meta,
|
|
140
|
-
updated_at: new Date().toISOString(),
|
|
141
|
-
});
|
|
142
|
-
if (!merged) {
|
|
143
|
-
throw new Error("Updated memory text is required.");
|
|
144
|
-
}
|
|
145
|
-
const nextPath = getEntryPath(config, merged);
|
|
146
|
-
await ensureEntryDir(config, merged);
|
|
147
|
-
await writeFile(nextPath, serializeEntry(merged), "utf8");
|
|
148
|
-
if (nextPath !== record.filePath) {
|
|
149
|
-
await rm(record.filePath, { force: true });
|
|
150
|
-
await pruneEmptyDirectories(dirname(record.filePath), getPruneStopDir(config, merged.scope_type));
|
|
151
|
-
}
|
|
152
|
-
return merged;
|
|
153
|
-
}
|
|
154
|
-
export async function deleteMemory(config, id) {
|
|
155
|
-
const record = await findRecordById(config, id);
|
|
156
|
-
if (!record)
|
|
157
|
-
return null;
|
|
158
|
-
await rm(record.filePath, { force: true });
|
|
159
|
-
await pruneEmptyDirectories(dirname(record.filePath), getPruneStopDir(config, record.entry.scope_type));
|
|
160
|
-
return record.entry;
|
|
161
|
-
}
|
|
162
|
-
export async function searchMemories(config, query, filters = {}) {
|
|
163
|
-
const normalizedQuery = normalizeText(query);
|
|
164
|
-
if (!normalizedQuery)
|
|
165
|
-
return [];
|
|
166
|
-
const ranked = (await loadRecords(config))
|
|
167
|
-
.map((record) => record.entry)
|
|
168
|
-
.filter((entry) => matchesFilters(entry, filters))
|
|
169
|
-
.map((entry) => ({
|
|
170
|
-
entry,
|
|
171
|
-
score: searchScore(entry, normalizedQuery),
|
|
172
|
-
}))
|
|
173
|
-
.filter((item) => item.score > 0.12)
|
|
174
|
-
.sort((left, right) => {
|
|
175
|
-
if (right.score !== left.score)
|
|
176
|
-
return right.score - left.score;
|
|
177
|
-
return sortByUpdatedDesc(left.entry, right.entry);
|
|
178
|
-
});
|
|
179
|
-
return ranked.slice(0, resolveLimit(config, filters.limit)).map((item) => item.entry);
|
|
180
|
-
}
|
|
181
|
-
// END_BLOCK_MEMORY_CRUD_AND_SEARCH
|
|
182
|
-
// START_BLOCK_MEMORY_CONFIG_NORMALIZATION
|
|
183
|
-
function clamp(value, min = 0, max = 1) {
|
|
184
|
-
return Math.max(min, Math.min(max, value));
|
|
185
|
-
}
|
|
186
|
-
function isPlainObject(value) {
|
|
187
|
-
return Boolean(value) && typeof value === "object" && !Array.isArray(value);
|
|
188
|
-
}
|
|
189
|
-
// END_BLOCK_MEMORY_CONFIG_NORMALIZATION
|
|
190
|
-
// START_BLOCK_MEMORY_ENTRY_NORMALIZATION
|
|
191
|
-
function normalizeScopeType(scopeType) {
|
|
192
|
-
return normalizeWriteScopeType(scopeType) ?? "project";
|
|
193
|
-
}
|
|
194
|
-
function normalizeScopeKey(scopeType, scopeKey) {
|
|
195
|
-
const raw = typeof scopeKey === "string" ? scopeKey.trim() : "";
|
|
196
|
-
if (scopeType === "project")
|
|
197
|
-
return DEFAULT_PROJECT_SCOPE_KEY;
|
|
198
|
-
if (scopeType === "shared")
|
|
199
|
-
return raw || DEFAULT_SHARED_SCOPE_KEY;
|
|
200
|
-
return raw || (scopeType === "session" ? "session" : "branch");
|
|
201
|
-
}
|
|
202
|
-
function normalizeKind(kind) {
|
|
203
|
-
const normalized = typeof kind === "string" ? kind.trim().toLowerCase().replace(/\s+/g, "_") : "";
|
|
204
|
-
return normalized || "semantic";
|
|
205
|
-
}
|
|
206
|
-
function normalizeTags(tags) {
|
|
207
|
-
if (!Array.isArray(tags))
|
|
208
|
-
return [];
|
|
209
|
-
return Array.from(new Set(tags.map((tag) => (typeof tag === "string" ? tag.trim().toLowerCase() : "")).filter(Boolean)));
|
|
210
|
-
}
|
|
211
|
-
function normalizeMeta(meta) {
|
|
212
|
-
return isPlainObject(meta) ? meta : {};
|
|
213
|
-
}
|
|
214
|
-
function normalizeText(text) {
|
|
215
|
-
return typeof text === "string" ? text.trim() : "";
|
|
216
|
-
}
|
|
217
|
-
function normalizeTimestamp(value, fallback) {
|
|
218
|
-
if (typeof value === "string" && value.trim()) {
|
|
219
|
-
const parsed = Date.parse(value);
|
|
220
|
-
if (!Number.isNaN(parsed)) {
|
|
221
|
-
return new Date(parsed).toISOString();
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
return fallback;
|
|
225
|
-
}
|
|
226
|
-
function normalizeEntry(raw) {
|
|
227
|
-
if (!isPlainObject(raw))
|
|
228
|
-
return null;
|
|
229
|
-
const text = normalizeText(raw.text);
|
|
230
|
-
if (!text)
|
|
231
|
-
return null;
|
|
232
|
-
const now = new Date().toISOString();
|
|
233
|
-
const scopeType = normalizeScopeType(raw.scope_type);
|
|
234
|
-
const scopeKey = normalizeScopeKey(scopeType, raw.scope_key);
|
|
235
|
-
const createdAt = normalizeTimestamp(raw.created_at, now);
|
|
236
|
-
const updatedAt = normalizeTimestamp(raw.updated_at, createdAt);
|
|
237
|
-
return {
|
|
238
|
-
id: typeof raw.id === "string" && raw.id.trim()
|
|
239
|
-
? raw.id.trim()
|
|
240
|
-
: `mem_${crypto.randomUUID().replace(/-/g, "")}`,
|
|
241
|
-
scope_type: scopeType,
|
|
242
|
-
scope_key: scopeKey,
|
|
243
|
-
kind: normalizeKind(raw.kind),
|
|
244
|
-
text,
|
|
245
|
-
tags: normalizeTags(raw.tags),
|
|
246
|
-
meta: normalizeMeta(raw.meta),
|
|
247
|
-
created_at: createdAt,
|
|
248
|
-
updated_at: updatedAt,
|
|
249
|
-
};
|
|
250
|
-
}
|
|
251
|
-
// END_BLOCK_MEMORY_ENTRY_NORMALIZATION
|
|
252
|
-
// START_BLOCK_MEMORY_FILESYSTEM_LAYOUT
|
|
253
|
-
function serializeEntry(entry) {
|
|
254
|
-
return `${JSON.stringify(entry, null, 2)}\n`;
|
|
255
|
-
}
|
|
256
|
-
function encodeScopeSegment(value) {
|
|
257
|
-
return encodeURIComponent(String(value || "").trim() || "default");
|
|
258
|
-
}
|
|
259
|
-
function getScopeDir(config, scopeType, scopeKey) {
|
|
260
|
-
if (scopeType === "shared") {
|
|
261
|
-
return join(config.sharedStorageRoot, "shared", encodeScopeSegment(scopeKey));
|
|
262
|
-
}
|
|
263
|
-
if (scopeType === "project") {
|
|
264
|
-
return join(config.projectStorageRoot, "project");
|
|
265
|
-
}
|
|
266
|
-
return join(config.projectStorageRoot, scopeType, encodeScopeSegment(scopeKey));
|
|
267
|
-
}
|
|
268
|
-
function getEntryPath(config, entry) {
|
|
269
|
-
return join(getScopeDir(config, entry.scope_type, entry.scope_key), `${entry.id}.json`);
|
|
270
|
-
}
|
|
271
|
-
async function walkJsonFiles(targetDir) {
|
|
272
|
-
const files = [];
|
|
273
|
-
const visit = async (current) => {
|
|
274
|
-
let entries;
|
|
275
|
-
try {
|
|
276
|
-
entries = await readdir(current, { withFileTypes: true });
|
|
277
|
-
}
|
|
278
|
-
catch (error) {
|
|
279
|
-
if (error.code === "ENOENT") {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
throw error;
|
|
283
|
-
}
|
|
284
|
-
entries.sort((left, right) => left.name.localeCompare(right.name));
|
|
285
|
-
for (const entry of entries) {
|
|
286
|
-
const absolute = join(current, entry.name);
|
|
287
|
-
if (entry.isDirectory()) {
|
|
288
|
-
await visit(absolute);
|
|
289
|
-
continue;
|
|
290
|
-
}
|
|
291
|
-
if (entry.isFile() && entry.name.endsWith(".json")) {
|
|
292
|
-
files.push(absolute);
|
|
293
|
-
}
|
|
294
|
-
}
|
|
295
|
-
};
|
|
296
|
-
await visit(targetDir);
|
|
297
|
-
files.sort((left, right) => left.localeCompare(right));
|
|
298
|
-
return files;
|
|
299
|
-
}
|
|
300
|
-
// END_BLOCK_MEMORY_FILESYSTEM_LAYOUT
|
|
301
|
-
// START_BLOCK_MEMORY_RECORD_LOADING_AND_FILTERING
|
|
302
|
-
async function loadRecords(config) {
|
|
303
|
-
const files = (await Promise.all([
|
|
304
|
-
walkJsonFiles(join(config.projectStorageRoot, "session")),
|
|
305
|
-
walkJsonFiles(join(config.projectStorageRoot, "branch")),
|
|
306
|
-
walkJsonFiles(join(config.projectStorageRoot, "project")),
|
|
307
|
-
walkJsonFiles(join(config.sharedStorageRoot, "shared")),
|
|
308
|
-
]))
|
|
309
|
-
.flat()
|
|
310
|
-
.sort((left, right) => left.localeCompare(right));
|
|
311
|
-
const records = await Promise.all(files.map(async (filePath) => {
|
|
312
|
-
try {
|
|
313
|
-
const raw = JSON.parse(await readFile(filePath, "utf8"));
|
|
314
|
-
const entry = normalizeEntry(raw);
|
|
315
|
-
return entry ? { entry, filePath } : null;
|
|
316
|
-
}
|
|
317
|
-
catch {
|
|
318
|
-
return null;
|
|
319
|
-
}
|
|
320
|
-
}));
|
|
321
|
-
return records.filter((record) => record !== null);
|
|
322
|
-
}
|
|
323
|
-
async function loadMemories(config, filters = {}) {
|
|
324
|
-
return (await loadRecords(config))
|
|
325
|
-
.map((record) => record.entry)
|
|
326
|
-
.filter((entry) => matchesFilters(entry, filters))
|
|
327
|
-
.sort(sortByUpdatedDesc);
|
|
328
|
-
}
|
|
329
|
-
function sortByUpdatedDesc(left, right) {
|
|
330
|
-
const updatedDelta = Date.parse(right.updated_at) - Date.parse(left.updated_at);
|
|
331
|
-
if (updatedDelta !== 0)
|
|
332
|
-
return updatedDelta;
|
|
333
|
-
return left.id.localeCompare(right.id);
|
|
334
|
-
}
|
|
335
|
-
function matchesScopes(entry, scopes) {
|
|
336
|
-
if (!Array.isArray(scopes) || scopes.length === 0)
|
|
337
|
-
return true;
|
|
338
|
-
return scopes.some((scope) => {
|
|
339
|
-
if (scope.scopeType !== entry.scope_type)
|
|
340
|
-
return false;
|
|
341
|
-
if (scope.scopeType === "project")
|
|
342
|
-
return true;
|
|
343
|
-
return normalizeScopeKey(scope.scopeType, scope.scopeKey) === entry.scope_key;
|
|
344
|
-
});
|
|
345
|
-
}
|
|
346
|
-
function matchesFilters(entry, filters) {
|
|
347
|
-
if (filters.kind && normalizeKind(filters.kind) !== entry.kind) {
|
|
348
|
-
return false;
|
|
349
|
-
}
|
|
350
|
-
return matchesScopes(entry, filters.scopes);
|
|
351
|
-
}
|
|
352
|
-
// END_BLOCK_MEMORY_RECORD_LOADING_AND_FILTERING
|
|
353
|
-
// START_BLOCK_MEMORY_SEARCH_SCORING
|
|
354
|
-
function scopeBonus(scopeType) {
|
|
355
|
-
return SCOPE_PRIORITY[scopeType] * 0.08;
|
|
356
|
-
}
|
|
357
|
-
function recencyBonus(updatedAt) {
|
|
358
|
-
const ageDays = Math.max((Date.now() - Date.parse(updatedAt)) / 86_400_000, 0);
|
|
359
|
-
return clamp(1 - ageDays / 30) * 0.08;
|
|
360
|
-
}
|
|
361
|
-
function tokenize(value) {
|
|
362
|
-
return String(value || "")
|
|
363
|
-
.toLowerCase()
|
|
364
|
-
.split(/[^a-z0-9_]+/i)
|
|
365
|
-
.map((part) => part.trim())
|
|
366
|
-
.filter(Boolean);
|
|
367
|
-
}
|
|
368
|
-
function overlapScore(query, target) {
|
|
369
|
-
const queryTokens = tokenize(query);
|
|
370
|
-
const targetTokens = new Set(tokenize(target));
|
|
371
|
-
if (queryTokens.length === 0 || targetTokens.size === 0)
|
|
372
|
-
return 0;
|
|
373
|
-
let hits = 0;
|
|
374
|
-
for (const token of queryTokens) {
|
|
375
|
-
if (targetTokens.has(token)) {
|
|
376
|
-
hits += 1;
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
return hits / queryTokens.length;
|
|
380
|
-
}
|
|
381
|
-
function tagBonus(entry, queryTokens) {
|
|
382
|
-
if (queryTokens.length === 0 || entry.tags.length === 0)
|
|
383
|
-
return 0;
|
|
384
|
-
const tags = new Set(entry.tags.flatMap((tag) => tokenize(tag)));
|
|
385
|
-
let hits = 0;
|
|
386
|
-
for (const token of queryTokens) {
|
|
387
|
-
if (tags.has(token)) {
|
|
388
|
-
hits += 1;
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
return Math.min(hits * 0.06, 0.18);
|
|
392
|
-
}
|
|
393
|
-
function searchScore(entry, query) {
|
|
394
|
-
const normalizedQuery = normalizeText(query).toLowerCase();
|
|
395
|
-
if (!normalizedQuery)
|
|
396
|
-
return 0;
|
|
397
|
-
const haystack = `${entry.text} ${entry.tags.join(" ")}`;
|
|
398
|
-
const lexical = overlapScore(normalizedQuery, haystack);
|
|
399
|
-
const queryTokens = tokenize(normalizedQuery);
|
|
400
|
-
const textTokens = tokenize(entry.text);
|
|
401
|
-
const exactHits = queryTokens.filter((token) => textTokens.includes(token)).length;
|
|
402
|
-
const exactPhrase = entry.text.toLowerCase().includes(normalizedQuery) ? 0.24 : 0;
|
|
403
|
-
return (lexical * 0.58 +
|
|
404
|
-
Math.min(exactHits * 0.05, 0.2) +
|
|
405
|
-
tagBonus(entry, queryTokens) +
|
|
406
|
-
scopeBonus(entry.scope_type) +
|
|
407
|
-
recencyBonus(entry.updated_at) +
|
|
408
|
-
exactPhrase);
|
|
409
|
-
}
|
|
410
|
-
// END_BLOCK_MEMORY_SEARCH_SCORING
|
|
411
|
-
// START_BLOCK_MEMORY_FS_HELPERS
|
|
412
|
-
async function findRecordById(config, id) {
|
|
413
|
-
const targetId = typeof id === "string" ? id.trim() : "";
|
|
414
|
-
if (!targetId)
|
|
415
|
-
return null;
|
|
416
|
-
return (await loadRecords(config)).find((record) => record.entry.id === targetId) ?? null;
|
|
417
|
-
}
|
|
418
|
-
async function ensureEntryDir(config, entry) {
|
|
419
|
-
await mkdir(getScopeDir(config, entry.scope_type, entry.scope_key), { recursive: true });
|
|
420
|
-
}
|
|
421
|
-
function getPruneStopDir(config, scopeType) {
|
|
422
|
-
return scopeType === "shared" ? config.sharedStorageRoot : config.projectStorageRoot;
|
|
423
|
-
}
|
|
424
|
-
async function pruneEmptyDirectories(startDir, stopDir) {
|
|
425
|
-
let current = startDir;
|
|
426
|
-
while (current.startsWith(stopDir) && current !== stopDir) {
|
|
427
|
-
let entries;
|
|
428
|
-
try {
|
|
429
|
-
entries = await readdir(current);
|
|
430
|
-
}
|
|
431
|
-
catch (error) {
|
|
432
|
-
if (error.code === "ENOENT") {
|
|
433
|
-
break;
|
|
434
|
-
}
|
|
435
|
-
throw error;
|
|
436
|
-
}
|
|
437
|
-
if (entries.length > 0)
|
|
438
|
-
break;
|
|
439
|
-
await rm(current, { recursive: true, force: true });
|
|
440
|
-
current = dirname(current);
|
|
441
|
-
}
|
|
442
|
-
}
|
|
443
|
-
function resolveLimit(config, value) {
|
|
444
|
-
const fallback = config.defaultSearchLimit;
|
|
445
|
-
if (typeof value !== "number" || !Number.isFinite(value))
|
|
446
|
-
return fallback;
|
|
447
|
-
return Math.max(1, Math.floor(value));
|
|
448
|
-
}
|
|
449
|
-
async function readOptionalText(path) {
|
|
450
|
-
try {
|
|
451
|
-
return await readFile(path, "utf8");
|
|
452
|
-
}
|
|
453
|
-
catch (error) {
|
|
454
|
-
if (error.code === "ENOENT") {
|
|
455
|
-
return undefined;
|
|
456
|
-
}
|
|
457
|
-
throw error;
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// END_BLOCK_MEMORY_FS_HELPERS
|
|
461
|
-
//# sourceMappingURL=memory-store.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/plugins/memory-store.ts"],"names":[],"mappings":"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"}
|
package/schemas/vvoc/v1.json
DELETED
|
@@ -1,94 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
-
"$id": "https://cdn.jsdelivr.net/npm/@osovv/vv-opencode@0.29.0/schemas/vvoc/v1.json",
|
|
4
|
-
"title": "vvoc config",
|
|
5
|
-
"description": "Canonical vvoc configuration document.",
|
|
6
|
-
"type": "object",
|
|
7
|
-
"additionalProperties": false,
|
|
8
|
-
"required": ["$schema", "version", "guardian", "memory", "secretsRedaction"],
|
|
9
|
-
"properties": {
|
|
10
|
-
"$schema": {
|
|
11
|
-
"type": "string",
|
|
12
|
-
"minLength": 1,
|
|
13
|
-
"description": "Hosted JSON Schema URL for vvoc.json."
|
|
14
|
-
},
|
|
15
|
-
"version": {
|
|
16
|
-
"type": "integer",
|
|
17
|
-
"const": 1
|
|
18
|
-
},
|
|
19
|
-
"guardian": {
|
|
20
|
-
"type": "object",
|
|
21
|
-
"additionalProperties": false,
|
|
22
|
-
"required": ["timeoutMs", "approvalRiskThreshold", "reviewToastDurationMs"],
|
|
23
|
-
"properties": {
|
|
24
|
-
"model": { "type": "string", "minLength": 1 },
|
|
25
|
-
"variant": { "type": "string", "minLength": 1 },
|
|
26
|
-
"timeoutMs": { "type": "integer", "minimum": 1 },
|
|
27
|
-
"approvalRiskThreshold": { "type": "integer", "minimum": 0, "maximum": 100 },
|
|
28
|
-
"reviewToastDurationMs": { "type": "integer", "minimum": 1 }
|
|
29
|
-
}
|
|
30
|
-
},
|
|
31
|
-
"memory": {
|
|
32
|
-
"type": "object",
|
|
33
|
-
"additionalProperties": false,
|
|
34
|
-
"required": ["enabled", "defaultSearchLimit"],
|
|
35
|
-
"properties": {
|
|
36
|
-
"enabled": { "type": "boolean" },
|
|
37
|
-
"defaultSearchLimit": { "type": "integer", "minimum": 1 },
|
|
38
|
-
"reviewerModel": { "type": "string", "minLength": 1 },
|
|
39
|
-
"reviewerVariant": { "type": "string", "minLength": 1 }
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"secretsRedaction": {
|
|
43
|
-
"type": "object",
|
|
44
|
-
"additionalProperties": false,
|
|
45
|
-
"required": ["enabled", "secret", "ttlMs", "maxMappings", "patterns", "debug"],
|
|
46
|
-
"properties": {
|
|
47
|
-
"enabled": { "type": "boolean" },
|
|
48
|
-
"secret": { "type": "string", "minLength": 1 },
|
|
49
|
-
"ttlMs": { "type": "integer", "minimum": 0 },
|
|
50
|
-
"maxMappings": { "type": "integer", "minimum": 1 },
|
|
51
|
-
"debug": { "type": "boolean" },
|
|
52
|
-
"patterns": {
|
|
53
|
-
"type": "object",
|
|
54
|
-
"additionalProperties": false,
|
|
55
|
-
"required": ["keywords", "regex", "builtin", "exclude"],
|
|
56
|
-
"properties": {
|
|
57
|
-
"keywords": {
|
|
58
|
-
"type": "array",
|
|
59
|
-
"items": {
|
|
60
|
-
"type": "object",
|
|
61
|
-
"additionalProperties": false,
|
|
62
|
-
"required": ["value"],
|
|
63
|
-
"properties": {
|
|
64
|
-
"value": { "type": "string", "minLength": 1 },
|
|
65
|
-
"category": { "type": "string", "minLength": 1 }
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
},
|
|
69
|
-
"regex": {
|
|
70
|
-
"type": "array",
|
|
71
|
-
"items": {
|
|
72
|
-
"type": "object",
|
|
73
|
-
"additionalProperties": false,
|
|
74
|
-
"required": ["pattern", "category"],
|
|
75
|
-
"properties": {
|
|
76
|
-
"pattern": { "type": "string", "minLength": 1 },
|
|
77
|
-
"category": { "type": "string", "minLength": 1 }
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
},
|
|
81
|
-
"builtin": {
|
|
82
|
-
"type": "array",
|
|
83
|
-
"items": { "type": "string", "minLength": 1 }
|
|
84
|
-
},
|
|
85
|
-
"exclude": {
|
|
86
|
-
"type": "array",
|
|
87
|
-
"items": { "type": "string", "minLength": 1 }
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
}
|