@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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +83 -0
  3. package/dist/commands/doctor.d.ts +7 -0
  4. package/dist/commands/doctor.d.ts.map +1 -0
  5. package/dist/commands/doctor.js +315 -0
  6. package/dist/commands/doctor.js.map +1 -0
  7. package/dist/commands/init.d.ts +8 -0
  8. package/dist/commands/init.d.ts.map +1 -0
  9. package/dist/commands/init.js +181 -0
  10. package/dist/commands/init.js.map +1 -0
  11. package/dist/commands/run.d.ts +9 -0
  12. package/dist/commands/run.d.ts.map +1 -0
  13. package/dist/commands/run.js +117 -0
  14. package/dist/commands/run.js.map +1 -0
  15. package/dist/commands/status.d.ts +6 -0
  16. package/dist/commands/status.d.ts.map +1 -0
  17. package/dist/commands/status.js +147 -0
  18. package/dist/commands/status.js.map +1 -0
  19. package/dist/commands/upgrade.d.ts +9 -0
  20. package/dist/commands/upgrade.d.ts.map +1 -0
  21. package/dist/commands/upgrade.js +409 -0
  22. package/dist/commands/upgrade.js.map +1 -0
  23. package/dist/commands/version.d.ts +7 -0
  24. package/dist/commands/version.d.ts.map +1 -0
  25. package/dist/commands/version.js +57 -0
  26. package/dist/commands/version.js.map +1 -0
  27. package/dist/index.d.ts +3 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +103 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/lib/checksum.d.ts +3 -0
  32. package/dist/lib/checksum.d.ts.map +1 -0
  33. package/dist/lib/checksum.js +11 -0
  34. package/dist/lib/checksum.js.map +1 -0
  35. package/dist/lib/claude.d.ts +22 -0
  36. package/dist/lib/claude.d.ts.map +1 -0
  37. package/dist/lib/claude.js +50 -0
  38. package/dist/lib/claude.js.map +1 -0
  39. package/dist/lib/detect.d.ts +3 -0
  40. package/dist/lib/detect.d.ts.map +1 -0
  41. package/dist/lib/detect.js +28 -0
  42. package/dist/lib/detect.js.map +1 -0
  43. package/dist/lib/files.d.ts +28 -0
  44. package/dist/lib/files.d.ts.map +1 -0
  45. package/dist/lib/files.js +92 -0
  46. package/dist/lib/files.js.map +1 -0
  47. package/dist/lib/manifest-parser.d.ts +6 -0
  48. package/dist/lib/manifest-parser.d.ts.map +1 -0
  49. package/dist/lib/manifest-parser.js +108 -0
  50. package/dist/lib/manifest-parser.js.map +1 -0
  51. package/dist/lib/merge-prompt.d.ts +30 -0
  52. package/dist/lib/merge-prompt.d.ts.map +1 -0
  53. package/dist/lib/merge-prompt.js +113 -0
  54. package/dist/lib/merge-prompt.js.map +1 -0
  55. package/dist/lib/registry.d.ts +6 -0
  56. package/dist/lib/registry.d.ts.map +1 -0
  57. package/dist/lib/registry.js +19 -0
  58. package/dist/lib/registry.js.map +1 -0
  59. package/dist/lib/template.d.ts +7 -0
  60. package/dist/lib/template.d.ts.map +1 -0
  61. package/dist/lib/template.js +22 -0
  62. package/dist/lib/template.js.map +1 -0
  63. package/dist/lib/version-file.d.ts +5 -0
  64. package/dist/lib/version-file.d.ts.map +1 -0
  65. package/dist/lib/version-file.js +21 -0
  66. package/dist/lib/version-file.js.map +1 -0
  67. package/dist/types.d.ts +54 -0
  68. package/dist/types.d.ts.map +1 -0
  69. package/dist/types.js +2 -0
  70. package/dist/types.js.map +1 -0
  71. package/package.json +44 -0
  72. package/templates/.claude/agents/vault-adversarial-auditor.md +99 -0
  73. package/templates/.claude/agents/vault-constitutional-reviewer.md +59 -0
  74. package/templates/.claude/agents/vault-contradiction-analyst.md +86 -0
  75. package/templates/.claude/agents/vault-critic.md +73 -0
  76. package/templates/.claude/agents/vault-ideator.md +59 -0
  77. package/templates/.claude/agents/vault-meta-reviewer.md +90 -0
  78. package/templates/.claude/agents/vault-researcher.md +85 -0
  79. package/templates/.claude/agents/vault-synthesizer.md +63 -0
  80. package/templates/.claude/skills/vault/SKILL.md +96 -0
  81. package/templates/.claude/skills/vault-audit/SKILL.md +21 -0
  82. package/templates/.claude/skills/vault-decide/SKILL.md +29 -0
  83. package/templates/.claude/skills/vault-fieldnote/SKILL.md +27 -0
  84. package/templates/.claude/skills/vault-ideas/SKILL.md +24 -0
  85. package/templates/.claude/skills/vault-queue/SKILL.md +28 -0
  86. package/templates/.claude/skills/vault-review/SKILL.md +35 -0
  87. package/templates/.claude/skills/vault-status/SKILL.md +23 -0
  88. package/templates/BOOTSTRAP.md +77 -0
  89. package/templates/infrastructure.json +38 -0
  90. package/templates/research-vault/VAULT_CONSTITUTION.md +307 -0
  91. package/templates/research-vault/VAULT_PROTOCOL.md +432 -0
  92. package/templates/research-vault/archive/.gitkeep +0 -0
  93. package/templates/research-vault/decision-briefs/.gitkeep +0 -0
  94. package/templates/research-vault/distilled/.gitkeep +0 -0
  95. package/templates/research-vault/governance/DESIGN_ORIGINS.md +214 -0
  96. package/templates/research-vault/ideas/.gitkeep +0 -0
  97. package/templates/research-vault/inbox/.gitkeep +0 -0
  98. package/templates/research-vault/integrated/.gitkeep +0 -0
  99. package/templates/research-vault/logs/.gitkeep +0 -0
  100. package/templates/research-vault/project-context/.gitkeep +0 -0
  101. package/templates/research-vault/project-context/FIELD_NOTES.md +28 -0
  102. package/templates/research-vault/project-context/REFERENCES.md +48 -0
  103. package/templates/research-vault/research-queue/briefs/.gitkeep +0 -0
@@ -0,0 +1,117 @@
1
+ import { spawn } from "node:child_process";
2
+ import chalk from "chalk";
3
+ import { detectVault } from "../lib/detect.js";
4
+ import { isClaudeAvailable } from "../lib/claude.js";
5
+ const ALLOWED_TOOLS = [
6
+ "Read",
7
+ "Grep",
8
+ "Glob",
9
+ "WebSearch",
10
+ "WebFetch",
11
+ "Write",
12
+ "Edit",
13
+ "Agent",
14
+ "Task",
15
+ ];
16
+ const PERMISSIONS_TABLE = [
17
+ { tool: "Read, Grep, Glob", allowed: true, rationale: "Read codebase and vault files" },
18
+ { tool: "WebSearch, WebFetch", allowed: true, rationale: "Conduct research" },
19
+ { tool: "Write, Edit", allowed: true, rationale: "Write vault files (protocol restricts to research-vault/)" },
20
+ { tool: "Agent", allowed: true, rationale: "Dispatch sub-agents for parallel research roles" },
21
+ { tool: "Task", allowed: true, rationale: "Track progress within the orchestration session" },
22
+ { tool: "Bash", allowed: false, rationale: "No arbitrary command execution needed" },
23
+ { tool: "NotebookEdit", allowed: false, rationale: "Not applicable to vault operations" },
24
+ ];
25
+ export async function runCommand(options) {
26
+ if (options.explainPermissions) {
27
+ printPermissions();
28
+ return;
29
+ }
30
+ const projectDir = process.cwd();
31
+ const detection = await detectVault(projectDir);
32
+ if (detection.status === "none") {
33
+ console.log(chalk.yellow("No vault found. Run `rvault init` first."));
34
+ return;
35
+ }
36
+ const available = await isClaudeAvailable();
37
+ if (!available) {
38
+ console.log(chalk.red("Claude CLI not found in PATH."));
39
+ console.log(chalk.dim("Install Claude Code, then run this command again."));
40
+ console.log(chalk.dim("Or run /vault directly inside Claude Code."));
41
+ return;
42
+ }
43
+ let prompt = "Read .claude/skills/vault/SKILL.md and execute it.";
44
+ if (options.quickBurn) {
45
+ prompt += " Quick burn mode — maximize throughput.";
46
+ }
47
+ const maxTurns = options.maxTurns ?? 60;
48
+ const args = [
49
+ "-p",
50
+ prompt,
51
+ "--allowedTools",
52
+ ALLOWED_TOOLS.join(","),
53
+ "--max-turns",
54
+ String(maxTurns),
55
+ ];
56
+ console.log(chalk.dim(`Running: claude ${args.join(" ")}`));
57
+ console.log();
58
+ if (options.background) {
59
+ const { writeFile } = await import("node:fs/promises");
60
+ const { join } = await import("node:path");
61
+ const logPath = join(projectDir, ".vault", "run-output.log");
62
+ const { mkdir } = await import("node:fs/promises");
63
+ await mkdir(join(projectDir, ".vault"), { recursive: true });
64
+ const child = spawn("claude", args, {
65
+ detached: true,
66
+ stdio: ["ignore", "pipe", "pipe"],
67
+ });
68
+ let output = "";
69
+ child.stdout?.on("data", (data) => {
70
+ output += data.toString();
71
+ });
72
+ child.stderr?.on("data", (data) => {
73
+ output += data.toString();
74
+ });
75
+ child.on("close", async () => {
76
+ await writeFile(logPath, output, "utf-8");
77
+ });
78
+ child.unref();
79
+ console.log(chalk.green(`Vault running in background (PID: ${child.pid}).`));
80
+ console.log(chalk.dim(`Output will be saved to .vault/run-output.log`));
81
+ return;
82
+ }
83
+ // Foreground: inherit stdio so user sees Claude's output
84
+ const child = spawn("claude", args, {
85
+ stdio: "inherit",
86
+ });
87
+ await new Promise((resolve, reject) => {
88
+ child.on("close", (code) => {
89
+ if (code === 0) {
90
+ resolve();
91
+ }
92
+ else {
93
+ reject(new Error(`Claude exited with code ${code}`));
94
+ }
95
+ });
96
+ child.on("error", reject);
97
+ });
98
+ }
99
+ function printPermissions() {
100
+ console.log(chalk.bold("Vault Run — Allowed Tools\n"));
101
+ console.log("The vault protocol's safety envelope (Protocol preamble): agents MAY");
102
+ console.log("search the web, read project files, and write to the vault directory.");
103
+ console.log("They MUST NOT modify project source code, run arbitrary executables,");
104
+ console.log("or access sensitive credentials.\n");
105
+ const maxTool = Math.max(...PERMISSIONS_TABLE.map((r) => r.tool.length));
106
+ console.log(` ${chalk.dim("Tool".padEnd(maxTool))} ${chalk.dim("Allowed")} ${chalk.dim("Rationale")}`);
107
+ console.log(` ${"─".repeat(maxTool)} ${"─".repeat(7)} ${"─".repeat(40)}`);
108
+ for (const row of PERMISSIONS_TABLE) {
109
+ const allowed = row.allowed
110
+ ? chalk.green("Yes".padEnd(7))
111
+ : chalk.red("No".padEnd(7));
112
+ console.log(` ${row.tool.padEnd(maxTool)} ${allowed} ${row.rationale}`);
113
+ }
114
+ console.log(chalk.dim("\nDefense in depth: --allowedTools enforces at the Claude Code level."));
115
+ console.log(chalk.dim("The protocol provides the policy layer (agents self-restrict)."));
116
+ }
117
+ //# sourceMappingURL=run.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run.js","sourceRoot":"","sources":["../../src/commands/run.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ interface StatusOptions {
2
+ json?: boolean;
3
+ }
4
+ export declare function statusCommand(options: StatusOptions): Promise<void>;
5
+ export {};
6
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAOA,UAAU,aAAa;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8IzE"}
@@ -0,0 +1,147 @@
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 { parseManifest } from "../lib/manifest-parser.js";
6
+ export async function statusCommand(options) {
7
+ const projectDir = process.cwd();
8
+ const detection = await detectVault(projectDir);
9
+ if (detection.status === "none") {
10
+ console.log(chalk.yellow("No vault found. Run `rvault init` first."));
11
+ return;
12
+ }
13
+ const manifest = await parseManifest(projectDir);
14
+ if (!manifest) {
15
+ console.log(chalk.yellow("MANIFEST.md not found. Run the vault bootstrap to create it."));
16
+ return;
17
+ }
18
+ // Gather additional data
19
+ const contradictionsCount = await countContradictions(projectDir);
20
+ const pendingDecisions = await countFiles(join(projectDir, "research-vault", "decision-briefs"));
21
+ const fieldNotesCount = await countFieldNotes(projectDir);
22
+ const inboxCount = await countFiles(join(projectDir, "research-vault", "inbox"));
23
+ if (options.json) {
24
+ console.log(JSON.stringify({
25
+ version: detection.version ?? "unmanaged",
26
+ counters: manifest.counters,
27
+ queue: {
28
+ total: manifest.queueItems.length,
29
+ pending: manifest.queueItems.filter((i) => i.status === "pending").length,
30
+ top3: manifest.queueItems
31
+ .filter((i) => i.status === "pending")
32
+ .sort((a, b) => a.priority - b.priority)
33
+ .slice(0, 3)
34
+ .map((i) => ({ topic: i.topic, priority: i.priority })),
35
+ },
36
+ contradictions: contradictionsCount,
37
+ pendingDecisions,
38
+ fieldNotes: fieldNotesCount,
39
+ inboxReports: inboxCount,
40
+ lastUpdated: manifest.lastUpdated,
41
+ health: manifest.health,
42
+ }, null, 2));
43
+ return;
44
+ }
45
+ // Formatted output
46
+ const c = manifest.counters;
47
+ console.log(chalk.bold("Vault Status"));
48
+ if (detection.version) {
49
+ console.log(chalk.dim(`Template: v${detection.version}`));
50
+ }
51
+ console.log();
52
+ // Counters with "due" indicators
53
+ console.log(chalk.bold("Cycle Counters:"));
54
+ console.log(` Research sessions: ${c.totalResearchSessions}`);
55
+ console.log(` Distilled → synthesis: ${c.reportsDistilledSinceSynthesis}` +
56
+ (c.reportsDistilledSinceSynthesis >= 3
57
+ ? chalk.cyan(" (synthesis due)")
58
+ : ""));
59
+ console.log(` Integrated → ideation: ${c.findingsIntegratedSinceIdeation}` +
60
+ (c.findingsIntegratedSinceIdeation >= 5
61
+ ? chalk.cyan(" (ideation due)")
62
+ : ""));
63
+ console.log(` Since meta-review: ${c.sessionsSinceMetaReview}` +
64
+ (c.sessionsSinceMetaReview >= 5
65
+ ? chalk.cyan(" (meta-review due)")
66
+ : ""));
67
+ console.log(` Since const. review: ${c.sessionsSinceConstitutionalReview}` +
68
+ (c.sessionsSinceConstitutionalReview >= 10
69
+ ? chalk.cyan(" (review due)")
70
+ : ""));
71
+ console.log(` Meta-research: ${c.metaResearchCompliance}`);
72
+ console.log();
73
+ // Queue
74
+ const pending = manifest.queueItems.filter((i) => i.status === "pending");
75
+ console.log(chalk.bold("Queue:"));
76
+ console.log(` ${pending.length} pending of ${manifest.queueItems.length} total`);
77
+ if (pending.length > 0) {
78
+ const top3 = pending.sort((a, b) => a.priority - b.priority).slice(0, 3);
79
+ for (const item of top3) {
80
+ const tag = item.tag && item.tag !== "—" ? chalk.dim(` [${item.tag}]`) : "";
81
+ console.log(` P${item.priority}: ${item.topic}${tag}`);
82
+ }
83
+ }
84
+ console.log();
85
+ // Attention items
86
+ const attention = [];
87
+ if (contradictionsCount > 0) {
88
+ attention.push(`${contradictionsCount} unresolved contradiction(s)`);
89
+ }
90
+ if (pendingDecisions > 0) {
91
+ attention.push(`${pendingDecisions} pending decision brief(s)`);
92
+ }
93
+ if (fieldNotesCount > 0) {
94
+ attention.push(`${fieldNotesCount} field note(s)`);
95
+ }
96
+ if (inboxCount > 0) {
97
+ attention.push(`${inboxCount} report(s) in inbox`);
98
+ }
99
+ if (attention.length > 0) {
100
+ console.log(chalk.bold("Attention:"));
101
+ for (const item of attention) {
102
+ console.log(` ${chalk.yellow("*")} ${item}`);
103
+ }
104
+ console.log();
105
+ }
106
+ // Last activity
107
+ if (manifest.recentActivity.length > 0) {
108
+ console.log(chalk.bold("Recent:"));
109
+ const recent = manifest.recentActivity.slice(0, 3);
110
+ for (const entry of recent) {
111
+ console.log(` ${chalk.dim(entry)}`);
112
+ }
113
+ }
114
+ }
115
+ async function countContradictions(projectDir) {
116
+ const filePath = join(projectDir, "research-vault", "integrated", "CONTRADICTIONS.md");
117
+ try {
118
+ const content = await readFile(filePath, "utf-8");
119
+ // Count unresolved entries
120
+ const matches = content.match(/\*\*Status\*\*:\s*unresolved/gi);
121
+ return matches ? matches.length : 0;
122
+ }
123
+ catch {
124
+ return 0;
125
+ }
126
+ }
127
+ async function countFieldNotes(projectDir) {
128
+ const filePath = join(projectDir, "research-vault", "project-context", "FIELD_NOTES.md");
129
+ try {
130
+ const content = await readFile(filePath, "utf-8");
131
+ const matches = content.match(/^### \d{4}-\d{2}-\d{2}/gm);
132
+ return matches ? matches.length : 0;
133
+ }
134
+ catch {
135
+ return 0;
136
+ }
137
+ }
138
+ async function countFiles(dirPath) {
139
+ try {
140
+ const entries = await readdir(dirPath);
141
+ return entries.filter((e) => e !== ".gitkeep").length;
142
+ }
143
+ catch {
144
+ return 0;
145
+ }
146
+ }
147
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ interface UpgradeOptions {
2
+ auto?: boolean;
3
+ review?: boolean;
4
+ dryRun?: boolean;
5
+ oneAtATime?: boolean;
6
+ }
7
+ export declare function upgradeCommand(options: UpgradeOptions): Promise<void>;
8
+ export {};
9
+ //# sourceMappingURL=upgrade.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"upgrade.d.ts","sourceRoot":"","sources":["../../src/commands/upgrade.ts"],"names":[],"mappings":"AAqBA,UAAU,cAAc;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CA+H3E"}