@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
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
# rvault
|
|
2
|
+
|
|
3
|
+
CLI tool for the **Research Vault** — a self-governing autonomous research
|
|
4
|
+
system for coding agents. Converts idle agent capacity into decision-ready
|
|
5
|
+
knowledge.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
npm install -g rvault
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
Or use without installing:
|
|
14
|
+
|
|
15
|
+
```bash
|
|
16
|
+
npx rvault init
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
## Quick Start
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
# 1. Initialize a vault in your project
|
|
23
|
+
cd your-project
|
|
24
|
+
rvault init
|
|
25
|
+
|
|
26
|
+
# 2. Open Claude Code (restart if already open so it discovers the new skills)
|
|
27
|
+
|
|
28
|
+
# 3. Run the vault
|
|
29
|
+
# Inside Claude Code: /vault
|
|
30
|
+
# Or from terminal: rvault run
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Commands
|
|
34
|
+
|
|
35
|
+
| Command | What it does |
|
|
36
|
+
|---------|-------------|
|
|
37
|
+
| `rvault init` | Scaffold a Research Vault in the current project |
|
|
38
|
+
| `rvault upgrade` | Upgrade infrastructure files to the latest template |
|
|
39
|
+
| `rvault version` | Show installed and available versions |
|
|
40
|
+
| `rvault status` | Quick vault status (free, no tokens) |
|
|
41
|
+
| `rvault doctor` | Diagnostic checks for vault health |
|
|
42
|
+
| `rvault run` | Run a vault cycle via `claude -p` |
|
|
43
|
+
|
|
44
|
+
## Claude Code Skills
|
|
45
|
+
|
|
46
|
+
Once the vault is installed, these skills are available inside Claude Code:
|
|
47
|
+
|
|
48
|
+
| Skill | What it does |
|
|
49
|
+
|-------|-------------|
|
|
50
|
+
| `/vault` | Run a research cycle |
|
|
51
|
+
| `/vault-status` | Quick check-in (counters, queue, attention items) |
|
|
52
|
+
| `/vault-ideas` | Browse and act on idea proposals |
|
|
53
|
+
| `/vault-queue` | View, add, reprioritize research topics |
|
|
54
|
+
| `/vault-decide` | Record a decision informed by vault research |
|
|
55
|
+
| `/vault-review` | Full catch-up after being away |
|
|
56
|
+
| `/vault-audit` | Challenge claims with the adversarial auditor |
|
|
57
|
+
| `/vault-fieldnote` | Log a development outcome back to the vault |
|
|
58
|
+
|
|
59
|
+
## Upgrading
|
|
60
|
+
|
|
61
|
+
```bash
|
|
62
|
+
# Check if an upgrade is available
|
|
63
|
+
rvault version
|
|
64
|
+
|
|
65
|
+
# Upgrade — unmodified files are replaced silently.
|
|
66
|
+
# Files you've modified are flagged for LLM-assisted three-way merge.
|
|
67
|
+
rvault upgrade
|
|
68
|
+
|
|
69
|
+
# Auto-merge modified files via Claude Code
|
|
70
|
+
rvault upgrade --auto
|
|
71
|
+
|
|
72
|
+
# Review each merge before applying
|
|
73
|
+
rvault upgrade --review
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Architecture
|
|
77
|
+
|
|
78
|
+
See `templates/research-vault/VAULT_CONSTITUTION.md` and
|
|
79
|
+
`templates/research-vault/VAULT_PROTOCOL.md` for the full system design.
|
|
80
|
+
|
|
81
|
+
## License
|
|
82
|
+
|
|
83
|
+
MIT
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AASA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AASD,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmDzE"}
|
|
@@ -0,0 +1,315 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readFile, readdir } from "node:fs/promises";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import { detectVault } from "../lib/detect.js";
|
|
5
|
+
import { getManifest } from "../lib/template.js";
|
|
6
|
+
import { readVaultVersion } from "../lib/version-file.js";
|
|
7
|
+
import { fileExists } from "../lib/files.js";
|
|
8
|
+
import { hashFile } from "../lib/checksum.js";
|
|
9
|
+
export async function doctorCommand(options) {
|
|
10
|
+
const projectDir = process.cwd();
|
|
11
|
+
const detection = await detectVault(projectDir);
|
|
12
|
+
if (detection.status === "none") {
|
|
13
|
+
console.log(chalk.yellow("No vault found. Run `rvault init` first."));
|
|
14
|
+
return;
|
|
15
|
+
}
|
|
16
|
+
const results = [];
|
|
17
|
+
// Run all checks
|
|
18
|
+
await checkInfrastructureFiles(projectDir, results);
|
|
19
|
+
await checkVersionConsistency(projectDir, results);
|
|
20
|
+
await checkConstitutionReferences(projectDir, results);
|
|
21
|
+
await checkDeprecatedPatterns(projectDir, results);
|
|
22
|
+
await checkOrphanedQueueItems(projectDir, results);
|
|
23
|
+
await checkInboxStaleness(projectDir, results);
|
|
24
|
+
await checkDirectoryStructure(projectDir, results);
|
|
25
|
+
if (options.json) {
|
|
26
|
+
console.log(JSON.stringify(results, null, 2));
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
// Display results
|
|
30
|
+
console.log(chalk.bold("Vault Doctor\n"));
|
|
31
|
+
const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
|
|
32
|
+
results.sort((a, b) => severityOrder[a.severity] - severityOrder[b.severity]);
|
|
33
|
+
let hasIssues = false;
|
|
34
|
+
for (const r of results) {
|
|
35
|
+
const icon = r.passed ? chalk.green("PASS") : severityIcon(r.severity);
|
|
36
|
+
console.log(` ${icon} ${r.message}`);
|
|
37
|
+
if (!r.passed)
|
|
38
|
+
hasIssues = true;
|
|
39
|
+
}
|
|
40
|
+
console.log();
|
|
41
|
+
if (hasIssues) {
|
|
42
|
+
const critCount = results.filter((r) => !r.passed && r.severity === "critical").length;
|
|
43
|
+
const warnCount = results.filter((r) => !r.passed && r.severity !== "critical").length;
|
|
44
|
+
if (critCount > 0) {
|
|
45
|
+
console.log(chalk.red(`${critCount} critical issue(s) found.`));
|
|
46
|
+
}
|
|
47
|
+
if (warnCount > 0) {
|
|
48
|
+
console.log(chalk.yellow(`${warnCount} warning(s).`));
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
console.log(chalk.green("All checks passed."));
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function severityIcon(severity) {
|
|
56
|
+
switch (severity) {
|
|
57
|
+
case "critical":
|
|
58
|
+
return chalk.red("CRIT");
|
|
59
|
+
case "high":
|
|
60
|
+
return chalk.red("HIGH");
|
|
61
|
+
case "medium":
|
|
62
|
+
return chalk.yellow("WARN");
|
|
63
|
+
case "low":
|
|
64
|
+
return chalk.dim("LOW ");
|
|
65
|
+
default:
|
|
66
|
+
return chalk.dim("????");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
async function checkInfrastructureFiles(projectDir, results) {
|
|
70
|
+
const manifest = await getManifest();
|
|
71
|
+
let missing = 0;
|
|
72
|
+
for (const file of manifest.infrastructure) {
|
|
73
|
+
if (!(await fileExists(join(projectDir, file)))) {
|
|
74
|
+
missing++;
|
|
75
|
+
results.push({
|
|
76
|
+
severity: "critical",
|
|
77
|
+
name: "infrastructure_missing",
|
|
78
|
+
passed: false,
|
|
79
|
+
message: `Missing infrastructure file: ${file}`,
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
if (missing === 0) {
|
|
84
|
+
results.push({
|
|
85
|
+
severity: "critical",
|
|
86
|
+
name: "infrastructure_complete",
|
|
87
|
+
passed: true,
|
|
88
|
+
message: `All ${manifest.infrastructure.length} infrastructure files present`,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
async function checkVersionConsistency(projectDir, results) {
|
|
93
|
+
const vv = await readVaultVersion(projectDir);
|
|
94
|
+
if (!vv) {
|
|
95
|
+
results.push({
|
|
96
|
+
severity: "critical",
|
|
97
|
+
name: "version_file",
|
|
98
|
+
passed: false,
|
|
99
|
+
message: ".vault-version file missing",
|
|
100
|
+
});
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
// Check a few files for hash consistency
|
|
104
|
+
let mismatches = 0;
|
|
105
|
+
const filesToCheck = Object.keys(vv.files).slice(0, 5);
|
|
106
|
+
for (const file of filesToCheck) {
|
|
107
|
+
const diskPath = join(projectDir, file);
|
|
108
|
+
if (await fileExists(diskPath)) {
|
|
109
|
+
const diskHash = await hashFile(diskPath);
|
|
110
|
+
if (diskHash !== vv.files[file].hash) {
|
|
111
|
+
mismatches++;
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// This isn't a failure — mismatches mean local modifications, which are expected
|
|
116
|
+
results.push({
|
|
117
|
+
severity: "critical",
|
|
118
|
+
name: "version_file_readable",
|
|
119
|
+
passed: true,
|
|
120
|
+
message: `.vault-version present (v${vv.version}, ${mismatches} file(s) modified)`,
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
async function checkConstitutionReferences(projectDir, results) {
|
|
124
|
+
const manifest = await getManifest();
|
|
125
|
+
const agentFiles = manifest.infrastructure.filter((f) => f.startsWith(".claude/agents/"));
|
|
126
|
+
let missing = 0;
|
|
127
|
+
for (const file of agentFiles) {
|
|
128
|
+
try {
|
|
129
|
+
const content = await readFile(join(projectDir, file), "utf-8");
|
|
130
|
+
if (!content.includes("VAULT_CONSTITUTION.md")) {
|
|
131
|
+
missing++;
|
|
132
|
+
results.push({
|
|
133
|
+
severity: "high",
|
|
134
|
+
name: "constitution_reference",
|
|
135
|
+
passed: false,
|
|
136
|
+
message: `${file} does not reference VAULT_CONSTITUTION.md`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Missing file already reported
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
if (missing === 0) {
|
|
145
|
+
results.push({
|
|
146
|
+
severity: "high",
|
|
147
|
+
name: "constitution_references",
|
|
148
|
+
passed: true,
|
|
149
|
+
message: "All agent files reference the constitution",
|
|
150
|
+
});
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
async function checkDeprecatedPatterns(projectDir, results) {
|
|
154
|
+
const deprecated = [
|
|
155
|
+
"Meta-research cycles in last 10 sessions",
|
|
156
|
+
"Reports synthesized since last ideation",
|
|
157
|
+
];
|
|
158
|
+
const manifest = await getManifest();
|
|
159
|
+
for (const pattern of deprecated) {
|
|
160
|
+
let found = false;
|
|
161
|
+
for (const file of manifest.infrastructure) {
|
|
162
|
+
try {
|
|
163
|
+
const content = await readFile(join(projectDir, file), "utf-8");
|
|
164
|
+
if (content.includes(pattern)) {
|
|
165
|
+
found = true;
|
|
166
|
+
results.push({
|
|
167
|
+
severity: "high",
|
|
168
|
+
name: "deprecated_pattern",
|
|
169
|
+
passed: false,
|
|
170
|
+
message: `Deprecated pattern "${pattern}" in ${file}`,
|
|
171
|
+
});
|
|
172
|
+
break;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
catch {
|
|
176
|
+
// Skip
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
if (!found) {
|
|
180
|
+
results.push({
|
|
181
|
+
severity: "high",
|
|
182
|
+
name: "deprecated_pattern",
|
|
183
|
+
passed: true,
|
|
184
|
+
message: `No deprecated "${pattern}"`,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
async function checkOrphanedQueueItems(projectDir, results) {
|
|
190
|
+
const queuePath = join(projectDir, "research-vault", "research-queue", "QUEUE.md");
|
|
191
|
+
try {
|
|
192
|
+
const content = await readFile(queuePath, "utf-8");
|
|
193
|
+
const pendingTopics = content.match(/\|\s*([^|]+?)\s*\|\s*pending/gi);
|
|
194
|
+
if (!pendingTopics) {
|
|
195
|
+
results.push({
|
|
196
|
+
severity: "medium",
|
|
197
|
+
name: "orphaned_queue",
|
|
198
|
+
passed: true,
|
|
199
|
+
message: "No pending queue items to check",
|
|
200
|
+
});
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
const briefsDir = join(projectDir, "research-vault", "research-queue", "briefs");
|
|
204
|
+
let briefs;
|
|
205
|
+
try {
|
|
206
|
+
briefs = await readdir(briefsDir);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
briefs = [];
|
|
210
|
+
}
|
|
211
|
+
const orphaned = pendingTopics.length - briefs.filter((b) => b !== ".gitkeep").length;
|
|
212
|
+
if (orphaned > 0) {
|
|
213
|
+
results.push({
|
|
214
|
+
severity: "medium",
|
|
215
|
+
name: "orphaned_queue",
|
|
216
|
+
passed: false,
|
|
217
|
+
message: `~${orphaned} pending topic(s) may lack pre-briefs`,
|
|
218
|
+
});
|
|
219
|
+
}
|
|
220
|
+
else {
|
|
221
|
+
results.push({
|
|
222
|
+
severity: "medium",
|
|
223
|
+
name: "orphaned_queue",
|
|
224
|
+
passed: true,
|
|
225
|
+
message: "All pending topics appear to have pre-briefs",
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
catch {
|
|
230
|
+
results.push({
|
|
231
|
+
severity: "medium",
|
|
232
|
+
name: "orphaned_queue",
|
|
233
|
+
passed: true,
|
|
234
|
+
message: "QUEUE.md not found (pre-bootstrap)",
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
async function checkInboxStaleness(projectDir, results) {
|
|
239
|
+
const inboxPath = join(projectDir, "research-vault", "inbox");
|
|
240
|
+
try {
|
|
241
|
+
const entries = await readdir(inboxPath);
|
|
242
|
+
const reportDirs = entries.filter((e) => e !== ".gitkeep");
|
|
243
|
+
if (reportDirs.length === 0) {
|
|
244
|
+
results.push({
|
|
245
|
+
severity: "low",
|
|
246
|
+
name: "inbox_staleness",
|
|
247
|
+
passed: true,
|
|
248
|
+
message: "Inbox is empty",
|
|
249
|
+
});
|
|
250
|
+
return;
|
|
251
|
+
}
|
|
252
|
+
// Check for old entries (>30 days)
|
|
253
|
+
const now = Date.now();
|
|
254
|
+
let stale = 0;
|
|
255
|
+
for (const dir of reportDirs) {
|
|
256
|
+
const dateMatch = dir.match(/^(\d{4}-\d{2}-\d{2})/);
|
|
257
|
+
if (dateMatch) {
|
|
258
|
+
const entryDate = new Date(dateMatch[1]).getTime();
|
|
259
|
+
if (now - entryDate > 30 * 24 * 60 * 60 * 1000) {
|
|
260
|
+
stale++;
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (stale > 0) {
|
|
265
|
+
results.push({
|
|
266
|
+
severity: "low",
|
|
267
|
+
name: "inbox_staleness",
|
|
268
|
+
passed: false,
|
|
269
|
+
message: `${stale} inbox report(s) older than 30 days (should be distilled or archived)`,
|
|
270
|
+
});
|
|
271
|
+
}
|
|
272
|
+
else {
|
|
273
|
+
results.push({
|
|
274
|
+
severity: "low",
|
|
275
|
+
name: "inbox_staleness",
|
|
276
|
+
passed: true,
|
|
277
|
+
message: `${reportDirs.length} inbox report(s), all recent`,
|
|
278
|
+
});
|
|
279
|
+
}
|
|
280
|
+
}
|
|
281
|
+
catch {
|
|
282
|
+
results.push({
|
|
283
|
+
severity: "low",
|
|
284
|
+
name: "inbox_staleness",
|
|
285
|
+
passed: true,
|
|
286
|
+
message: "Inbox directory not accessible",
|
|
287
|
+
});
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
async function checkDirectoryStructure(projectDir, results) {
|
|
291
|
+
const manifest = await getManifest();
|
|
292
|
+
let missing = 0;
|
|
293
|
+
for (const dir of manifest.directories) {
|
|
294
|
+
if (!(await fileExists(join(projectDir, dir)))) {
|
|
295
|
+
missing++;
|
|
296
|
+
}
|
|
297
|
+
}
|
|
298
|
+
if (missing > 0) {
|
|
299
|
+
results.push({
|
|
300
|
+
severity: "low",
|
|
301
|
+
name: "directory_structure",
|
|
302
|
+
passed: false,
|
|
303
|
+
message: `${missing} expected directory(ies) missing`,
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
else {
|
|
307
|
+
results.push({
|
|
308
|
+
severity: "low",
|
|
309
|
+
name: "directory_structure",
|
|
310
|
+
passed: true,
|
|
311
|
+
message: `All ${manifest.directories.length} directories present`,
|
|
312
|
+
});
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAmBA,UAAU,WAAW;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,wBAAsB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBrE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
import { join } from "node:path";
|
|
2
|
+
import { readFile } from "node:fs/promises";
|
|
3
|
+
import chalk from "chalk";
|
|
4
|
+
import ora from "ora";
|
|
5
|
+
import { detectVault } from "../lib/detect.js";
|
|
6
|
+
import { appendLineIfMissing, cacheOriginal, computeTemplateHashes, copyTemplateFile, ensureDirectory, fileExists, } from "../lib/files.js";
|
|
7
|
+
import { hashFile } from "../lib/checksum.js";
|
|
8
|
+
import { getManifest, getTemplatePath } from "../lib/template.js";
|
|
9
|
+
import { writeVaultVersion } from "../lib/version-file.js";
|
|
10
|
+
import { getCliVersion } from "./version.js";
|
|
11
|
+
export async function initCommand(options) {
|
|
12
|
+
const projectDir = process.cwd();
|
|
13
|
+
const detection = await detectVault(projectDir);
|
|
14
|
+
if (detection.status === "managed" && !options.force) {
|
|
15
|
+
console.log(chalk.yellow(`Vault already installed (v${detection.version}). Use --force to reinitialize.`));
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
if (detection.status === "unmanaged" && !options.force) {
|
|
19
|
+
await adoptExistingVault(projectDir);
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
await scaffoldVault(projectDir, options);
|
|
23
|
+
}
|
|
24
|
+
async function scaffoldVault(projectDir, options) {
|
|
25
|
+
const manifest = await getManifest();
|
|
26
|
+
const spinner = ora("Scaffolding Research Vault...").start();
|
|
27
|
+
// 1. Create directories
|
|
28
|
+
for (const dir of manifest.directories) {
|
|
29
|
+
await ensureDirectory(dir, projectDir);
|
|
30
|
+
}
|
|
31
|
+
spinner.text = "Copying infrastructure files...";
|
|
32
|
+
// 2. Copy infrastructure files
|
|
33
|
+
for (const file of manifest.infrastructure) {
|
|
34
|
+
await copyTemplateFile(file, projectDir);
|
|
35
|
+
await cacheOriginal(file, projectDir);
|
|
36
|
+
}
|
|
37
|
+
// 3. Copy content templates (only if they don't already exist)
|
|
38
|
+
for (const file of manifest.content_templates) {
|
|
39
|
+
const destPath = join(projectDir, file);
|
|
40
|
+
if (!(await fileExists(destPath))) {
|
|
41
|
+
await copyTemplateFile(file, projectDir);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
// 4. Create .vault-version
|
|
45
|
+
spinner.text = "Creating version file...";
|
|
46
|
+
const fileRecords = await computeTemplateHashes(manifest);
|
|
47
|
+
const cliVersion = getCliVersion();
|
|
48
|
+
const vaultVersion = {
|
|
49
|
+
version: cliVersion,
|
|
50
|
+
installedAt: new Date().toISOString(),
|
|
51
|
+
cliVersion,
|
|
52
|
+
files: fileRecords,
|
|
53
|
+
};
|
|
54
|
+
await writeVaultVersion(projectDir, vaultVersion);
|
|
55
|
+
// 5. Update .gitignore
|
|
56
|
+
const gitignorePath = join(projectDir, ".gitignore");
|
|
57
|
+
await appendLineIfMissing(gitignorePath, ".vault/");
|
|
58
|
+
await appendLineIfMissing(gitignorePath, ".claude/settings.local.json");
|
|
59
|
+
spinner.succeed(chalk.green(`Research Vault initialized (v${cliVersion})`));
|
|
60
|
+
// Summary
|
|
61
|
+
console.log();
|
|
62
|
+
console.log(` ${chalk.dim("Infrastructure:")} ${manifest.infrastructure.length} files`);
|
|
63
|
+
console.log(` ${chalk.dim("Directories:")} ${manifest.directories.length} created`);
|
|
64
|
+
console.log(` ${chalk.dim("Version file:")} .vault-version`);
|
|
65
|
+
console.log(` ${chalk.dim("Originals cache:")} .vault/originals/`);
|
|
66
|
+
console.log();
|
|
67
|
+
// Bootstrap prompt
|
|
68
|
+
if (!options.noBootstrap) {
|
|
69
|
+
await offerBootstrap(projectDir, options.scope);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
console.log(chalk.dim("Skipped bootstrap. Run /vault-review or paste BOOTSTRAP.md into your agent when ready."));
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function adoptExistingVault(projectDir) {
|
|
76
|
+
console.log(chalk.yellow("Existing vault detected (unmanaged)."));
|
|
77
|
+
const spinner = ora("Analyzing installed files...").start();
|
|
78
|
+
const manifest = await getManifest();
|
|
79
|
+
const templateHashes = await computeTemplateHashes(manifest);
|
|
80
|
+
let matched = 0;
|
|
81
|
+
let modified = 0;
|
|
82
|
+
const modifiedFiles = [];
|
|
83
|
+
for (const file of manifest.infrastructure) {
|
|
84
|
+
const diskPath = join(projectDir, file);
|
|
85
|
+
if (!(await fileExists(diskPath))) {
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
const diskHash = await hashFile(diskPath);
|
|
89
|
+
if (templateHashes[file] && diskHash === templateHashes[file].hash) {
|
|
90
|
+
matched++;
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
modified++;
|
|
94
|
+
modifiedFiles.push(file);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
spinner.succeed("File analysis complete.");
|
|
98
|
+
console.log();
|
|
99
|
+
console.log(` ${chalk.green(`${matched}`)} files match current template`);
|
|
100
|
+
if (modified > 0) {
|
|
101
|
+
console.log(` ${chalk.yellow(`${modified}`)} files have local modifications:`);
|
|
102
|
+
for (const f of modifiedFiles) {
|
|
103
|
+
console.log(` ${chalk.dim("~")} ${f}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
console.log();
|
|
107
|
+
// Create .vault-version with template hashes as the baseline.
|
|
108
|
+
// Modified files will be detected during upgrade because their disk
|
|
109
|
+
// content won't match these template hashes.
|
|
110
|
+
const cliVersion = getCliVersion();
|
|
111
|
+
const vaultVersion = {
|
|
112
|
+
version: "0.0.0",
|
|
113
|
+
installedAt: new Date().toISOString(),
|
|
114
|
+
cliVersion,
|
|
115
|
+
files: templateHashes,
|
|
116
|
+
};
|
|
117
|
+
await writeVaultVersion(projectDir, vaultVersion);
|
|
118
|
+
// Cache originals from the template (not from disk)
|
|
119
|
+
const cacheSpinner = ora("Caching template originals...").start();
|
|
120
|
+
for (const file of manifest.infrastructure) {
|
|
121
|
+
await cacheOriginal(file, projectDir);
|
|
122
|
+
}
|
|
123
|
+
cacheSpinner.succeed("Cached template originals.");
|
|
124
|
+
// Ensure directories exist
|
|
125
|
+
for (const dir of manifest.directories) {
|
|
126
|
+
await ensureDirectory(dir, projectDir);
|
|
127
|
+
}
|
|
128
|
+
// Update .gitignore
|
|
129
|
+
const gitignorePath = join(projectDir, ".gitignore");
|
|
130
|
+
await appendLineIfMissing(gitignorePath, ".vault/");
|
|
131
|
+
await appendLineIfMissing(gitignorePath, ".claude/settings.local.json");
|
|
132
|
+
console.log();
|
|
133
|
+
console.log(chalk.green("Vault adopted as CLI-managed at baseline v0.0.0."));
|
|
134
|
+
console.log(`Run ${chalk.cyan("rvault upgrade")} to update to the latest template.`);
|
|
135
|
+
}
|
|
136
|
+
async function offerBootstrap(projectDir, scope) {
|
|
137
|
+
const bootstrapPath = getTemplatePath("BOOTSTRAP.md");
|
|
138
|
+
let bootstrapContent;
|
|
139
|
+
try {
|
|
140
|
+
bootstrapContent = await readFile(bootstrapPath, "utf-8");
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
console.log(chalk.dim("Bootstrap template not found in package."));
|
|
144
|
+
return;
|
|
145
|
+
}
|
|
146
|
+
// Extract just the prompt part (everything after the --- separator)
|
|
147
|
+
const parts = bootstrapContent.split("\n---\n");
|
|
148
|
+
let prompt = parts.length > 1 ? parts.slice(1).join("\n---\n").trim() : bootstrapContent;
|
|
149
|
+
if (scope) {
|
|
150
|
+
prompt =
|
|
151
|
+
`SCOPE CONSTRAINT: Focus this vault on: ${scope}\n\n` + prompt;
|
|
152
|
+
}
|
|
153
|
+
// Check if claude CLI is available
|
|
154
|
+
const claudeAvailable = await isClaudeAvailable();
|
|
155
|
+
if (claudeAvailable) {
|
|
156
|
+
console.log(`To generate project-specific goals and queue, run:`);
|
|
157
|
+
console.log(chalk.cyan(` rvault run --bootstrap`));
|
|
158
|
+
console.log(chalk.dim(` Or paste the bootstrap prompt into Claude Code manually.`));
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
// Save bootstrap prompt for manual use
|
|
162
|
+
const promptPath = join(projectDir, "research-vault", "BOOTSTRAP-PROMPT.md");
|
|
163
|
+
const { writeFile: wf } = await import("node:fs/promises");
|
|
164
|
+
await wf(promptPath, prompt, "utf-8");
|
|
165
|
+
console.log(`Bootstrap prompt saved to ${chalk.cyan("research-vault/BOOTSTRAP-PROMPT.md")}`);
|
|
166
|
+
console.log(chalk.dim("Paste it into your coding agent to complete setup."));
|
|
167
|
+
}
|
|
168
|
+
}
|
|
169
|
+
async function isClaudeAvailable() {
|
|
170
|
+
try {
|
|
171
|
+
const { execFile } = await import("node:child_process");
|
|
172
|
+
const { promisify } = await import("node:util");
|
|
173
|
+
const execAsync = promisify(execFile);
|
|
174
|
+
await execAsync("claude", ["--version"], { timeout: 3000 });
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"AA2BA,UAAU,UAAU;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,kBAAkB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED,wBAAsB,UAAU,CAAC,OAAO,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CA0FnE"}
|