@osovv/vv-opencode 0.1.0 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/AGENTS.md +62 -50
  2. package/README.md +237 -20
  3. package/dist/commands/doctor.d.ts +1 -7
  4. package/dist/commands/doctor.js +3 -20
  5. package/dist/commands/doctor.js.map +1 -1
  6. package/dist/commands/guardian.js +1 -1
  7. package/dist/commands/guardian.js.map +1 -1
  8. package/dist/commands/install.d.ts +1 -7
  9. package/dist/commands/install.js +4 -16
  10. package/dist/commands/install.js.map +1 -1
  11. package/dist/commands/status.d.ts +1 -1
  12. package/dist/commands/status.js +2 -5
  13. package/dist/commands/status.js.map +1 -1
  14. package/dist/commands/sync.d.ts +1 -7
  15. package/dist/commands/sync.js +4 -15
  16. package/dist/commands/sync.js.map +1 -1
  17. package/dist/index.d.ts +1 -0
  18. package/dist/index.js +1 -0
  19. package/dist/index.js.map +1 -1
  20. package/dist/lib/opencode.d.ts +3 -18
  21. package/dist/lib/opencode.js +39 -111
  22. package/dist/lib/opencode.js.map +1 -1
  23. package/dist/lib/opencode.test.js +23 -6
  24. package/dist/lib/opencode.test.js.map +1 -1
  25. package/dist/lib/vvoc-paths.d.ts +6 -0
  26. package/dist/lib/vvoc-paths.js +25 -0
  27. package/dist/lib/vvoc-paths.js.map +1 -0
  28. package/dist/plugins/guardian.js +20 -21
  29. package/dist/plugins/guardian.js.map +1 -1
  30. package/dist/plugins/memory-store.d.ts +49 -0
  31. package/dist/plugins/memory-store.js +452 -0
  32. package/dist/plugins/memory-store.js.map +1 -0
  33. package/dist/plugins/memory.d.ts +2 -0
  34. package/dist/plugins/memory.js +323 -0
  35. package/dist/plugins/memory.js.map +1 -0
  36. package/dist/plugins/memory.test.d.ts +1 -0
  37. package/dist/plugins/memory.test.js +151 -0
  38. package/dist/plugins/memory.test.js.map +1 -0
  39. package/docs/development-plan.xml +100 -20
  40. package/docs/knowledge-graph.xml +30 -6
  41. package/docs/requirements.xml +30 -19
  42. package/docs/technology.xml +23 -14
  43. package/docs/verification-plan.xml +92 -25
  44. package/package.json +14 -2
@@ -0,0 +1,452 @@
1
+ import { spawnSync } from "node:child_process";
2
+ import crypto from "node:crypto";
3
+ import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
4
+ import { dirname, join } from "node:path";
5
+ import { parse } from "jsonc-parser";
6
+ import { getGlobalVvocDir, getProjectVvocDir } from "../lib/vvoc-paths.js";
7
+ const MEMORY_SCOPE_TYPES = ["session", "branch", "project", "shared"];
8
+ const MEMORY_SCOPE_TYPES_WITH_ALL = [...MEMORY_SCOPE_TYPES, "all"];
9
+ const DEFAULT_SEARCH_LIMIT = 8;
10
+ const DEFAULT_PROJECT_SCOPE_KEY = "project";
11
+ const DEFAULT_SHARED_SCOPE_KEY = "default";
12
+ const MEMORY_CONFIG_FILE_NAMES = ["memory.jsonc", "memory.json"];
13
+ const SCOPE_PRIORITY = {
14
+ session: 4,
15
+ branch: 3,
16
+ project: 2,
17
+ shared: 1,
18
+ };
19
+ export async function loadMemoryRuntimeConfig(directory) {
20
+ const sources = [];
21
+ const warnings = [];
22
+ const globalConfig = await loadScopedMemoryConfig(MEMORY_CONFIG_FILE_NAMES.map((name) => join(getGlobalVvocDir(), name)), sources, warnings);
23
+ const projectConfig = directory
24
+ ? await loadScopedMemoryConfig(MEMORY_CONFIG_FILE_NAMES.map((name) => join(getProjectVvocDir(directory), name)), sources, warnings)
25
+ : {};
26
+ return {
27
+ enabled: projectConfig.enabled ?? globalConfig.enabled ?? true,
28
+ storageRoot: join(getProjectVvocDir(directory), "memory"),
29
+ defaultSearchLimit: projectConfig.defaultSearchLimit ?? globalConfig.defaultSearchLimit ?? DEFAULT_SEARCH_LIMIT,
30
+ sources,
31
+ warnings,
32
+ };
33
+ }
34
+ export function getDefaultSearchLimit(config) {
35
+ return config.defaultSearchLimit;
36
+ }
37
+ export function getDefaultProjectScopeKey() {
38
+ return DEFAULT_PROJECT_SCOPE_KEY;
39
+ }
40
+ export function getDefaultSharedScopeKey() {
41
+ return DEFAULT_SHARED_SCOPE_KEY;
42
+ }
43
+ export function normalizeReadScopeType(value) {
44
+ const normalized = typeof value === "string" ? value.trim().toLowerCase() : "";
45
+ return MEMORY_SCOPE_TYPES_WITH_ALL.includes(normalized)
46
+ ? normalized
47
+ : undefined;
48
+ }
49
+ export function normalizeWriteScopeType(value) {
50
+ const normalized = typeof value === "string" ? value.trim().toLowerCase() : "";
51
+ return MEMORY_SCOPE_TYPES.includes(normalized)
52
+ ? normalized
53
+ : undefined;
54
+ }
55
+ export function resolveBranchScopeKey(cwd) {
56
+ const result = spawnSync("git", ["rev-parse", "--abbrev-ref", "HEAD"], {
57
+ cwd,
58
+ encoding: "utf8",
59
+ stdio: ["ignore", "pipe", "ignore"],
60
+ });
61
+ if (result.status !== 0) {
62
+ return "no-git-branch";
63
+ }
64
+ const branch = String(result.stdout || "").trim();
65
+ if (!branch || branch === "HEAD") {
66
+ return "detached-head";
67
+ }
68
+ return branch;
69
+ }
70
+ export async function listMemories(config, filters = {}) {
71
+ return (await loadMemories(config, filters)).slice(0, resolveLimit(config, filters.limit));
72
+ }
73
+ export async function getMemory(config, id) {
74
+ return (await findRecordById(config, id))?.entry ?? null;
75
+ }
76
+ export async function putMemory(config, entry) {
77
+ const normalized = normalizeEntry(entry);
78
+ if (!normalized) {
79
+ throw new Error("Memory text is required.");
80
+ }
81
+ await ensureEntryDir(config, normalized);
82
+ await writeFile(getEntryPath(config, normalized), serializeEntry(normalized), "utf8");
83
+ return normalized;
84
+ }
85
+ export async function updateMemory(config, id, patch = {}) {
86
+ const record = await findRecordById(config, id);
87
+ if (!record)
88
+ return null;
89
+ const merged = normalizeEntry({
90
+ ...record.entry,
91
+ kind: patch.kind === undefined ? record.entry.kind : patch.kind,
92
+ text: patch.text === undefined ? record.entry.text : patch.text,
93
+ tags: patch.tags === undefined ? record.entry.tags : patch.tags,
94
+ meta: patch.meta === undefined ? record.entry.meta : patch.meta,
95
+ updated_at: new Date().toISOString(),
96
+ });
97
+ if (!merged) {
98
+ throw new Error("Updated memory text is required.");
99
+ }
100
+ const nextPath = getEntryPath(config, merged);
101
+ await ensureEntryDir(config, merged);
102
+ await writeFile(nextPath, serializeEntry(merged), "utf8");
103
+ if (nextPath !== record.filePath) {
104
+ await rm(record.filePath, { force: true });
105
+ await pruneEmptyDirectories(dirname(record.filePath), config.storageRoot);
106
+ }
107
+ return merged;
108
+ }
109
+ export async function deleteMemory(config, id) {
110
+ const record = await findRecordById(config, id);
111
+ if (!record)
112
+ return null;
113
+ await rm(record.filePath, { force: true });
114
+ await pruneEmptyDirectories(dirname(record.filePath), config.storageRoot);
115
+ return record.entry;
116
+ }
117
+ export async function searchMemories(config, query, filters = {}) {
118
+ const normalizedQuery = normalizeText(query);
119
+ if (!normalizedQuery)
120
+ return [];
121
+ const ranked = (await loadRecords(config))
122
+ .map((record) => record.entry)
123
+ .filter((entry) => matchesFilters(entry, filters))
124
+ .map((entry) => ({
125
+ entry,
126
+ score: searchScore(entry, normalizedQuery),
127
+ }))
128
+ .filter((item) => item.score > 0.12)
129
+ .sort((left, right) => {
130
+ if (right.score !== left.score)
131
+ return right.score - left.score;
132
+ return sortByUpdatedDesc(left.entry, right.entry);
133
+ });
134
+ return ranked.slice(0, resolveLimit(config, filters.limit)).map((item) => item.entry);
135
+ }
136
+ function clamp(value, min = 0, max = 1) {
137
+ return Math.max(min, Math.min(max, value));
138
+ }
139
+ function isPlainObject(value) {
140
+ return Boolean(value) && typeof value === "object" && !Array.isArray(value);
141
+ }
142
+ function parseMemoryConfigDocument(text, label) {
143
+ const errors = [];
144
+ const value = parse(text, errors, {
145
+ allowEmptyContent: false,
146
+ allowTrailingComma: true,
147
+ disallowComments: false,
148
+ });
149
+ if (errors.length > 0) {
150
+ throw new Error(`${label}: failed to parse JSONC (${errors.length} error(s))`);
151
+ }
152
+ if (!isPlainObject(value)) {
153
+ throw new Error(`${label}: expected a top-level object`);
154
+ }
155
+ return value;
156
+ }
157
+ function normalizeMemoryConfigOverrides(source, raw, warnings) {
158
+ if (!isPlainObject(raw)) {
159
+ warnings.push(`${source}: expected an object`);
160
+ return {};
161
+ }
162
+ const overrides = {};
163
+ if (Object.hasOwn(raw, "enabled")) {
164
+ if (typeof raw.enabled === "boolean") {
165
+ overrides.enabled = raw.enabled;
166
+ }
167
+ else {
168
+ warnings.push(`${source}: ignored invalid "enabled" value`);
169
+ }
170
+ }
171
+ if (Object.hasOwn(raw, "defaultSearchLimit")) {
172
+ const limit = readPositiveInteger(raw.defaultSearchLimit);
173
+ if (limit) {
174
+ overrides.defaultSearchLimit = limit;
175
+ }
176
+ else {
177
+ warnings.push(`${source}: ignored invalid "defaultSearchLimit" value`);
178
+ }
179
+ }
180
+ return overrides;
181
+ }
182
+ async function loadScopedMemoryConfig(candidates, sources, warnings) {
183
+ for (const candidate of candidates) {
184
+ const text = await readOptionalText(candidate);
185
+ if (!text)
186
+ continue;
187
+ try {
188
+ const parsed = parseMemoryConfigDocument(text, candidate);
189
+ sources.push(candidate);
190
+ return normalizeMemoryConfigOverrides(candidate, parsed, warnings);
191
+ }
192
+ catch (error) {
193
+ warnings.push(`${candidate}: failed to parse JSONC (${error instanceof Error ? error.message : String(error)})`);
194
+ }
195
+ }
196
+ return {};
197
+ }
198
+ function normalizeScopeType(scopeType) {
199
+ return normalizeWriteScopeType(scopeType) ?? "project";
200
+ }
201
+ function normalizeScopeKey(scopeType, scopeKey) {
202
+ const raw = typeof scopeKey === "string" ? scopeKey.trim() : "";
203
+ if (scopeType === "project")
204
+ return DEFAULT_PROJECT_SCOPE_KEY;
205
+ if (scopeType === "shared")
206
+ return raw || DEFAULT_SHARED_SCOPE_KEY;
207
+ return raw || (scopeType === "session" ? "session" : "branch");
208
+ }
209
+ function normalizeKind(kind) {
210
+ const normalized = typeof kind === "string" ? kind.trim().toLowerCase().replace(/\s+/g, "_") : "";
211
+ return normalized || "semantic";
212
+ }
213
+ function normalizeTags(tags) {
214
+ if (!Array.isArray(tags))
215
+ return [];
216
+ return Array.from(new Set(tags.map((tag) => (typeof tag === "string" ? tag.trim().toLowerCase() : "")).filter(Boolean)));
217
+ }
218
+ function normalizeMeta(meta) {
219
+ return isPlainObject(meta) ? meta : {};
220
+ }
221
+ function normalizeText(text) {
222
+ return typeof text === "string" ? text.trim() : "";
223
+ }
224
+ function normalizeTimestamp(value, fallback) {
225
+ if (typeof value === "string" && value.trim()) {
226
+ const parsed = Date.parse(value);
227
+ if (!Number.isNaN(parsed)) {
228
+ return new Date(parsed).toISOString();
229
+ }
230
+ }
231
+ return fallback;
232
+ }
233
+ function normalizeEntry(raw) {
234
+ if (!isPlainObject(raw))
235
+ return null;
236
+ const text = normalizeText(raw.text);
237
+ if (!text)
238
+ return null;
239
+ const now = new Date().toISOString();
240
+ const scopeType = normalizeScopeType(raw.scope_type);
241
+ const scopeKey = normalizeScopeKey(scopeType, raw.scope_key);
242
+ const createdAt = normalizeTimestamp(raw.created_at, now);
243
+ const updatedAt = normalizeTimestamp(raw.updated_at, createdAt);
244
+ return {
245
+ id: typeof raw.id === "string" && raw.id.trim()
246
+ ? raw.id.trim()
247
+ : `mem_${crypto.randomUUID().replace(/-/g, "")}`,
248
+ scope_type: scopeType,
249
+ scope_key: scopeKey,
250
+ kind: normalizeKind(raw.kind),
251
+ text,
252
+ tags: normalizeTags(raw.tags),
253
+ meta: normalizeMeta(raw.meta),
254
+ created_at: createdAt,
255
+ updated_at: updatedAt,
256
+ };
257
+ }
258
+ function serializeEntry(entry) {
259
+ return `${JSON.stringify(entry, null, 2)}\n`;
260
+ }
261
+ function encodeScopeSegment(value) {
262
+ return encodeURIComponent(String(value || "").trim() || "default");
263
+ }
264
+ function getScopeDir(config, scopeType, scopeKey) {
265
+ if (scopeType === "project") {
266
+ return join(config.storageRoot, "project");
267
+ }
268
+ return join(config.storageRoot, scopeType, encodeScopeSegment(scopeKey));
269
+ }
270
+ function getEntryPath(config, entry) {
271
+ return join(getScopeDir(config, entry.scope_type, entry.scope_key), `${entry.id}.json`);
272
+ }
273
+ async function walkJsonFiles(targetDir) {
274
+ const files = [];
275
+ const visit = async (current) => {
276
+ let entries;
277
+ try {
278
+ entries = await readdir(current, { withFileTypes: true });
279
+ }
280
+ catch (error) {
281
+ if (error.code === "ENOENT") {
282
+ return;
283
+ }
284
+ throw error;
285
+ }
286
+ entries.sort((left, right) => left.name.localeCompare(right.name));
287
+ for (const entry of entries) {
288
+ const absolute = join(current, entry.name);
289
+ if (entry.isDirectory()) {
290
+ await visit(absolute);
291
+ continue;
292
+ }
293
+ if (entry.isFile() && entry.name.endsWith(".json")) {
294
+ files.push(absolute);
295
+ }
296
+ }
297
+ };
298
+ await visit(targetDir);
299
+ files.sort((left, right) => left.localeCompare(right));
300
+ return files;
301
+ }
302
+ async function loadRecords(config) {
303
+ const files = await walkJsonFiles(config.storageRoot);
304
+ const records = await Promise.all(files.map(async (filePath) => {
305
+ try {
306
+ const raw = JSON.parse(await readFile(filePath, "utf8"));
307
+ const entry = normalizeEntry(raw);
308
+ return entry ? { entry, filePath } : null;
309
+ }
310
+ catch {
311
+ return null;
312
+ }
313
+ }));
314
+ return records.filter((record) => record !== null);
315
+ }
316
+ async function loadMemories(config, filters = {}) {
317
+ return (await loadRecords(config))
318
+ .map((record) => record.entry)
319
+ .filter((entry) => matchesFilters(entry, filters))
320
+ .sort(sortByUpdatedDesc);
321
+ }
322
+ function sortByUpdatedDesc(left, right) {
323
+ const updatedDelta = Date.parse(right.updated_at) - Date.parse(left.updated_at);
324
+ if (updatedDelta !== 0)
325
+ return updatedDelta;
326
+ return left.id.localeCompare(right.id);
327
+ }
328
+ function matchesScopes(entry, scopes) {
329
+ if (!Array.isArray(scopes) || scopes.length === 0)
330
+ return true;
331
+ return scopes.some((scope) => {
332
+ if (scope.scopeType !== entry.scope_type)
333
+ return false;
334
+ if (scope.scopeType === "project")
335
+ return true;
336
+ return normalizeScopeKey(scope.scopeType, scope.scopeKey) === entry.scope_key;
337
+ });
338
+ }
339
+ function matchesFilters(entry, filters) {
340
+ if (filters.kind && normalizeKind(filters.kind) !== entry.kind) {
341
+ return false;
342
+ }
343
+ return matchesScopes(entry, filters.scopes);
344
+ }
345
+ function scopeBonus(scopeType) {
346
+ return SCOPE_PRIORITY[scopeType] * 0.08;
347
+ }
348
+ function recencyBonus(updatedAt) {
349
+ const ageDays = Math.max((Date.now() - Date.parse(updatedAt)) / 86_400_000, 0);
350
+ return clamp(1 - ageDays / 30) * 0.08;
351
+ }
352
+ function tokenize(value) {
353
+ return String(value || "")
354
+ .toLowerCase()
355
+ .split(/[^a-z0-9_]+/i)
356
+ .map((part) => part.trim())
357
+ .filter(Boolean);
358
+ }
359
+ function overlapScore(query, target) {
360
+ const queryTokens = tokenize(query);
361
+ const targetTokens = new Set(tokenize(target));
362
+ if (queryTokens.length === 0 || targetTokens.size === 0)
363
+ return 0;
364
+ let hits = 0;
365
+ for (const token of queryTokens) {
366
+ if (targetTokens.has(token)) {
367
+ hits += 1;
368
+ }
369
+ }
370
+ return hits / queryTokens.length;
371
+ }
372
+ function tagBonus(entry, queryTokens) {
373
+ if (queryTokens.length === 0 || entry.tags.length === 0)
374
+ return 0;
375
+ const tags = new Set(entry.tags.flatMap((tag) => tokenize(tag)));
376
+ let hits = 0;
377
+ for (const token of queryTokens) {
378
+ if (tags.has(token)) {
379
+ hits += 1;
380
+ }
381
+ }
382
+ return Math.min(hits * 0.06, 0.18);
383
+ }
384
+ function searchScore(entry, query) {
385
+ const normalizedQuery = normalizeText(query).toLowerCase();
386
+ if (!normalizedQuery)
387
+ return 0;
388
+ const haystack = `${entry.text} ${entry.tags.join(" ")}`;
389
+ const lexical = overlapScore(normalizedQuery, haystack);
390
+ const queryTokens = tokenize(normalizedQuery);
391
+ const textTokens = tokenize(entry.text);
392
+ const exactHits = queryTokens.filter((token) => textTokens.includes(token)).length;
393
+ const exactPhrase = entry.text.toLowerCase().includes(normalizedQuery) ? 0.24 : 0;
394
+ return (lexical * 0.58 +
395
+ Math.min(exactHits * 0.05, 0.2) +
396
+ tagBonus(entry, queryTokens) +
397
+ scopeBonus(entry.scope_type) +
398
+ recencyBonus(entry.updated_at) +
399
+ exactPhrase);
400
+ }
401
+ async function findRecordById(config, id) {
402
+ const targetId = typeof id === "string" ? id.trim() : "";
403
+ if (!targetId)
404
+ return null;
405
+ return (await loadRecords(config)).find((record) => record.entry.id === targetId) ?? null;
406
+ }
407
+ async function ensureEntryDir(config, entry) {
408
+ await mkdir(getScopeDir(config, entry.scope_type, entry.scope_key), { recursive: true });
409
+ }
410
+ async function pruneEmptyDirectories(startDir, stopDir) {
411
+ let current = startDir;
412
+ while (current.startsWith(stopDir) && current !== stopDir) {
413
+ let entries;
414
+ try {
415
+ entries = await readdir(current);
416
+ }
417
+ catch (error) {
418
+ if (error.code === "ENOENT") {
419
+ break;
420
+ }
421
+ throw error;
422
+ }
423
+ if (entries.length > 0)
424
+ break;
425
+ await rm(current, { recursive: true, force: true });
426
+ current = dirname(current);
427
+ }
428
+ }
429
+ function resolveLimit(config, value) {
430
+ const fallback = config.defaultSearchLimit;
431
+ if (typeof value !== "number" || !Number.isFinite(value))
432
+ return fallback;
433
+ return Math.max(1, Math.floor(value));
434
+ }
435
+ function readPositiveInteger(value) {
436
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
437
+ return Math.round(value);
438
+ }
439
+ return undefined;
440
+ }
441
+ async function readOptionalText(path) {
442
+ try {
443
+ return await readFile(path, "utf8");
444
+ }
445
+ catch (error) {
446
+ if (error.code === "ENOENT") {
447
+ return undefined;
448
+ }
449
+ throw error;
450
+ }
451
+ }
452
+ //# sourceMappingURL=memory-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-store.js","sourceRoot":"","sources":["../../src/plugins/memory-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { type Plugin } from "@opencode-ai/plugin";
2
+ export declare const MemoryPlugin: Plugin;