@mangold/rvault 0.1.0
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/LICENSE +21 -0
- package/README.md +83 -0
- package/dist/commands/doctor.d.ts +7 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +315 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +181 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/run.d.ts +9 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +117 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/status.d.ts +6 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +147 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/upgrade.d.ts +9 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +409 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/version.d.ts +7 -0
- package/dist/commands/version.d.ts.map +1 -0
- package/dist/commands/version.js +57 -0
- package/dist/commands/version.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +103 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/checksum.d.ts +3 -0
- package/dist/lib/checksum.d.ts.map +1 -0
- package/dist/lib/checksum.js +11 -0
- package/dist/lib/checksum.js.map +1 -0
- package/dist/lib/claude.d.ts +22 -0
- package/dist/lib/claude.d.ts.map +1 -0
- package/dist/lib/claude.js +50 -0
- package/dist/lib/claude.js.map +1 -0
- package/dist/lib/detect.d.ts +3 -0
- package/dist/lib/detect.d.ts.map +1 -0
- package/dist/lib/detect.js +28 -0
- package/dist/lib/detect.js.map +1 -0
- package/dist/lib/files.d.ts +28 -0
- package/dist/lib/files.d.ts.map +1 -0
- package/dist/lib/files.js +92 -0
- package/dist/lib/files.js.map +1 -0
- package/dist/lib/manifest-parser.d.ts +6 -0
- package/dist/lib/manifest-parser.d.ts.map +1 -0
- package/dist/lib/manifest-parser.js +108 -0
- package/dist/lib/manifest-parser.js.map +1 -0
- package/dist/lib/merge-prompt.d.ts +30 -0
- package/dist/lib/merge-prompt.d.ts.map +1 -0
- package/dist/lib/merge-prompt.js +113 -0
- package/dist/lib/merge-prompt.js.map +1 -0
- package/dist/lib/registry.d.ts +6 -0
- package/dist/lib/registry.d.ts.map +1 -0
- package/dist/lib/registry.js +19 -0
- package/dist/lib/registry.js.map +1 -0
- package/dist/lib/template.d.ts +7 -0
- package/dist/lib/template.d.ts.map +1 -0
- package/dist/lib/template.js +22 -0
- package/dist/lib/template.js.map +1 -0
- package/dist/lib/version-file.d.ts +5 -0
- package/dist/lib/version-file.d.ts.map +1 -0
- package/dist/lib/version-file.js +21 -0
- package/dist/lib/version-file.js.map +1 -0
- package/dist/types.d.ts +54 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/package.json +44 -0
- package/templates/.claude/agents/vault-adversarial-auditor.md +99 -0
- package/templates/.claude/agents/vault-constitutional-reviewer.md +59 -0
- package/templates/.claude/agents/vault-contradiction-analyst.md +86 -0
- package/templates/.claude/agents/vault-critic.md +73 -0
- package/templates/.claude/agents/vault-ideator.md +59 -0
- package/templates/.claude/agents/vault-meta-reviewer.md +90 -0
- package/templates/.claude/agents/vault-researcher.md +85 -0
- package/templates/.claude/agents/vault-synthesizer.md +63 -0
- package/templates/.claude/skills/vault/SKILL.md +96 -0
- package/templates/.claude/skills/vault-audit/SKILL.md +21 -0
- package/templates/.claude/skills/vault-decide/SKILL.md +29 -0
- package/templates/.claude/skills/vault-fieldnote/SKILL.md +27 -0
- package/templates/.claude/skills/vault-ideas/SKILL.md +24 -0
- package/templates/.claude/skills/vault-queue/SKILL.md +28 -0
- package/templates/.claude/skills/vault-review/SKILL.md +35 -0
- package/templates/.claude/skills/vault-status/SKILL.md +23 -0
- package/templates/BOOTSTRAP.md +77 -0
- package/templates/infrastructure.json +38 -0
- package/templates/research-vault/VAULT_CONSTITUTION.md +307 -0
- package/templates/research-vault/VAULT_PROTOCOL.md +432 -0
- package/templates/research-vault/archive/.gitkeep +0 -0
- package/templates/research-vault/decision-briefs/.gitkeep +0 -0
- package/templates/research-vault/distilled/.gitkeep +0 -0
- package/templates/research-vault/governance/DESIGN_ORIGINS.md +214 -0
- package/templates/research-vault/ideas/.gitkeep +0 -0
- package/templates/research-vault/inbox/.gitkeep +0 -0
- package/templates/research-vault/integrated/.gitkeep +0 -0
- package/templates/research-vault/logs/.gitkeep +0 -0
- package/templates/research-vault/project-context/.gitkeep +0 -0
- package/templates/research-vault/project-context/FIELD_NOTES.md +28 -0
- package/templates/research-vault/project-context/REFERENCES.md +48 -0
- package/templates/research-vault/research-queue/briefs/.gitkeep +0 -0
|
@@ -0,0 +1,409 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readFile, mkdir, writeFile } from "node:fs/promises";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import { detectVault } from "../lib/detect.js";
|
|
6
|
+
import { hashFile } from "../lib/checksum.js";
|
|
7
|
+
import { getManifest, getTemplatePath } from "../lib/template.js";
|
|
8
|
+
import { readVaultVersion, writeVaultVersion } from "../lib/version-file.js";
|
|
9
|
+
import { fileExists, copyTemplateFile, cacheOriginal, computeTemplateHashes } from "../lib/files.js";
|
|
10
|
+
import { getCliVersion } from "./version.js";
|
|
11
|
+
import { initCommand } from "./init.js";
|
|
12
|
+
import { generateMergePrompt, estimateTokens, batchFiles, parseMergeResponse, } from "../lib/merge-prompt.js";
|
|
13
|
+
import { isClaudeAvailable, invokeClaudePrompt, savePromptToFile } from "../lib/claude.js";
|
|
14
|
+
export async function upgradeCommand(options) {
|
|
15
|
+
const projectDir = process.cwd();
|
|
16
|
+
// Step 1: Check for existing vault
|
|
17
|
+
const detection = await detectVault(projectDir);
|
|
18
|
+
if (detection.status === "none") {
|
|
19
|
+
console.log(chalk.yellow("No vault found. Run `rvault init` first."));
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
if (detection.status === "unmanaged") {
|
|
23
|
+
console.log(chalk.yellow("Unmanaged vault detected. Running adoption first..."));
|
|
24
|
+
console.log();
|
|
25
|
+
await initCommand({ noBootstrap: true });
|
|
26
|
+
console.log();
|
|
27
|
+
}
|
|
28
|
+
const vaultVersion = await readVaultVersion(projectDir);
|
|
29
|
+
if (!vaultVersion) {
|
|
30
|
+
console.log(chalk.red("Could not read .vault-version after adoption."));
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
// Step 2: Compare versions
|
|
34
|
+
const newVersion = getCliVersion();
|
|
35
|
+
if (vaultVersion.version === newVersion) {
|
|
36
|
+
console.log(chalk.green(`Already at version ${newVersion}. Nothing to upgrade.`));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
console.log(`Upgrading: ${chalk.dim(vaultVersion.version)} → ${chalk.cyan(newVersion)}`);
|
|
40
|
+
console.log();
|
|
41
|
+
// Step 3: Classify files
|
|
42
|
+
const manifest = await getManifest();
|
|
43
|
+
const classified = await classifyFiles(projectDir, vaultVersion, manifest);
|
|
44
|
+
const newFiles = classified.filter((f) => f.category === "new_file");
|
|
45
|
+
const unmodified = classified.filter((f) => f.category === "unmodified");
|
|
46
|
+
const modified = classified.filter((f) => f.category === "modified");
|
|
47
|
+
const removedClean = classified.filter((f) => f.category === "removed_clean");
|
|
48
|
+
const removedModified = classified.filter((f) => f.category === "removed_modified");
|
|
49
|
+
// Report classification
|
|
50
|
+
if (newFiles.length > 0) {
|
|
51
|
+
console.log(chalk.green(` + ${newFiles.length} new file(s)`));
|
|
52
|
+
}
|
|
53
|
+
if (unmodified.length > 0) {
|
|
54
|
+
console.log(chalk.dim(` = ${unmodified.length} unmodified (will replace silently)`));
|
|
55
|
+
}
|
|
56
|
+
if (modified.length > 0) {
|
|
57
|
+
console.log(chalk.yellow(` ~ ${modified.length} locally modified (need merge):`));
|
|
58
|
+
for (const f of modified) {
|
|
59
|
+
console.log(` ${chalk.dim("~")} ${f.path}`);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
if (removedClean.length > 0) {
|
|
63
|
+
console.log(chalk.dim(` - ${removedClean.length} removed from template`));
|
|
64
|
+
}
|
|
65
|
+
if (removedModified.length > 0) {
|
|
66
|
+
console.log(chalk.yellow(` ! ${removedModified.length} removed from template but locally modified (kept):`));
|
|
67
|
+
for (const f of removedModified) {
|
|
68
|
+
console.log(` ${chalk.dim("!")} ${f.path}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
console.log();
|
|
72
|
+
if (options.dryRun) {
|
|
73
|
+
console.log(chalk.dim("Dry run — no changes made."));
|
|
74
|
+
return;
|
|
75
|
+
}
|
|
76
|
+
// Step 4: Apply Tier 1 (deterministic)
|
|
77
|
+
const spinner = ora("Applying deterministic updates...").start();
|
|
78
|
+
for (const f of newFiles) {
|
|
79
|
+
await copyTemplateFile(f.path, projectDir);
|
|
80
|
+
}
|
|
81
|
+
for (const f of unmodified) {
|
|
82
|
+
await copyTemplateFile(f.path, projectDir);
|
|
83
|
+
}
|
|
84
|
+
// We don't delete removedClean files for now — safer to leave them.
|
|
85
|
+
// Users can clean up manually if desired.
|
|
86
|
+
spinner.succeed(`Applied ${newFiles.length + unmodified.length} deterministic updates.`);
|
|
87
|
+
// Step 5: Handle Tier 2 (modified files)
|
|
88
|
+
if (modified.length > 0) {
|
|
89
|
+
await handleModifiedFiles(projectDir, modified, vaultVersion.version, newVersion, options);
|
|
90
|
+
}
|
|
91
|
+
// Step 6: Update originals cache and version file
|
|
92
|
+
const updateSpinner = ora("Updating version metadata...").start();
|
|
93
|
+
for (const file of manifest.infrastructure) {
|
|
94
|
+
await cacheOriginal(file, projectDir);
|
|
95
|
+
}
|
|
96
|
+
const newHashes = await computeTemplateHashes(manifest);
|
|
97
|
+
const updatedVersion = {
|
|
98
|
+
version: newVersion,
|
|
99
|
+
installedAt: new Date().toISOString(),
|
|
100
|
+
cliVersion: newVersion,
|
|
101
|
+
files: newHashes,
|
|
102
|
+
};
|
|
103
|
+
await writeVaultVersion(projectDir, updatedVersion);
|
|
104
|
+
updateSpinner.succeed("Version metadata updated.");
|
|
105
|
+
// Step 7: Tier 3 — Post-upgrade verification
|
|
106
|
+
console.log();
|
|
107
|
+
await verifyUpgrade(projectDir, manifest);
|
|
108
|
+
console.log();
|
|
109
|
+
console.log(chalk.green(`Upgrade complete: v${newVersion}`));
|
|
110
|
+
}
|
|
111
|
+
async function classifyFiles(projectDir, vaultVersion, manifest) {
|
|
112
|
+
const classified = [];
|
|
113
|
+
const newInfraSet = new Set(manifest.infrastructure);
|
|
114
|
+
const oldFileSet = new Set(Object.keys(vaultVersion.files));
|
|
115
|
+
// Classify current template files
|
|
116
|
+
for (const path of manifest.infrastructure) {
|
|
117
|
+
const diskPath = join(projectDir, path);
|
|
118
|
+
const originalHash = vaultVersion.files[path]?.hash;
|
|
119
|
+
if (!(await fileExists(diskPath))) {
|
|
120
|
+
classified.push({ path, category: "new_file" });
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
if (!originalHash) {
|
|
124
|
+
// File exists on disk but wasn't tracked before — treat as new
|
|
125
|
+
classified.push({ path, category: "new_file" });
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const diskHash = await hashFile(diskPath);
|
|
129
|
+
if (diskHash === originalHash) {
|
|
130
|
+
classified.push({ path, category: "unmodified" });
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
classified.push({ path, category: "modified" });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Check for files that were in old version but not in new template
|
|
137
|
+
for (const path of oldFileSet) {
|
|
138
|
+
if (!newInfraSet.has(path)) {
|
|
139
|
+
const diskPath = join(projectDir, path);
|
|
140
|
+
if (!(await fileExists(diskPath)))
|
|
141
|
+
continue;
|
|
142
|
+
const diskHash = await hashFile(diskPath);
|
|
143
|
+
const originalHash = vaultVersion.files[path]?.hash;
|
|
144
|
+
if (diskHash === originalHash) {
|
|
145
|
+
classified.push({ path, category: "removed_clean" });
|
|
146
|
+
}
|
|
147
|
+
else {
|
|
148
|
+
classified.push({ path, category: "removed_modified" });
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
return classified;
|
|
153
|
+
}
|
|
154
|
+
async function handleModifiedFiles(projectDir, modified, oldVersion, newVersion, options) {
|
|
155
|
+
// Build merge file data
|
|
156
|
+
const mergeFiles = [];
|
|
157
|
+
for (const f of modified) {
|
|
158
|
+
const originalPath = join(projectDir, ".vault", "originals", f.path);
|
|
159
|
+
const diskPath = join(projectDir, f.path);
|
|
160
|
+
const templatePath = getTemplatePath(f.path);
|
|
161
|
+
let original;
|
|
162
|
+
try {
|
|
163
|
+
original = await readFile(originalPath, "utf-8");
|
|
164
|
+
}
|
|
165
|
+
catch {
|
|
166
|
+
// Originals cache missing — try to use template as fallback
|
|
167
|
+
console.log(chalk.dim(` Note: original for ${f.path} not cached. Using template as baseline.`));
|
|
168
|
+
original = await readFile(templatePath, "utf-8");
|
|
169
|
+
}
|
|
170
|
+
const current = await readFile(diskPath, "utf-8");
|
|
171
|
+
const newContent = await readFile(templatePath, "utf-8");
|
|
172
|
+
mergeFiles.push({
|
|
173
|
+
path: f.path,
|
|
174
|
+
original,
|
|
175
|
+
current,
|
|
176
|
+
new: newContent,
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
// Generate prompt
|
|
180
|
+
const batches = options.oneAtATime
|
|
181
|
+
? mergeFiles.map((f) => [f])
|
|
182
|
+
: batchFiles(mergeFiles);
|
|
183
|
+
for (let i = 0; i < batches.length; i++) {
|
|
184
|
+
const batch = batches[i];
|
|
185
|
+
const prompt = generateMergePrompt({
|
|
186
|
+
oldVersion,
|
|
187
|
+
newVersion,
|
|
188
|
+
files: batch,
|
|
189
|
+
});
|
|
190
|
+
const tokens = estimateTokens(prompt);
|
|
191
|
+
const batchLabel = batches.length > 1 ? ` (batch ${i + 1}/${batches.length})` : "";
|
|
192
|
+
console.log(chalk.dim(` Estimated merge cost${batchLabel}: ~${tokens.toLocaleString()} tokens across ${batch.length} file(s)`));
|
|
193
|
+
if (options.auto) {
|
|
194
|
+
await autoMerge(projectDir, prompt, batch);
|
|
195
|
+
}
|
|
196
|
+
else if (options.review) {
|
|
197
|
+
await reviewMerge(projectDir, prompt, batch);
|
|
198
|
+
}
|
|
199
|
+
else {
|
|
200
|
+
await saveForManualMerge(projectDir, prompt, batch);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
async function autoMerge(projectDir, prompt, files) {
|
|
205
|
+
const available = await isClaudeAvailable();
|
|
206
|
+
if (!available) {
|
|
207
|
+
console.log(chalk.yellow(" Claude CLI not found. Falling back to saving merge prompt."));
|
|
208
|
+
await saveForManualMerge(projectDir, prompt, files);
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
const spinner = ora("Running LLM merge via claude -p...").start();
|
|
212
|
+
const result = await invokeClaudePrompt(prompt, { maxTurns: 10 });
|
|
213
|
+
if (!result.success) {
|
|
214
|
+
spinner.fail("Claude invocation failed.");
|
|
215
|
+
console.log(chalk.red(` Error: ${result.error}`));
|
|
216
|
+
console.log(chalk.dim(" Falling back to saving merge prompt."));
|
|
217
|
+
await saveForManualMerge(projectDir, prompt, files);
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
const merged = parseMergeResponse(result.output);
|
|
221
|
+
let applied = 0;
|
|
222
|
+
for (const file of files) {
|
|
223
|
+
const mergedContent = merged.get(file.path);
|
|
224
|
+
if (mergedContent) {
|
|
225
|
+
await writeFile(join(projectDir, file.path), mergedContent, "utf-8");
|
|
226
|
+
applied++;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.log(chalk.yellow(` Warning: No merge result for ${file.path}. Saved as .new/.local.`));
|
|
230
|
+
await writeFile(join(projectDir, file.path + ".new"), file.new, "utf-8");
|
|
231
|
+
await writeFile(join(projectDir, file.path + ".local"), file.current, "utf-8");
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
// Check for conflict markers in response
|
|
235
|
+
if (result.output.includes("### CONFLICT:")) {
|
|
236
|
+
spinner.warn(`Merged ${applied} file(s) — conflicts detected. Review the output below.`);
|
|
237
|
+
// Extract and display conflict sections
|
|
238
|
+
const conflictPattern = /### CONFLICT:[\s\S]*?(?=### MERGED:|---|\z)/g;
|
|
239
|
+
const conflicts = result.output.match(conflictPattern);
|
|
240
|
+
if (conflicts) {
|
|
241
|
+
for (const conflict of conflicts) {
|
|
242
|
+
console.log();
|
|
243
|
+
console.log(chalk.yellow(conflict.trim()));
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
else {
|
|
248
|
+
spinner.succeed(`Merged ${applied} file(s) automatically.`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
async function reviewMerge(projectDir, prompt, files) {
|
|
252
|
+
const available = await isClaudeAvailable();
|
|
253
|
+
if (!available) {
|
|
254
|
+
console.log(chalk.yellow(" Claude CLI not found. Falling back to saving merge prompt."));
|
|
255
|
+
await saveForManualMerge(projectDir, prompt, files);
|
|
256
|
+
return;
|
|
257
|
+
}
|
|
258
|
+
const spinner = ora("Running LLM merge via claude -p...").start();
|
|
259
|
+
const result = await invokeClaudePrompt(prompt, { maxTurns: 10 });
|
|
260
|
+
if (!result.success) {
|
|
261
|
+
spinner.fail("Claude invocation failed.");
|
|
262
|
+
console.log(chalk.dim(" Falling back to saving merge prompt."));
|
|
263
|
+
await saveForManualMerge(projectDir, prompt, files);
|
|
264
|
+
return;
|
|
265
|
+
}
|
|
266
|
+
spinner.succeed("Merge complete. Review each file:");
|
|
267
|
+
const merged = parseMergeResponse(result.output);
|
|
268
|
+
for (const file of files) {
|
|
269
|
+
const mergedContent = merged.get(file.path);
|
|
270
|
+
if (!mergedContent) {
|
|
271
|
+
console.log(chalk.yellow(`\n No merge result for ${file.path}. Saving both versions.`));
|
|
272
|
+
await writeFile(join(projectDir, file.path + ".new"), file.new, "utf-8");
|
|
273
|
+
await writeFile(join(projectDir, file.path + ".local"), file.current, "utf-8");
|
|
274
|
+
continue;
|
|
275
|
+
}
|
|
276
|
+
console.log(`\n${chalk.cyan(` File: ${file.path}`)}`);
|
|
277
|
+
console.log(chalk.dim(" Merged result preview (first 20 lines):"));
|
|
278
|
+
const previewLines = mergedContent.split("\n").slice(0, 20);
|
|
279
|
+
for (const line of previewLines) {
|
|
280
|
+
console.log(chalk.dim(` ${line}`));
|
|
281
|
+
}
|
|
282
|
+
if (mergedContent.split("\n").length > 20) {
|
|
283
|
+
console.log(chalk.dim(` ... (${mergedContent.split("\n").length} lines total)`));
|
|
284
|
+
}
|
|
285
|
+
// In non-interactive mode (piped), just apply
|
|
286
|
+
if (!process.stdin.isTTY) {
|
|
287
|
+
await writeFile(join(projectDir, file.path), mergedContent, "utf-8");
|
|
288
|
+
console.log(chalk.green(` Applied (non-interactive mode).`));
|
|
289
|
+
continue;
|
|
290
|
+
}
|
|
291
|
+
// Interactive: ask user
|
|
292
|
+
const readline = await import("node:readline");
|
|
293
|
+
const rl = readline.createInterface({
|
|
294
|
+
input: process.stdin,
|
|
295
|
+
output: process.stdout,
|
|
296
|
+
});
|
|
297
|
+
const answer = await new Promise((resolve) => {
|
|
298
|
+
rl.question(chalk.yellow(" Accept this merge? [y/n] "), (ans) => {
|
|
299
|
+
rl.close();
|
|
300
|
+
resolve(ans.trim().toLowerCase());
|
|
301
|
+
});
|
|
302
|
+
});
|
|
303
|
+
if (answer === "y" || answer === "yes") {
|
|
304
|
+
await writeFile(join(projectDir, file.path), mergedContent, "utf-8");
|
|
305
|
+
console.log(chalk.green(" Applied."));
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
await writeFile(join(projectDir, file.path + ".new"), file.new, "utf-8");
|
|
309
|
+
await writeFile(join(projectDir, file.path + ".local"), file.current, "utf-8");
|
|
310
|
+
console.log(chalk.dim(` Saved as ${file.path}.new and ${file.path}.local for manual reconciliation.`));
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
async function saveForManualMerge(projectDir, prompt, files) {
|
|
315
|
+
const mergeDir = join(projectDir, ".vault");
|
|
316
|
+
await mkdir(mergeDir, { recursive: true });
|
|
317
|
+
const promptPath = join(mergeDir, "merge-prompt.md");
|
|
318
|
+
await savePromptToFile(prompt, promptPath);
|
|
319
|
+
// Also save .new files alongside originals
|
|
320
|
+
for (const file of files) {
|
|
321
|
+
await writeFile(join(projectDir, file.path + ".new"), file.new, "utf-8");
|
|
322
|
+
}
|
|
323
|
+
console.log();
|
|
324
|
+
console.log(` Merge prompt saved to ${chalk.cyan(".vault/merge-prompt.md")}`);
|
|
325
|
+
console.log(` New template versions saved as ${chalk.cyan("*.new")} files.`);
|
|
326
|
+
console.log();
|
|
327
|
+
console.log(" Next steps:");
|
|
328
|
+
console.log(` ${chalk.cyan("rvault upgrade --auto")} Run the merge via Claude`);
|
|
329
|
+
console.log(` ${chalk.cyan("rvault upgrade --review")} Run and review each merge`);
|
|
330
|
+
console.log(chalk.dim(" Or paste .vault/merge-prompt.md into Claude Code manually."));
|
|
331
|
+
}
|
|
332
|
+
async function verifyUpgrade(projectDir, manifest) {
|
|
333
|
+
console.log("Post-upgrade verification:");
|
|
334
|
+
let allPassed = true;
|
|
335
|
+
// Check all infrastructure files exist
|
|
336
|
+
let missingCount = 0;
|
|
337
|
+
for (const file of manifest.infrastructure) {
|
|
338
|
+
if (!(await fileExists(join(projectDir, file)))) {
|
|
339
|
+
console.log(chalk.red(` FAIL Missing: ${file}`));
|
|
340
|
+
missingCount++;
|
|
341
|
+
allPassed = false;
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
if (missingCount === 0) {
|
|
345
|
+
console.log(chalk.green(` PASS All ${manifest.infrastructure.length} infrastructure files present`));
|
|
346
|
+
}
|
|
347
|
+
// Check for deprecated patterns
|
|
348
|
+
const deprecatedPatterns = [
|
|
349
|
+
"Meta-research cycles in last 10 sessions",
|
|
350
|
+
"Reports synthesized since last ideation",
|
|
351
|
+
];
|
|
352
|
+
for (const pattern of deprecatedPatterns) {
|
|
353
|
+
let found = false;
|
|
354
|
+
for (const file of manifest.infrastructure) {
|
|
355
|
+
const filePath = join(projectDir, file);
|
|
356
|
+
try {
|
|
357
|
+
const content = await readFile(filePath, "utf-8");
|
|
358
|
+
if (content.includes(pattern)) {
|
|
359
|
+
console.log(chalk.yellow(` WARN Deprecated pattern "${pattern}" found in ${file}`));
|
|
360
|
+
found = true;
|
|
361
|
+
allPassed = false;
|
|
362
|
+
}
|
|
363
|
+
}
|
|
364
|
+
catch {
|
|
365
|
+
// File missing — already reported above
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
if (!found) {
|
|
369
|
+
console.log(chalk.green(` PASS No deprecated "${pattern}"`));
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Check agent files reference constitution
|
|
373
|
+
const agentFiles = manifest.infrastructure.filter((f) => f.startsWith(".claude/agents/"));
|
|
374
|
+
let constitutionRefs = 0;
|
|
375
|
+
for (const file of agentFiles) {
|
|
376
|
+
try {
|
|
377
|
+
const content = await readFile(join(projectDir, file), "utf-8");
|
|
378
|
+
if (content.includes("VAULT_CONSTITUTION.md")) {
|
|
379
|
+
constitutionRefs++;
|
|
380
|
+
}
|
|
381
|
+
else {
|
|
382
|
+
console.log(chalk.yellow(` WARN ${file} does not reference VAULT_CONSTITUTION.md`));
|
|
383
|
+
allPassed = false;
|
|
384
|
+
}
|
|
385
|
+
}
|
|
386
|
+
catch {
|
|
387
|
+
// Already reported
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
if (constitutionRefs === agentFiles.length) {
|
|
391
|
+
console.log(chalk.green(` PASS All ${agentFiles.length} agent files reference constitution`));
|
|
392
|
+
}
|
|
393
|
+
// Version consistency
|
|
394
|
+
const vv = await readVaultVersion(projectDir);
|
|
395
|
+
if (vv) {
|
|
396
|
+
const cliVersion = getCliVersion();
|
|
397
|
+
if (vv.version === cliVersion) {
|
|
398
|
+
console.log(chalk.green(` PASS .vault-version matches CLI (v${cliVersion})`));
|
|
399
|
+
}
|
|
400
|
+
else {
|
|
401
|
+
console.log(chalk.yellow(` WARN .vault-version (${vv.version}) != CLI (${cliVersion})`));
|
|
402
|
+
allPassed = false;
|
|
403
|
+
}
|
|
404
|
+
}
|
|
405
|
+
if (allPassed) {
|
|
406
|
+
console.log(chalk.green("\n All checks passed."));
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
//# sourceMappingURL=upgrade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upgrade.js","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"AAaA,wBAAgB,aAAa,IAAI,MAAM,CAOtC;AAED,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAuD3E"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { readFileSync } from "node:fs";
|
|
2
|
+
import { join } from "node:path";
|
|
3
|
+
import { fileURLToPath } from "node:url";
|
|
4
|
+
import { dirname } from "node:path";
|
|
5
|
+
import chalk from "chalk";
|
|
6
|
+
import { readVaultVersion } from "../lib/version-file.js";
|
|
7
|
+
import { getLatestVersion } from "../lib/registry.js";
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = dirname(__filename);
|
|
10
|
+
let _cliVersion = null;
|
|
11
|
+
export function getCliVersion() {
|
|
12
|
+
if (_cliVersion)
|
|
13
|
+
return _cliVersion;
|
|
14
|
+
// From dist/commands/version.js -> package root
|
|
15
|
+
const pkgPath = join(__dirname, "..", "..", "package.json");
|
|
16
|
+
const pkg = JSON.parse(readFileSync(pkgPath, "utf-8"));
|
|
17
|
+
_cliVersion = pkg.version;
|
|
18
|
+
return _cliVersion;
|
|
19
|
+
}
|
|
20
|
+
export async function versionCommand(options) {
|
|
21
|
+
const projectDir = process.cwd();
|
|
22
|
+
const cliVersion = getCliVersion();
|
|
23
|
+
const vaultVersion = await readVaultVersion(projectDir);
|
|
24
|
+
const latestVersion = await getLatestVersion();
|
|
25
|
+
if (options.json) {
|
|
26
|
+
console.log(JSON.stringify({
|
|
27
|
+
cli: cliVersion,
|
|
28
|
+
installed: vaultVersion?.version ?? null,
|
|
29
|
+
latest: latestVersion,
|
|
30
|
+
upgradeAvailable: latestVersion !== null &&
|
|
31
|
+
vaultVersion !== null &&
|
|
32
|
+
latestVersion !== vaultVersion.version,
|
|
33
|
+
}, null, 2));
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
console.log(`${chalk.dim("CLI version:")} ${cliVersion}`);
|
|
37
|
+
if (vaultVersion) {
|
|
38
|
+
console.log(`${chalk.dim("Installed version:")} ${vaultVersion.version}`);
|
|
39
|
+
console.log(`${chalk.dim("Installed at:")} ${vaultVersion.installedAt}`);
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
console.log(`${chalk.dim("Installed version:")} ${chalk.yellow("not installed")}`);
|
|
43
|
+
}
|
|
44
|
+
if (latestVersion) {
|
|
45
|
+
console.log(`${chalk.dim("Latest available:")} ${latestVersion}`);
|
|
46
|
+
if (vaultVersion &&
|
|
47
|
+
latestVersion !== vaultVersion.version) {
|
|
48
|
+
console.log();
|
|
49
|
+
console.log(chalk.cyan(` Upgrade available: ${vaultVersion.version} → ${latestVersion}`));
|
|
50
|
+
console.log(chalk.dim(` Run: rvault upgrade`));
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
console.log(`${chalk.dim("Latest available:")} ${chalk.dim("(could not reach npm registry)")}`);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=version.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"version.js","sourceRoot":"","sources":["../../src/commands/version.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { getCliVersion } from "./commands/version.js";
|
|
4
|
+
import { initCommand } from "./commands/init.js";
|
|
5
|
+
import { upgradeCommand } from "./commands/upgrade.js";
|
|
6
|
+
import { statusCommand } from "./commands/status.js";
|
|
7
|
+
import { doctorCommand } from "./commands/doctor.js";
|
|
8
|
+
import { runCommand } from "./commands/run.js";
|
|
9
|
+
import { versionCommand } from "./commands/version.js";
|
|
10
|
+
const program = new Command();
|
|
11
|
+
program
|
|
12
|
+
.name("rvault")
|
|
13
|
+
.description("CLI tool for the Research Vault — an autonomous research system for coding agents")
|
|
14
|
+
.version(getCliVersion());
|
|
15
|
+
program
|
|
16
|
+
.command("init")
|
|
17
|
+
.description("Initialize a Research Vault in the current project")
|
|
18
|
+
.option("-s, --scope <description>", "Constrain the vault's focus")
|
|
19
|
+
.option("--no-bootstrap", "Skip bootstrap prompt generation")
|
|
20
|
+
.option("--force", "Overwrite existing vault files")
|
|
21
|
+
.action(async (options) => {
|
|
22
|
+
try {
|
|
23
|
+
await initCommand(options);
|
|
24
|
+
}
|
|
25
|
+
catch (err) {
|
|
26
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
27
|
+
process.exit(1);
|
|
28
|
+
}
|
|
29
|
+
});
|
|
30
|
+
program
|
|
31
|
+
.command("upgrade")
|
|
32
|
+
.description("Upgrade vault infrastructure files to the latest template")
|
|
33
|
+
.option("--auto", "Invoke Claude for merges, apply automatically")
|
|
34
|
+
.option("--review", "Invoke Claude for merges, review each before applying")
|
|
35
|
+
.option("--dry-run", "Show what would change without modifying anything")
|
|
36
|
+
.option("--one-at-a-time", "Merge files individually instead of batching")
|
|
37
|
+
.action(async (options) => {
|
|
38
|
+
try {
|
|
39
|
+
await upgradeCommand(options);
|
|
40
|
+
}
|
|
41
|
+
catch (err) {
|
|
42
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
program
|
|
47
|
+
.command("status")
|
|
48
|
+
.description("Show current vault state (free, no tokens)")
|
|
49
|
+
.option("--json", "Output as JSON")
|
|
50
|
+
.action(async (options) => {
|
|
51
|
+
try {
|
|
52
|
+
await statusCommand(options);
|
|
53
|
+
}
|
|
54
|
+
catch (err) {
|
|
55
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
program
|
|
60
|
+
.command("doctor")
|
|
61
|
+
.description("Run diagnostic checks on the vault")
|
|
62
|
+
.option("--json", "Output as JSON")
|
|
63
|
+
.option("--fix", "Generate fix prompt for issues found")
|
|
64
|
+
.action(async (options) => {
|
|
65
|
+
try {
|
|
66
|
+
await doctorCommand(options);
|
|
67
|
+
}
|
|
68
|
+
catch (err) {
|
|
69
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
70
|
+
process.exit(1);
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
program
|
|
74
|
+
.command("run")
|
|
75
|
+
.description("Run a vault cycle via claude -p")
|
|
76
|
+
.option("--quick-burn", "Maximize throughput")
|
|
77
|
+
.option("--max-turns <n>", "Override max turns (default: 60)", parseInt)
|
|
78
|
+
.option("--background", "Run detached, log output to file")
|
|
79
|
+
.option("--explain-permissions", "Show allowed tools and exit")
|
|
80
|
+
.action(async (options) => {
|
|
81
|
+
try {
|
|
82
|
+
await runCommand(options);
|
|
83
|
+
}
|
|
84
|
+
catch (err) {
|
|
85
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
86
|
+
process.exit(1);
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
program
|
|
90
|
+
.command("version")
|
|
91
|
+
.description("Show installed and available versions")
|
|
92
|
+
.option("--json", "Output as JSON")
|
|
93
|
+
.action(async (options) => {
|
|
94
|
+
try {
|
|
95
|
+
await versionCommand(options);
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
console.error(`Error: ${err instanceof Error ? err.message : String(err)}`);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
program.parse();
|
|
103
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"checksum.d.ts","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"AAGA,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAG5D;AAED,wBAAsB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAGhE"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { createHash } from "node:crypto";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
export function hashContent(content) {
|
|
4
|
+
const hash = createHash("sha256").update(content).digest("hex");
|
|
5
|
+
return `sha256:${hash}`;
|
|
6
|
+
}
|
|
7
|
+
export async function hashFile(filePath) {
|
|
8
|
+
const content = await readFile(filePath);
|
|
9
|
+
return hashContent(content);
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=checksum.js.map
|