contextvault-mcp 1.0.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 (127) hide show
  1. package/LICENSE +21 -0
  2. package/bin/contextvault-mcp.js +2 -0
  3. package/dist/index.d.ts +3 -0
  4. package/dist/index.d.ts.map +1 -0
  5. package/dist/index.js +8 -0
  6. package/dist/index.js.map +1 -0
  7. package/dist/server.d.ts +10 -0
  8. package/dist/server.d.ts.map +1 -0
  9. package/dist/server.js +533 -0
  10. package/dist/server.js.map +1 -0
  11. package/dist/tools/bootstrap.d.ts +4 -0
  12. package/dist/tools/bootstrap.d.ts.map +1 -0
  13. package/dist/tools/bootstrap.js +108 -0
  14. package/dist/tools/bootstrap.js.map +1 -0
  15. package/dist/tools/changelog.d.ts +3 -0
  16. package/dist/tools/changelog.d.ts.map +1 -0
  17. package/dist/tools/changelog.js +31 -0
  18. package/dist/tools/changelog.js.map +1 -0
  19. package/dist/tools/decision.d.ts +4 -0
  20. package/dist/tools/decision.d.ts.map +1 -0
  21. package/dist/tools/decision.js +34 -0
  22. package/dist/tools/decision.js.map +1 -0
  23. package/dist/tools/doc.d.ts +4 -0
  24. package/dist/tools/doc.d.ts.map +1 -0
  25. package/dist/tools/doc.js +53 -0
  26. package/dist/tools/doc.js.map +1 -0
  27. package/dist/tools/error.d.ts +4 -0
  28. package/dist/tools/error.d.ts.map +1 -0
  29. package/dist/tools/error.js +34 -0
  30. package/dist/tools/error.js.map +1 -0
  31. package/dist/tools/explain.d.ts +4 -0
  32. package/dist/tools/explain.d.ts.map +1 -0
  33. package/dist/tools/explain.js +43 -0
  34. package/dist/tools/explain.js.map +1 -0
  35. package/dist/tools/handoff.d.ts +4 -0
  36. package/dist/tools/handoff.d.ts.map +1 -0
  37. package/dist/tools/handoff.js +32 -0
  38. package/dist/tools/handoff.js.map +1 -0
  39. package/dist/tools/health.d.ts +4 -0
  40. package/dist/tools/health.d.ts.map +1 -0
  41. package/dist/tools/health.js +98 -0
  42. package/dist/tools/health.js.map +1 -0
  43. package/dist/tools/help.d.ts +4 -0
  44. package/dist/tools/help.d.ts.map +1 -0
  45. package/dist/tools/help.js +53 -0
  46. package/dist/tools/help.js.map +1 -0
  47. package/dist/tools/import.d.ts +4 -0
  48. package/dist/tools/import.d.ts.map +1 -0
  49. package/dist/tools/import.js +105 -0
  50. package/dist/tools/import.js.map +1 -0
  51. package/dist/tools/init.d.ts +4 -0
  52. package/dist/tools/init.d.ts.map +1 -0
  53. package/dist/tools/init.js +35 -0
  54. package/dist/tools/init.js.map +1 -0
  55. package/dist/tools/intel.d.ts +4 -0
  56. package/dist/tools/intel.d.ts.map +1 -0
  57. package/dist/tools/intel.js +37 -0
  58. package/dist/tools/intel.js.map +1 -0
  59. package/dist/tools/link.d.ts +4 -0
  60. package/dist/tools/link.d.ts.map +1 -0
  61. package/dist/tools/link.js +71 -0
  62. package/dist/tools/link.js.map +1 -0
  63. package/dist/tools/mode.d.ts +4 -0
  64. package/dist/tools/mode.d.ts.map +1 -0
  65. package/dist/tools/mode.js +28 -0
  66. package/dist/tools/mode.js.map +1 -0
  67. package/dist/tools/new.d.ts +4 -0
  68. package/dist/tools/new.d.ts.map +1 -0
  69. package/dist/tools/new.js +28 -0
  70. package/dist/tools/new.js.map +1 -0
  71. package/dist/tools/note.d.ts +4 -0
  72. package/dist/tools/note.d.ts.map +1 -0
  73. package/dist/tools/note.js +45 -0
  74. package/dist/tools/note.js.map +1 -0
  75. package/dist/tools/plan.d.ts +4 -0
  76. package/dist/tools/plan.d.ts.map +1 -0
  77. package/dist/tools/plan.js +28 -0
  78. package/dist/tools/plan.js.map +1 -0
  79. package/dist/tools/quiz.d.ts +4 -0
  80. package/dist/tools/quiz.d.ts.map +1 -0
  81. package/dist/tools/quiz.js +41 -0
  82. package/dist/tools/quiz.js.map +1 -0
  83. package/dist/tools/read.d.ts +4 -0
  84. package/dist/tools/read.d.ts.map +1 -0
  85. package/dist/tools/read.js +17 -0
  86. package/dist/tools/read.js.map +1 -0
  87. package/dist/tools/search.d.ts +4 -0
  88. package/dist/tools/search.d.ts.map +1 -0
  89. package/dist/tools/search.js +25 -0
  90. package/dist/tools/search.js.map +1 -0
  91. package/dist/tools/share.d.ts +4 -0
  92. package/dist/tools/share.d.ts.map +1 -0
  93. package/dist/tools/share.js +41 -0
  94. package/dist/tools/share.js.map +1 -0
  95. package/dist/tools/snippet.d.ts +4 -0
  96. package/dist/tools/snippet.d.ts.map +1 -0
  97. package/dist/tools/snippet.js +30 -0
  98. package/dist/tools/snippet.js.map +1 -0
  99. package/dist/tools/status.d.ts +4 -0
  100. package/dist/tools/status.d.ts.map +1 -0
  101. package/dist/tools/status.js +17 -0
  102. package/dist/tools/status.js.map +1 -0
  103. package/dist/tools/update.d.ts +4 -0
  104. package/dist/tools/update.d.ts.map +1 -0
  105. package/dist/tools/update.js +87 -0
  106. package/dist/tools/update.js.map +1 -0
  107. package/dist/tools/upgrade.d.ts +4 -0
  108. package/dist/tools/upgrade.d.ts.map +1 -0
  109. package/dist/tools/upgrade.js +48 -0
  110. package/dist/tools/upgrade.js.map +1 -0
  111. package/dist/vault/index-manager.d.ts +22 -0
  112. package/dist/vault/index-manager.d.ts.map +1 -0
  113. package/dist/vault/index-manager.js +270 -0
  114. package/dist/vault/index-manager.js.map +1 -0
  115. package/dist/vault/manager.d.ts +43 -0
  116. package/dist/vault/manager.d.ts.map +1 -0
  117. package/dist/vault/manager.js +266 -0
  118. package/dist/vault/manager.js.map +1 -0
  119. package/dist/vault/settings.d.ts +9 -0
  120. package/dist/vault/settings.d.ts.map +1 -0
  121. package/dist/vault/settings.js +48 -0
  122. package/dist/vault/settings.js.map +1 -0
  123. package/dist/vault/types.d.ts +71 -0
  124. package/dist/vault/types.d.ts.map +1 -0
  125. package/dist/vault/types.js +12 -0
  126. package/dist/vault/types.js.map +1 -0
  127. package/package.json +62 -0
@@ -0,0 +1,108 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function handleBootstrap(vault, _params) {
4
+ if (!vault.projectIndex.exists())
5
+ vault.initProject();
6
+ const projectRoot = path.resolve(vault.projectPath, '..');
7
+ const scan = scanProject(projectRoot);
8
+ let text = `# Bootstrap Scan Results\n\n`;
9
+ text += `**Project root:** ${projectRoot}\n\n`;
10
+ text += `## Detected\n\n`;
11
+ text += `- **Languages:** ${scan.languages.join(', ') || 'None detected'}\n`;
12
+ text += `- **Frameworks:** ${scan.frameworks.join(', ') || 'None detected'}\n`;
13
+ text += `- **Package managers:** ${scan.packageManagers.join(', ') || 'None detected'}\n`;
14
+ text += `- **Config files:** ${scan.configFiles.length} found\n`;
15
+ text += `- **Source directories:** ${scan.srcDirs.join(', ') || 'None detected'}\n\n`;
16
+ text += `## Recommendation\n\n`;
17
+ text += `Use **ctx_doc** to create documentation for each major component found.\n`;
18
+ text += `Use **ctx_intel** to document the architecture and patterns discovered.\n\n`;
19
+ text += `### Suggested Documents\n\n`;
20
+ if (scan.languages.length > 0) {
21
+ text += `1. Architecture doc: tech stack (${scan.languages.join(', ')}), structure, patterns\n`;
22
+ }
23
+ if (scan.frameworks.length > 0) {
24
+ text += `2. Framework doc: ${scan.frameworks.join(', ')} setup and conventions\n`;
25
+ }
26
+ text += `3. Build/deploy doc: how to build, test, and deploy this project\n`;
27
+ return { content: [{ type: 'text', text }] };
28
+ }
29
+ function scanProject(root) {
30
+ const result = {
31
+ languages: [],
32
+ frameworks: [],
33
+ packageManagers: [],
34
+ configFiles: [],
35
+ srcDirs: [],
36
+ };
37
+ const ignoreDirs = new Set(['.git', 'node_modules', '.contextvault', '.claude', 'dist', 'build', '__pycache__', '.venv', 'venv']);
38
+ try {
39
+ const entries = fs.readdirSync(root);
40
+ // Check for package managers and languages
41
+ for (const entry of entries) {
42
+ const fullPath = path.join(root, entry);
43
+ const stat = fs.statSync(fullPath);
44
+ if (stat.isDirectory() && !ignoreDirs.has(entry)) {
45
+ if (['src', 'lib', 'app', 'pkg', 'cmd'].includes(entry)) {
46
+ result.srcDirs.push(entry);
47
+ }
48
+ }
49
+ if (stat.isFile()) {
50
+ // Package managers
51
+ if (entry === 'package.json') {
52
+ result.packageManagers.push('npm');
53
+ try {
54
+ const pkg = JSON.parse(fs.readFileSync(fullPath, 'utf-8'));
55
+ if (pkg.dependencies) {
56
+ if (pkg.dependencies.react)
57
+ result.frameworks.push('React');
58
+ if (pkg.dependencies.vue)
59
+ result.frameworks.push('Vue');
60
+ if (pkg.dependencies.next)
61
+ result.frameworks.push('Next.js');
62
+ if (pkg.dependencies.express)
63
+ result.frameworks.push('Express');
64
+ if (pkg.dependencies.fastify)
65
+ result.frameworks.push('Fastify');
66
+ }
67
+ }
68
+ catch { /* ignore parse errors */ }
69
+ }
70
+ if (entry === 'Cargo.toml') {
71
+ result.packageManagers.push('cargo');
72
+ result.languages.push('Rust');
73
+ }
74
+ if (entry === 'go.mod') {
75
+ result.packageManagers.push('go modules');
76
+ result.languages.push('Go');
77
+ }
78
+ if (entry === 'requirements.txt' || entry === 'pyproject.toml') {
79
+ result.packageManagers.push('pip');
80
+ result.languages.push('Python');
81
+ }
82
+ if (entry === 'Gemfile') {
83
+ result.packageManagers.push('bundler');
84
+ result.languages.push('Ruby');
85
+ }
86
+ // Languages
87
+ if (entry === 'tsconfig.json')
88
+ result.languages.push('TypeScript');
89
+ if (entry.endsWith('.js') || entry.endsWith('.mjs'))
90
+ result.languages.push('JavaScript');
91
+ // Config files
92
+ if (entry.startsWith('.') && stat.isFile() && entry !== '.git' && entry !== '.DS_Store') {
93
+ result.configFiles.push(entry);
94
+ }
95
+ if (entry.endsWith('.json') || entry.endsWith('.yaml') || entry.endsWith('.yml') || entry.endsWith('.toml')) {
96
+ result.configFiles.push(entry);
97
+ }
98
+ }
99
+ }
100
+ }
101
+ catch { /* ignore read errors */ }
102
+ // Deduplicate
103
+ result.languages = [...new Set(result.languages)];
104
+ result.frameworks = [...new Set(result.frameworks)];
105
+ result.packageManagers = [...new Set(result.packageManagers)];
106
+ return result;
107
+ }
108
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../src/tools/bootstrap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { ToolResponse } from '../vault/types.js';
2
+ export declare function handleChangelog(): ToolResponse;
3
+ //# sourceMappingURL=changelog.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.d.ts","sourceRoot":"","sources":["../../src/tools/changelog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,eAAe,IAAI,YAAY,CA8B9C"}
@@ -0,0 +1,31 @@
1
+ export function handleChangelog() {
2
+ const text = `# ContextVault Changelog
3
+
4
+ ## v1.0.0 (MCP Server)
5
+ - Initial MCP server release
6
+ - 25 tools mirroring all /ctx-* commands
7
+ - 4 MCP resources (global index, project index, settings, instructions)
8
+ - Resource templates for individual documents
9
+ - Server-side enforcement engine (no hooks needed)
10
+ - CLI-agnostic vault paths (~/.contextvault/, ./.contextvault/)
11
+ - Backward compatible with legacy .claude/vault/ locations
12
+ - Works with: Claude Code, Cursor, Windsurf, OpenCode, Cline, Continue, Copilot CLI
13
+
14
+ ## Based on ContextVault v1.8.4 (Bash Installer)
15
+ - v1.8.4: CLAUDE.md optimization (775 → 221 lines)
16
+ - v1.8.3: Configurable enforcement levels (light/balanced/strict)
17
+ - v1.8.2: Smart blocking at session end
18
+ - v1.8.1: Completion-triggered reminders
19
+ - v1.8.0: "Remind, Don't Block" enforcement
20
+ - v1.7.6: Hook deduplication + smarter bootstrap
21
+ - v1.7.5: /ctx-bootstrap auto-scan
22
+ - v1.7.0: Smart detection, context-aware suggestions
23
+ - v1.6.9: Blocking PreToolUse enforcement
24
+ - v1.6.0: 6 new commands (health, note, changelog, link, quiz, explain)
25
+ - v1.5.3: /ctx-upgrade command
26
+ - v1.5.0: Share/import with ZIP support
27
+ - v1.4.0: Enhanced instructions with checklists
28
+ `;
29
+ return { content: [{ type: 'text', text }] };
30
+ }
31
+ //# sourceMappingURL=changelog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"changelog.js","sourceRoot":"","sources":["../../src/tools/changelog.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,eAAe;IAC7B,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;CA0Bd,CAAC;IAEA,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleDecision(vault: VaultManager, params: Record<string, unknown>): ToolResponse;
4
+ //# sourceMappingURL=decision.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.d.ts","sourceRoot":"","sources":["../../src/tools/decision.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAuCjG"}
@@ -0,0 +1,34 @@
1
+ export function handleDecision(vault, params) {
2
+ const decision = params.decision;
3
+ const options = params.options ?? '';
4
+ const reasoning = params.reasoning;
5
+ const tradeoffs = params.tradeoffs ?? '';
6
+ if (!decision || !reasoning) {
7
+ return { content: [{ type: 'text', text: 'Error: decision and reasoning are required.' }], isError: true };
8
+ }
9
+ const indexMgr = vault.projectIndex;
10
+ if (!indexMgr.exists()) {
11
+ vault.initProject();
12
+ }
13
+ const id = indexMgr.getNextId();
14
+ const slug = decision.slice(0, 40).toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '');
15
+ const filename = `${id}_decision_${slug}.md`;
16
+ const topic = `Decision: ${decision.slice(0, 60)}`;
17
+ const docContent = vault.generateDocContent({
18
+ id,
19
+ title: topic,
20
+ type: 'decision',
21
+ sections: { decision, options, reasoning, tradeoffs },
22
+ });
23
+ vault.writeDocument(id, filename, docContent, 'project');
24
+ const summary = `Chose: ${decision.slice(0, 50)}`;
25
+ indexMgr.addEntry({ id, topic, status: 'Active', summary });
26
+ indexMgr.addRelatedTerms(`decision, ${slug.replace(/_/g, ', ')}`, id);
27
+ return {
28
+ content: [{
29
+ type: 'text',
30
+ text: `Documented decision to **${filename}**\n\nID: ${id} | Decision: ${decision.slice(0, 80)}`,
31
+ }],
32
+ };
33
+ }
34
+ //# sourceMappingURL=decision.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decision.js","sourceRoot":"","sources":["../../src/tools/decision.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,cAAc,CAAC,KAAmB,EAAE,MAA+B;IACjF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAkB,CAAC;IAC3C,MAAM,OAAO,GAAI,MAAM,CAAC,OAAkB,IAAI,EAAE,CAAC;IACjD,MAAM,SAAS,GAAG,MAAM,CAAC,SAAmB,CAAC;IAC7C,MAAM,SAAS,GAAI,MAAM,CAAC,SAAoB,IAAI,EAAE,CAAC;IAErD,IAAI,CAAC,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC5B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6CAA6C,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7G,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACnG,MAAM,QAAQ,GAAG,GAAG,EAAE,aAAa,IAAI,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,aAAa,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAEnD,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC;QAC1C,EAAE;QACF,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,UAAU;QAChB,QAAQ,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;KACtD,CAAC,CAAC;IAEH,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,UAAU,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,QAAQ,CAAC,eAAe,CAAC,aAAa,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAEtE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,4BAA4B,QAAQ,aAAa,EAAE,gBAAgB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;aACjG,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleDoc(vault: VaultManager, params: Record<string, unknown>): ToolResponse;
4
+ //# sourceMappingURL=doc.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.d.ts","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAC;AAE5D,wBAAgB,SAAS,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CA6D5F"}
@@ -0,0 +1,53 @@
1
+ export function handleDoc(vault, params) {
2
+ const topic = params.topic;
3
+ const content = params.content;
4
+ const tier = params.vault ?? 'project';
5
+ if (!topic || !content) {
6
+ return { content: [{ type: 'text', text: 'Error: topic and content are required.' }], isError: true };
7
+ }
8
+ const indexMgr = tier === 'global' ? vault.globalIndex : vault.projectIndex;
9
+ if (!indexMgr.exists()) {
10
+ if (tier === 'project') {
11
+ vault.initProject();
12
+ }
13
+ else {
14
+ vault.initGlobal();
15
+ }
16
+ }
17
+ // Check for existing doc on same topic
18
+ const existing = indexMgr.search(topic);
19
+ if (existing.length > 0) {
20
+ return {
21
+ content: [{
22
+ type: 'text',
23
+ text: `Found existing document **${existing[0].id}** on "${existing[0].topic}". Use **ctx_update** to update it instead of creating a duplicate.\n\nExisting summary: ${existing[0].summary}`,
24
+ }],
25
+ };
26
+ }
27
+ const settings = vault.settings.load();
28
+ const maxDocs = tier === 'global' ? settings.limits.max_global_docs : settings.limits.max_project_docs;
29
+ const currentCount = indexMgr.getEntryCount();
30
+ if (currentCount >= maxDocs) {
31
+ return { content: [{ type: 'text', text: `Error: ${tier} vault is full (${currentCount}/${maxDocs} docs). Archive old docs first.` }], isError: true };
32
+ }
33
+ const id = indexMgr.getNextId();
34
+ const slug = topic.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '');
35
+ const filename = `${id}_${slug}.md`;
36
+ const docContent = vault.generateDocContent({
37
+ id,
38
+ title: topic,
39
+ type: 'doc',
40
+ sections: { content, key_points: `- ${content.split('.')[0]}` },
41
+ });
42
+ vault.writeDocument(id, filename, docContent, tier);
43
+ const summary = content.split('.')[0].trim().slice(0, 80);
44
+ indexMgr.addEntry({ id, topic, status: 'Active', summary });
45
+ indexMgr.addRelatedTerms(topic.toLowerCase().replace(/[^a-z0-9]+/g, ', '), id);
46
+ return {
47
+ content: [{
48
+ type: 'text',
49
+ text: `Documented to **${filename}** (${tier} vault)\n\nID: ${id} | Topic: ${topic}`,
50
+ }],
51
+ };
52
+ }
53
+ //# sourceMappingURL=doc.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc.js","sourceRoot":"","sources":["../../src/tools/doc.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleError(vault: VaultManager, params: Record<string, unknown>): ToolResponse;
4
+ //# sourceMappingURL=error.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.d.ts","sourceRoot":"","sources":["../../src/tools/error.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAuC9F"}
@@ -0,0 +1,34 @@
1
+ export function handleError(vault, params) {
2
+ const errorMessage = params.error_message;
3
+ const rootCause = params.root_cause;
4
+ const solution = params.solution;
5
+ const prevention = params.prevention ?? '';
6
+ if (!errorMessage || !rootCause || !solution) {
7
+ return { content: [{ type: 'text', text: 'Error: error_message, root_cause, and solution are required.' }], isError: true };
8
+ }
9
+ const indexMgr = vault.projectIndex;
10
+ if (!indexMgr.exists()) {
11
+ vault.initProject();
12
+ }
13
+ const id = indexMgr.getNextId();
14
+ const slug = errorMessage.slice(0, 40).toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '');
15
+ const filename = `${id}_error_${slug}.md`;
16
+ const topic = `Error: ${errorMessage.slice(0, 60)}`;
17
+ const docContent = vault.generateDocContent({
18
+ id,
19
+ title: topic,
20
+ type: 'error',
21
+ sections: { error_message: errorMessage, root_cause: rootCause, solution, prevention },
22
+ });
23
+ vault.writeDocument(id, filename, docContent, 'project');
24
+ const summary = `${rootCause.slice(0, 40)} → ${solution.slice(0, 30)}`;
25
+ indexMgr.addEntry({ id, topic, status: 'Active', summary });
26
+ indexMgr.addRelatedTerms(`error, bug, ${slug.replace(/_/g, ', ')}`, id);
27
+ return {
28
+ content: [{
29
+ type: 'text',
30
+ text: `Documented error to **${filename}**\n\nID: ${id} | Root cause: ${rootCause.slice(0, 60)}`,
31
+ }],
32
+ };
33
+ }
34
+ //# sourceMappingURL=error.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.js","sourceRoot":"","sources":["../../src/tools/error.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,WAAW,CAAC,KAAmB,EAAE,MAA+B;IAC9E,MAAM,YAAY,GAAG,MAAM,CAAC,aAAuB,CAAC;IACpD,MAAM,SAAS,GAAG,MAAM,CAAC,UAAoB,CAAC;IAC9C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAkB,CAAC;IAC3C,MAAM,UAAU,GAAI,MAAM,CAAC,UAAqB,IAAI,EAAE,CAAC;IAEvD,IAAI,CAAC,YAAY,IAAI,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,8DAA8D,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC9H,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IACvG,MAAM,QAAQ,GAAG,GAAG,EAAE,UAAU,IAAI,KAAK,CAAC;IAC1C,MAAM,KAAK,GAAG,UAAU,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAEpD,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC;QAC1C,EAAE;QACF,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,EAAE,aAAa,EAAE,YAAY,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE;KACvF,CAAC,CAAC;IAEH,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IACvE,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAC5D,QAAQ,CAAC,eAAe,CAAC,eAAe,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAExE,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,yBAAyB,QAAQ,aAAa,EAAE,kBAAkB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE;aACjG,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleExplain(vault: VaultManager, params: Record<string, unknown>): ToolResponse;
4
+ //# sourceMappingURL=explain.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.d.ts","sourceRoot":"","sources":["../../src/tools/explain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAkDhG"}
@@ -0,0 +1,43 @@
1
+ export function handleExplain(vault, params) {
2
+ const concept = params.concept;
3
+ const save = params.save === true;
4
+ if (!concept) {
5
+ return { content: [{ type: 'text', text: 'Error: concept is required.' }], isError: true };
6
+ }
7
+ // Check if we have existing documentation about this concept
8
+ const results = vault.search(concept);
9
+ let existingKnowledge = '';
10
+ if (results.length > 0) {
11
+ existingKnowledge = `\n\n## Existing Vault Knowledge\n\nFound ${results.length} related doc(s):\n`;
12
+ for (const r of results) {
13
+ existingKnowledge += `- **${r.id}** (${r.vault}): ${r.topic} — ${r.summary}\n`;
14
+ }
15
+ existingKnowledge += `\nUse **ctx_read** to see full details.`;
16
+ }
17
+ let text = `# Explain: ${concept}\n\n`;
18
+ text += `This tool helps you document your understanding of "${concept}".\n\n`;
19
+ text += `To save an explanation, provide your explanation content and set save=true. `;
20
+ text += `The explanation will be saved as a new vault document.`;
21
+ text += existingKnowledge;
22
+ if (save) {
23
+ // Save as a document
24
+ const indexMgr = vault.globalIndex.exists() ? vault.globalIndex : vault.projectIndex;
25
+ if (!indexMgr.exists())
26
+ vault.initGlobal();
27
+ const id = indexMgr.getNextId();
28
+ const slug = concept.slice(0, 40).toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_|_$/g, '');
29
+ const filename = `${id}_explain_${slug}.md`;
30
+ const docContent = vault.generateDocContent({
31
+ id,
32
+ title: `Explain: ${concept}`,
33
+ type: 'explain',
34
+ sections: { concept, explanation: `Explanation of ${concept} — to be filled in by the AI assistant.` },
35
+ });
36
+ const tier = id.startsWith('G') ? 'global' : 'project';
37
+ vault.writeDocument(id, filename, docContent, tier);
38
+ indexMgr.addEntry({ id, topic: `Explain: ${concept}`, status: 'Active', summary: `Explanation of ${concept}` });
39
+ text = `Saved explanation template to **${filename}**\n\nID: ${id} | Use **ctx_update** to fill in the explanation.${existingKnowledge}`;
40
+ }
41
+ return { content: [{ type: 'text', text }] };
42
+ }
43
+ //# sourceMappingURL=explain.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explain.js","sourceRoot":"","sources":["../../src/tools/explain.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,MAA+B;IAChF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAiB,CAAC;IACzC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC;IAElC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC7F,CAAC;IAED,6DAA6D;IAC7D,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,iBAAiB,GAAG,EAAE,CAAC;IAE3B,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACvB,iBAAiB,GAAG,4CAA4C,OAAO,CAAC,MAAM,oBAAoB,CAAC;QACnG,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,iBAAiB,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,OAAO,IAAI,CAAC;QACjF,CAAC;QACD,iBAAiB,IAAI,yCAAyC,CAAC;IACjE,CAAC;IAED,IAAI,IAAI,GAAG,cAAc,OAAO,MAAM,CAAC;IACvC,IAAI,IAAI,uDAAuD,OAAO,QAAQ,CAAC;IAC/E,IAAI,IAAI,8EAA8E,CAAC;IACvF,IAAI,IAAI,wDAAwD,CAAC;IACjE,IAAI,IAAI,iBAAiB,CAAC;IAE1B,IAAI,IAAI,EAAE,CAAC;QACT,qBAAqB;QACrB,MAAM,QAAQ,GAAG,KAAK,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,YAAY,CAAC;QACrF,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE;YAAE,KAAK,CAAC,UAAU,EAAE,CAAC;QAE3C,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QAClG,MAAM,QAAQ,GAAG,GAAG,EAAE,YAAY,IAAI,KAAK,CAAC;QAE5C,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC;YAC1C,EAAE;YACF,KAAK,EAAE,YAAY,OAAO,EAAE;YAC5B,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE,kBAAkB,OAAO,yCAAyC,EAAE;SACvG,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAiB,CAAC,CAAC,CAAC,SAAkB,CAAC;QACzE,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,CAAC,CAAC;QACpD,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,YAAY,OAAO,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,kBAAkB,OAAO,EAAE,EAAE,CAAC,CAAC;QAEhH,IAAI,GAAG,mCAAmC,QAAQ,aAAa,EAAE,oDAAoD,iBAAiB,EAAE,CAAC;IAC3I,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleHandoff(vault: VaultManager, params: Record<string, unknown>): ToolResponse;
4
+ //# sourceMappingURL=handoff.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.d.ts","sourceRoot":"","sources":["../../src/tools/handoff.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,aAAa,CAAC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,YAAY,CAqChG"}
@@ -0,0 +1,32 @@
1
+ export function handleHandoff(vault, params) {
2
+ const completed = params.completed;
3
+ const inProgress = params.in_progress ?? 'None';
4
+ const nextSteps = params.next_steps;
5
+ if (!completed || !nextSteps) {
6
+ return { content: [{ type: 'text', text: 'Error: completed and next_steps are required.' }], isError: true };
7
+ }
8
+ const indexMgr = vault.projectIndex;
9
+ if (!indexMgr.exists()) {
10
+ vault.initProject();
11
+ }
12
+ const today = new Date().toISOString().split('T')[0];
13
+ const id = indexMgr.getNextId();
14
+ const filename = `${id}_handoff_${today}.md`;
15
+ const topic = `Handoff ${today}`;
16
+ const docContent = vault.generateDocContent({
17
+ id,
18
+ title: topic,
19
+ type: 'handoff',
20
+ sections: { completed, in_progress: inProgress, next_steps: nextSteps },
21
+ });
22
+ vault.writeDocument(id, filename, docContent, 'project');
23
+ const summary = `Session handoff: ${nextSteps.slice(0, 40)}`;
24
+ indexMgr.addEntry({ id, topic, status: 'Active', summary });
25
+ return {
26
+ content: [{
27
+ type: 'text',
28
+ text: `Session handoff saved to **${filename}**\n\nID: ${id}\n\n**Next session should:**\n${nextSteps}`,
29
+ }],
30
+ };
31
+ }
32
+ //# sourceMappingURL=handoff.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"handoff.js","sourceRoot":"","sources":["../../src/tools/handoff.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,aAAa,CAAC,KAAmB,EAAE,MAA+B;IAChF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAmB,CAAC;IAC7C,MAAM,UAAU,GAAI,MAAM,CAAC,WAAsB,IAAI,MAAM,CAAC;IAC5D,MAAM,SAAS,GAAG,MAAM,CAAC,UAAoB,CAAC;IAE9C,IAAI,CAAC,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QAC7B,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,+CAA+C,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC/G,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,YAAY,CAAC;IACpC,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC;QACvB,KAAK,CAAC,WAAW,EAAE,CAAC;IACtB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,SAAS,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,GAAG,EAAE,YAAY,KAAK,KAAK,CAAC;IAC7C,MAAM,KAAK,GAAG,WAAW,KAAK,EAAE,CAAC;IAEjC,MAAM,UAAU,GAAG,KAAK,CAAC,kBAAkB,CAAC;QAC1C,EAAE;QACF,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,SAAS;QACf,QAAQ,EAAE,EAAE,SAAS,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,SAAS,EAAE;KACxE,CAAC,CAAC;IAEH,KAAK,CAAC,aAAa,CAAC,EAAE,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;IAEzD,MAAM,OAAO,GAAG,oBAAoB,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC;IAC7D,QAAQ,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IAE5D,OAAO;QACL,OAAO,EAAE,CAAC;gBACR,IAAI,EAAE,MAAM;gBACZ,IAAI,EAAE,8BAA8B,QAAQ,aAAa,EAAE,iCAAiC,SAAS,EAAE;aACxG,CAAC;KACH,CAAC;AACJ,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleHealth(vault: VaultManager): ToolResponse;
4
+ //# sourceMappingURL=health.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.d.ts","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,YAAY,CAAC,KAAK,EAAE,YAAY,GAAG,YAAY,CAwG9D"}
@@ -0,0 +1,98 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ export function handleHealth(vault) {
4
+ const issues = [];
5
+ const fixes = [];
6
+ let score = 100;
7
+ // Check global vault
8
+ if (vault.globalExists()) {
9
+ const globalEntries = vault.globalIndex.parseEntries();
10
+ const globalFiles = vault.listDocFiles('global');
11
+ // Check for orphaned files (file exists but not in index)
12
+ for (const file of globalFiles) {
13
+ const id = file.split('_')[0];
14
+ if (!globalEntries.find(e => e.id === id)) {
15
+ issues.push(`Orphaned file: ${file} (not in global index)`);
16
+ score -= 5;
17
+ }
18
+ }
19
+ // Check for missing files (in index but file missing)
20
+ for (const entry of globalEntries) {
21
+ if (!globalFiles.find(f => f.startsWith(entry.id + '_'))) {
22
+ issues.push(`Missing file for global index entry: ${entry.id} - ${entry.topic}`);
23
+ score -= 10;
24
+ }
25
+ }
26
+ // Check doc sizes
27
+ for (const file of globalFiles) {
28
+ const content = fs.readFileSync(path.join(vault.globalPath, file), 'utf-8');
29
+ const lines = content.split('\n').length;
30
+ if (lines > 100) {
31
+ issues.push(`${file}: ${lines} lines (exceeds 100-line limit)`);
32
+ score -= 3;
33
+ }
34
+ }
35
+ }
36
+ else {
37
+ issues.push('Global vault not initialized');
38
+ score -= 10;
39
+ }
40
+ // Check project vault
41
+ if (vault.projectExists()) {
42
+ const projectEntries = vault.projectIndex.parseEntries();
43
+ const projectFiles = vault.listDocFiles('project');
44
+ for (const file of projectFiles) {
45
+ const id = file.split('_')[0];
46
+ if (!projectEntries.find(e => e.id === id)) {
47
+ issues.push(`Orphaned file: ${file} (not in project index)`);
48
+ score -= 5;
49
+ }
50
+ }
51
+ for (const entry of projectEntries) {
52
+ if (!projectFiles.find(f => f.startsWith(entry.id + '_'))) {
53
+ issues.push(`Missing file for project index entry: ${entry.id} - ${entry.topic}`);
54
+ score -= 10;
55
+ }
56
+ }
57
+ for (const file of projectFiles) {
58
+ const content = fs.readFileSync(path.join(vault.projectPath, file), 'utf-8');
59
+ const lines = content.split('\n').length;
60
+ if (lines > 100) {
61
+ issues.push(`${file}: ${lines} lines (exceeds 100-line limit)`);
62
+ score -= 3;
63
+ }
64
+ }
65
+ }
66
+ else {
67
+ issues.push('Project vault not initialized');
68
+ score -= 5;
69
+ }
70
+ // Check settings
71
+ try {
72
+ vault.settings.load();
73
+ }
74
+ catch {
75
+ issues.push('Settings file corrupted or missing');
76
+ score -= 5;
77
+ }
78
+ score = Math.max(0, score);
79
+ let text = `# Vault Health Check\n\n`;
80
+ text += `**Score:** ${score}/100 ${score >= 90 ? 'Healthy' : score >= 70 ? 'Fair' : 'Needs Attention'}\n\n`;
81
+ if (issues.length === 0) {
82
+ text += `No issues found. Vault is in great shape.\n`;
83
+ }
84
+ else {
85
+ text += `## Issues Found (${issues.length})\n\n`;
86
+ for (const issue of issues) {
87
+ text += `- ${issue}\n`;
88
+ }
89
+ }
90
+ if (fixes.length > 0) {
91
+ text += `\n## Auto-Fixed\n\n`;
92
+ for (const fix of fixes) {
93
+ text += `- ${fix}\n`;
94
+ }
95
+ }
96
+ return { content: [{ type: 'text', text }] };
97
+ }
98
+ //# sourceMappingURL=health.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.js","sourceRoot":"","sources":["../../src/tools/health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAIlC,MAAM,UAAU,YAAY,CAAC,KAAmB;IAC9C,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,GAAG,GAAG,CAAC;IAEhB,qBAAqB;IACrB,IAAI,KAAK,CAAC,YAAY,EAAE,EAAE,CAAC;QACzB,MAAM,aAAa,GAAG,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,CAAC;QACvD,MAAM,WAAW,GAAG,KAAK,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;QAEjD,0DAA0D;QAC1D,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,wBAAwB,CAAC,CAAC;gBAC5D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,sDAAsD;QACtD,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;gBACzD,MAAM,CAAC,IAAI,CAAC,wCAAwC,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBACjF,KAAK,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC5E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,iCAAiC,CAAC,CAAC;gBAChE,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;QAC5C,KAAK,IAAI,EAAE,CAAC;IACd,CAAC;IAED,sBAAsB;IACtB,IAAI,KAAK,CAAC,aAAa,EAAE,EAAE,CAAC;QAC1B,MAAM,cAAc,GAAG,KAAK,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;QACzD,MAAM,YAAY,GAAG,KAAK,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;QAEnD,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC,kBAAkB,IAAI,yBAAyB,CAAC,CAAC;gBAC7D,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,cAAc,EAAE,CAAC;YACnC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC;gBAC1D,MAAM,CAAC,IAAI,CAAC,yCAAyC,KAAK,CAAC,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;gBAClF,KAAK,IAAI,EAAE,CAAC;YACd,CAAC;QACH,CAAC;QAED,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;YAC7E,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC;YACzC,IAAI,KAAK,GAAG,GAAG,EAAE,CAAC;gBAChB,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,KAAK,KAAK,iCAAiC,CAAC,CAAC;gBAChE,KAAK,IAAI,CAAC,CAAC;YACb,CAAC;QACH,CAAC;IACH,CAAC;SAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,+BAA+B,CAAC,CAAC;QAC7C,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,iBAAiB;IACjB,IAAI,CAAC;QACH,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;IACxB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;QAClD,KAAK,IAAI,CAAC,CAAC;IACb,CAAC;IAED,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAE3B,IAAI,IAAI,GAAG,0BAA0B,CAAC;IACtC,IAAI,IAAI,cAAc,KAAK,QAAQ,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,iBAAiB,MAAM,CAAC;IAE5G,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,IAAI,IAAI,6CAA6C,CAAC;IACxD,CAAC;SAAM,CAAC;QACN,IAAI,IAAI,oBAAoB,MAAM,CAAC,MAAM,OAAO,CAAC;QACjD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,KAAK,KAAK,IAAI,CAAC;QACzB,CAAC;IACH,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrB,IAAI,IAAI,qBAAqB,CAAC;QAC9B,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,IAAI,KAAK,GAAG,IAAI,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { VaultManager } from '../vault/manager.js';
2
+ import { ToolResponse } from '../vault/types.js';
3
+ export declare function handleHelp(_vault: VaultManager): ToolResponse;
4
+ //# sourceMappingURL=help.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/tools/help.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,wBAAgB,UAAU,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAoD7D"}
@@ -0,0 +1,53 @@
1
+ export function handleHelp(_vault) {
2
+ const text = `# ContextVault MCP Commands
3
+
4
+ ## Document Your Work
5
+ | Command | Description |
6
+ |---------|-------------|
7
+ | **ctx_doc** | Quick document a learning, feature, or finding |
8
+ | **ctx_error** | Document a bug fix (error, cause, solution) |
9
+ | **ctx_decision** | Document a decision with reasoning |
10
+ | **ctx_plan** | Document an implementation plan |
11
+ | **ctx_snippet** | Save a reusable code snippet |
12
+ | **ctx_intel** | Document codebase exploration findings |
13
+ | **ctx_handoff** | Create session handoff summary |
14
+ | **ctx_explain** | Explain a concept and save to vault |
15
+
16
+ ## Manage Documents
17
+ | Command | Description |
18
+ |---------|-------------|
19
+ | **ctx_search** | Search vault documents by keyword |
20
+ | **ctx_read** | Read a document by ID (P001, G003) |
21
+ | **ctx_update** | Update an existing document |
22
+ | **ctx_new** | Create a new document with custom content |
23
+ | **ctx_note** | Add a quick note to existing doc |
24
+ | **ctx_link** | Link two related documents |
25
+
26
+ ## Vault Management
27
+ | Command | Description |
28
+ |---------|-------------|
29
+ | **ctx_init** | Initialize vault in current project |
30
+ | **ctx_status** | Show vault status and stats |
31
+ | **ctx_mode** | Switch mode (local/global/full) or enforcement |
32
+ | **ctx_health** | Check vault health and fix issues |
33
+ | **ctx_bootstrap** | Auto-scan codebase for documentation |
34
+ | **ctx_upgrade** | Upgrade vault format |
35
+ | **ctx_changelog** | Show version history |
36
+
37
+ ## Share & Import
38
+ | Command | Description |
39
+ |---------|-------------|
40
+ | **ctx_share** | Export documents for sharing |
41
+ | **ctx_import** | Import from external source or legacy vault |
42
+ | **ctx_quiz** | Test knowledge retention |
43
+
44
+ ## Resources (Auto-loaded)
45
+ - \`contextvault://global/index\` — Global vault index
46
+ - \`contextvault://project/index\` — Project vault index
47
+ - \`contextvault://settings\` — Current settings
48
+ - \`contextvault://instructions\` — Documentation rules
49
+ - \`contextvault://doc/{id}\` — Individual document
50
+ `;
51
+ return { content: [{ type: 'text', text }] };
52
+ }
53
+ //# sourceMappingURL=help.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/tools/help.ts"],"names":[],"mappings":"AAGA,MAAM,UAAU,UAAU,CAAC,MAAoB;IAC7C,MAAM,IAAI,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgDd,CAAC;IAEA,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;AAC/C,CAAC"}