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.
- package/LICENSE +21 -0
- package/bin/contextvault-mcp.js +2 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +533 -0
- package/dist/server.js.map +1 -0
- package/dist/tools/bootstrap.d.ts +4 -0
- package/dist/tools/bootstrap.d.ts.map +1 -0
- package/dist/tools/bootstrap.js +108 -0
- package/dist/tools/bootstrap.js.map +1 -0
- package/dist/tools/changelog.d.ts +3 -0
- package/dist/tools/changelog.d.ts.map +1 -0
- package/dist/tools/changelog.js +31 -0
- package/dist/tools/changelog.js.map +1 -0
- package/dist/tools/decision.d.ts +4 -0
- package/dist/tools/decision.d.ts.map +1 -0
- package/dist/tools/decision.js +34 -0
- package/dist/tools/decision.js.map +1 -0
- package/dist/tools/doc.d.ts +4 -0
- package/dist/tools/doc.d.ts.map +1 -0
- package/dist/tools/doc.js +53 -0
- package/dist/tools/doc.js.map +1 -0
- package/dist/tools/error.d.ts +4 -0
- package/dist/tools/error.d.ts.map +1 -0
- package/dist/tools/error.js +34 -0
- package/dist/tools/error.js.map +1 -0
- package/dist/tools/explain.d.ts +4 -0
- package/dist/tools/explain.d.ts.map +1 -0
- package/dist/tools/explain.js +43 -0
- package/dist/tools/explain.js.map +1 -0
- package/dist/tools/handoff.d.ts +4 -0
- package/dist/tools/handoff.d.ts.map +1 -0
- package/dist/tools/handoff.js +32 -0
- package/dist/tools/handoff.js.map +1 -0
- package/dist/tools/health.d.ts +4 -0
- package/dist/tools/health.d.ts.map +1 -0
- package/dist/tools/health.js +98 -0
- package/dist/tools/health.js.map +1 -0
- package/dist/tools/help.d.ts +4 -0
- package/dist/tools/help.d.ts.map +1 -0
- package/dist/tools/help.js +53 -0
- package/dist/tools/help.js.map +1 -0
- package/dist/tools/import.d.ts +4 -0
- package/dist/tools/import.d.ts.map +1 -0
- package/dist/tools/import.js +105 -0
- package/dist/tools/import.js.map +1 -0
- package/dist/tools/init.d.ts +4 -0
- package/dist/tools/init.d.ts.map +1 -0
- package/dist/tools/init.js +35 -0
- package/dist/tools/init.js.map +1 -0
- package/dist/tools/intel.d.ts +4 -0
- package/dist/tools/intel.d.ts.map +1 -0
- package/dist/tools/intel.js +37 -0
- package/dist/tools/intel.js.map +1 -0
- package/dist/tools/link.d.ts +4 -0
- package/dist/tools/link.d.ts.map +1 -0
- package/dist/tools/link.js +71 -0
- package/dist/tools/link.js.map +1 -0
- package/dist/tools/mode.d.ts +4 -0
- package/dist/tools/mode.d.ts.map +1 -0
- package/dist/tools/mode.js +28 -0
- package/dist/tools/mode.js.map +1 -0
- package/dist/tools/new.d.ts +4 -0
- package/dist/tools/new.d.ts.map +1 -0
- package/dist/tools/new.js +28 -0
- package/dist/tools/new.js.map +1 -0
- package/dist/tools/note.d.ts +4 -0
- package/dist/tools/note.d.ts.map +1 -0
- package/dist/tools/note.js +45 -0
- package/dist/tools/note.js.map +1 -0
- package/dist/tools/plan.d.ts +4 -0
- package/dist/tools/plan.d.ts.map +1 -0
- package/dist/tools/plan.js +28 -0
- package/dist/tools/plan.js.map +1 -0
- package/dist/tools/quiz.d.ts +4 -0
- package/dist/tools/quiz.d.ts.map +1 -0
- package/dist/tools/quiz.js +41 -0
- package/dist/tools/quiz.js.map +1 -0
- package/dist/tools/read.d.ts +4 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +17 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/search.d.ts +4 -0
- package/dist/tools/search.d.ts.map +1 -0
- package/dist/tools/search.js +25 -0
- package/dist/tools/search.js.map +1 -0
- package/dist/tools/share.d.ts +4 -0
- package/dist/tools/share.d.ts.map +1 -0
- package/dist/tools/share.js +41 -0
- package/dist/tools/share.js.map +1 -0
- package/dist/tools/snippet.d.ts +4 -0
- package/dist/tools/snippet.d.ts.map +1 -0
- package/dist/tools/snippet.js +30 -0
- package/dist/tools/snippet.js.map +1 -0
- package/dist/tools/status.d.ts +4 -0
- package/dist/tools/status.d.ts.map +1 -0
- package/dist/tools/status.js +17 -0
- package/dist/tools/status.js.map +1 -0
- package/dist/tools/update.d.ts +4 -0
- package/dist/tools/update.d.ts.map +1 -0
- package/dist/tools/update.js +87 -0
- package/dist/tools/update.js.map +1 -0
- package/dist/tools/upgrade.d.ts +4 -0
- package/dist/tools/upgrade.d.ts.map +1 -0
- package/dist/tools/upgrade.js +48 -0
- package/dist/tools/upgrade.js.map +1 -0
- package/dist/vault/index-manager.d.ts +22 -0
- package/dist/vault/index-manager.d.ts.map +1 -0
- package/dist/vault/index-manager.js +270 -0
- package/dist/vault/index-manager.js.map +1 -0
- package/dist/vault/manager.d.ts +43 -0
- package/dist/vault/manager.d.ts.map +1 -0
- package/dist/vault/manager.js +266 -0
- package/dist/vault/manager.js.map +1 -0
- package/dist/vault/settings.d.ts +9 -0
- package/dist/vault/settings.d.ts.map +1 -0
- package/dist/vault/settings.js +48 -0
- package/dist/vault/settings.js.map +1 -0
- package/dist/vault/types.d.ts +71 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +12 -0
- package/dist/vault/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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 @@
|
|
|
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":"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"}
|
|
@@ -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"}
|