@vdpeijl/kb-mcp 0.1.2
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/README.md +416 -0
- package/dist/scripts/postinstall.d.ts +3 -0
- package/dist/scripts/postinstall.d.ts.map +1 -0
- package/dist/scripts/postinstall.js +110 -0
- package/dist/scripts/postinstall.js.map +1 -0
- package/dist/src/cli.d.ts +3 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +22 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/doctor.d.ts +3 -0
- package/dist/src/commands/doctor.d.ts.map +1 -0
- package/dist/src/commands/doctor.js +93 -0
- package/dist/src/commands/doctor.js.map +1 -0
- package/dist/src/commands/init.d.ts +3 -0
- package/dist/src/commands/init.d.ts.map +1 -0
- package/dist/src/commands/init.js +150 -0
- package/dist/src/commands/init.js.map +1 -0
- package/dist/src/commands/serve.d.ts +3 -0
- package/dist/src/commands/serve.d.ts.map +1 -0
- package/dist/src/commands/serve.js +22 -0
- package/dist/src/commands/serve.js.map +1 -0
- package/dist/src/commands/setup.d.ts +9 -0
- package/dist/src/commands/setup.d.ts.map +1 -0
- package/dist/src/commands/setup.js +115 -0
- package/dist/src/commands/setup.js.map +1 -0
- package/dist/src/commands/sources.d.ts +3 -0
- package/dist/src/commands/sources.d.ts.map +1 -0
- package/dist/src/commands/sources.js +258 -0
- package/dist/src/commands/sources.js.map +1 -0
- package/dist/src/commands/stats.d.ts +3 -0
- package/dist/src/commands/stats.d.ts.map +1 -0
- package/dist/src/commands/stats.js +48 -0
- package/dist/src/commands/stats.js.map +1 -0
- package/dist/src/commands/sync.d.ts +13 -0
- package/dist/src/commands/sync.d.ts.map +1 -0
- package/dist/src/commands/sync.js +106 -0
- package/dist/src/commands/sync.js.map +1 -0
- package/dist/src/config/index.d.ts +18 -0
- package/dist/src/config/index.d.ts.map +1 -0
- package/dist/src/config/index.js +67 -0
- package/dist/src/config/index.js.map +1 -0
- package/dist/src/config/paths.d.ts +21 -0
- package/dist/src/config/paths.d.ts.map +1 -0
- package/dist/src/config/paths.js +38 -0
- package/dist/src/config/paths.js.map +1 -0
- package/dist/src/config/schema.d.ts +133 -0
- package/dist/src/config/schema.d.ts.map +1 -0
- package/dist/src/config/schema.js +34 -0
- package/dist/src/config/schema.js.map +1 -0
- package/dist/src/db/articles.d.ts +39 -0
- package/dist/src/db/articles.d.ts.map +1 -0
- package/dist/src/db/articles.js +103 -0
- package/dist/src/db/articles.js.map +1 -0
- package/dist/src/db/chunks.d.ts +46 -0
- package/dist/src/db/chunks.d.ts.map +1 -0
- package/dist/src/db/chunks.js +129 -0
- package/dist/src/db/chunks.js.map +1 -0
- package/dist/src/db/index.d.ts +19 -0
- package/dist/src/db/index.d.ts.map +1 -0
- package/dist/src/db/index.js +86 -0
- package/dist/src/db/index.js.map +1 -0
- package/dist/src/db/schema.d.ts +10 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +80 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/db/sources.d.ts +48 -0
- package/dist/src/db/sources.d.ts.map +1 -0
- package/dist/src/db/sources.js +110 -0
- package/dist/src/db/sources.js.map +1 -0
- package/dist/src/index.d.ts +8 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +87 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/search/embeddings.d.ts +22 -0
- package/dist/src/search/embeddings.d.ts.map +1 -0
- package/dist/src/search/embeddings.js +122 -0
- package/dist/src/search/embeddings.js.map +1 -0
- package/dist/src/search/index.d.ts +21 -0
- package/dist/src/search/index.d.ts.map +1 -0
- package/dist/src/search/index.js +50 -0
- package/dist/src/search/index.js.map +1 -0
- package/dist/src/sync/chunker.d.ts +15 -0
- package/dist/src/sync/chunker.d.ts.map +1 -0
- package/dist/src/sync/chunker.js +117 -0
- package/dist/src/sync/chunker.js.map +1 -0
- package/dist/src/sync/index.d.ts +24 -0
- package/dist/src/sync/index.d.ts.map +1 -0
- package/dist/src/sync/index.js +180 -0
- package/dist/src/sync/index.js.map +1 -0
- package/dist/src/sync/parser.d.ts +9 -0
- package/dist/src/sync/parser.d.ts.map +1 -0
- package/dist/src/sync/parser.js +91 -0
- package/dist/src/sync/parser.js.map +1 -0
- package/dist/src/sync/zendesk.d.ts +45 -0
- package/dist/src/sync/zendesk.d.ts.map +1 -0
- package/dist/src/sync/zendesk.js +161 -0
- package/dist/src/sync/zendesk.js.map +1 -0
- package/dist/src/utils/errors.d.ts +39 -0
- package/dist/src/utils/errors.d.ts.map +1 -0
- package/dist/src/utils/errors.js +62 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/logger.d.ts +21 -0
- package/dist/src/utils/logger.d.ts.map +1 -0
- package/dist/src/utils/logger.js +25 -0
- package/dist/src/utils/logger.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":";AASA,wBAuKG"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { configExists, saveConfig, getDefaultConfig } from '../config/index.js';
|
|
3
|
+
import { getDatabase } from '../db/index.js';
|
|
4
|
+
import { checkOllamaConnection, checkModelAvailable } from '../search/embeddings.js';
|
|
5
|
+
import { upsertSource } from '../db/sources.js';
|
|
6
|
+
import { testConnection } from '../sync/zendesk.js';
|
|
7
|
+
import { exitWithError } from '../utils/errors.js';
|
|
8
|
+
export default defineCommand({
|
|
9
|
+
meta: {
|
|
10
|
+
name: 'init',
|
|
11
|
+
description: 'Interactive setup wizard',
|
|
12
|
+
},
|
|
13
|
+
async run() {
|
|
14
|
+
try {
|
|
15
|
+
const readline = await import('readline/promises');
|
|
16
|
+
const rl = readline.createInterface({
|
|
17
|
+
input: process.stdin,
|
|
18
|
+
output: process.stdout,
|
|
19
|
+
});
|
|
20
|
+
console.log('\nš Welcome to kb-mcp setup!\n');
|
|
21
|
+
// Check if config already exists
|
|
22
|
+
if (configExists()) {
|
|
23
|
+
const overwrite = await rl.question('Configuration already exists. Overwrite? (y/N): ');
|
|
24
|
+
if (overwrite.toLowerCase() !== 'y') {
|
|
25
|
+
console.log('\nSetup cancelled.\n');
|
|
26
|
+
rl.close();
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// Step 1: Check Ollama
|
|
31
|
+
console.log('\nš Step 1: Checking Ollama\n');
|
|
32
|
+
const config = getDefaultConfig();
|
|
33
|
+
const ollamaConnected = await checkOllamaConnection(config.ollama);
|
|
34
|
+
if (!ollamaConnected) {
|
|
35
|
+
console.log(`ā Cannot connect to Ollama at ${config.ollama.baseUrl}`);
|
|
36
|
+
console.log('\nMake sure Ollama is running:');
|
|
37
|
+
console.log(' ollama serve\n');
|
|
38
|
+
console.log('Install Ollama from: https://ollama.com\n');
|
|
39
|
+
const continueAnyway = await rl.question('Continue anyway? (y/N): ');
|
|
40
|
+
if (continueAnyway.toLowerCase() !== 'y') {
|
|
41
|
+
console.log('\nSetup cancelled.\n');
|
|
42
|
+
rl.close();
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
console.log('ā Ollama is running');
|
|
48
|
+
// Check model
|
|
49
|
+
const modelAvailable = await checkModelAvailable(config.ollama);
|
|
50
|
+
if (!modelAvailable) {
|
|
51
|
+
console.log(`ā Model '${config.ollama.model}' not found`);
|
|
52
|
+
console.log('\nWould you like to pull it now? This may take a few minutes.');
|
|
53
|
+
const pullModel = await rl.question('Pull model? (Y/n): ');
|
|
54
|
+
if (pullModel.toLowerCase() !== 'n') {
|
|
55
|
+
console.log(`\nPulling ${config.ollama.model}...`);
|
|
56
|
+
const { spawn } = await import('child_process');
|
|
57
|
+
const pull = spawn('ollama', ['pull', config.ollama.model], {
|
|
58
|
+
stdio: 'inherit',
|
|
59
|
+
});
|
|
60
|
+
await new Promise((resolve, reject) => {
|
|
61
|
+
pull.on('close', (code) => {
|
|
62
|
+
if (code === 0) {
|
|
63
|
+
console.log('\nā Model pulled successfully');
|
|
64
|
+
resolve();
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
reject(new Error('Failed to pull model'));
|
|
68
|
+
}
|
|
69
|
+
});
|
|
70
|
+
});
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
console.log(`ā Model '${config.ollama.model}' is available`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
// Step 2: Add first source
|
|
78
|
+
console.log('\nš Step 2: Add your first knowledge base\n');
|
|
79
|
+
const addSource = await rl.question('Add a knowledge base now? (Y/n): ');
|
|
80
|
+
let firstSource = null;
|
|
81
|
+
if (addSource.toLowerCase() !== 'n') {
|
|
82
|
+
const id = await rl.question('\nSource ID (e.g., "myco"): ');
|
|
83
|
+
const name = await rl.question('Source Name (e.g., "My Company"): ');
|
|
84
|
+
const url = await rl.question('Base URL (e.g., "https://support.myco.com"): ');
|
|
85
|
+
const locale = await rl.question('Locale (e.g., "en-us"): ');
|
|
86
|
+
firstSource = {
|
|
87
|
+
id: id.trim(),
|
|
88
|
+
name: name.trim(),
|
|
89
|
+
baseUrl: url.trim().replace(/\/$/, ''),
|
|
90
|
+
locale: locale.trim(),
|
|
91
|
+
enabled: true,
|
|
92
|
+
};
|
|
93
|
+
// Test connection
|
|
94
|
+
console.log(`\nTesting connection to ${firstSource.baseUrl}...`);
|
|
95
|
+
const connected = await testConnection(firstSource);
|
|
96
|
+
if (!connected) {
|
|
97
|
+
console.log('ā Cannot connect to this knowledge base');
|
|
98
|
+
console.log('\nMake sure the URL is correct and the Help Center is publicly accessible.');
|
|
99
|
+
const continueAnyway = await rl.question('\nContinue anyway? (y/N): ');
|
|
100
|
+
if (continueAnyway.toLowerCase() !== 'y') {
|
|
101
|
+
firstSource = null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
console.log('ā Connection successful');
|
|
106
|
+
config.sources.push(firstSource);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
rl.close();
|
|
110
|
+
// Save config
|
|
111
|
+
await saveConfig(config);
|
|
112
|
+
console.log('\nā Configuration saved');
|
|
113
|
+
// Initialize database
|
|
114
|
+
await getDatabase();
|
|
115
|
+
console.log('ā Database initialized');
|
|
116
|
+
// Add source to database
|
|
117
|
+
if (firstSource) {
|
|
118
|
+
const db = await getDatabase();
|
|
119
|
+
upsertSource(db, firstSource);
|
|
120
|
+
console.log('ā Source added');
|
|
121
|
+
// Ask about syncing
|
|
122
|
+
console.log('\nš Step 3: Sync knowledge base\n');
|
|
123
|
+
console.log('You can now sync your knowledge base to make it searchable.');
|
|
124
|
+
console.log('\nRun:');
|
|
125
|
+
console.log(' kb-mcp sync\n');
|
|
126
|
+
}
|
|
127
|
+
// Show next steps
|
|
128
|
+
console.log('\nā
Setup complete!\n');
|
|
129
|
+
console.log('Next steps:\n');
|
|
130
|
+
if (!firstSource) {
|
|
131
|
+
console.log(' 1. Add a knowledge base:');
|
|
132
|
+
console.log(' kb-mcp sources add\n');
|
|
133
|
+
console.log(' 2. Sync the knowledge base:');
|
|
134
|
+
console.log(' kb-mcp sync\n');
|
|
135
|
+
console.log(' 3. Configure your MCP client:');
|
|
136
|
+
console.log(' kb-mcp setup <client>\n');
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
console.log(' 1. Sync the knowledge base:');
|
|
140
|
+
console.log(' kb-mcp sync\n');
|
|
141
|
+
console.log(' 2. Configure your MCP client:');
|
|
142
|
+
console.log(' kb-mcp setup <client>\n');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
exitWithError(error);
|
|
147
|
+
}
|
|
148
|
+
},
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/commands/init.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":";AAIA,wBAgBG"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
3
|
+
import { createServer } from '../index.js';
|
|
4
|
+
export default defineCommand({
|
|
5
|
+
meta: {
|
|
6
|
+
name: 'serve',
|
|
7
|
+
description: 'Start the MCP server (stdio)',
|
|
8
|
+
},
|
|
9
|
+
async run() {
|
|
10
|
+
try {
|
|
11
|
+
const server = await createServer();
|
|
12
|
+
const transport = new StdioServerTransport();
|
|
13
|
+
await server.connect(transport);
|
|
14
|
+
// Server is now running and will handle requests via stdio
|
|
15
|
+
}
|
|
16
|
+
catch (error) {
|
|
17
|
+
console.error('Failed to start MCP server:', error);
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/commands/serve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,oBAAoB,EAAE,MAAM,2CAA2C,CAAC;AACjF,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,8BAA8B;KAC5C;IACD,KAAK,CAAC,GAAG;QACP,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,EAAE,CAAC;YACpC,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;YAC7C,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAChC,2DAA2D;QAC7D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":";;;;;;;AAyEA,wBA+CG"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { exitWithError } from '../utils/errors.js';
|
|
3
|
+
const CONFIGS = {
|
|
4
|
+
'claude-code': {
|
|
5
|
+
name: 'Claude Code',
|
|
6
|
+
path: '~/.claude/claude_desktop_config.json',
|
|
7
|
+
config: {
|
|
8
|
+
mcpServers: {
|
|
9
|
+
'knowledge-base': {
|
|
10
|
+
command: 'kb-mcp',
|
|
11
|
+
args: ['serve'],
|
|
12
|
+
},
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
},
|
|
16
|
+
cursor: {
|
|
17
|
+
name: 'Cursor',
|
|
18
|
+
path: 'Settings ā Features ā MCP Servers',
|
|
19
|
+
config: {
|
|
20
|
+
mcpServers: {
|
|
21
|
+
'knowledge-base': {
|
|
22
|
+
command: 'kb-mcp',
|
|
23
|
+
args: ['serve'],
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
},
|
|
28
|
+
windsurf: {
|
|
29
|
+
name: 'Windsurf',
|
|
30
|
+
path: '~/.codeium/windsurf/mcp_config.json',
|
|
31
|
+
config: {
|
|
32
|
+
mcpServers: {
|
|
33
|
+
'knowledge-base': {
|
|
34
|
+
command: 'kb-mcp',
|
|
35
|
+
args: ['serve'],
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
},
|
|
40
|
+
continue: {
|
|
41
|
+
name: 'Continue.dev',
|
|
42
|
+
path: '~/.continue/config.json',
|
|
43
|
+
config: {
|
|
44
|
+
experimental: {
|
|
45
|
+
modelContextProtocolServers: [
|
|
46
|
+
{
|
|
47
|
+
transport: {
|
|
48
|
+
type: 'stdio',
|
|
49
|
+
command: 'kb-mcp',
|
|
50
|
+
args: ['serve'],
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
],
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
zed: {
|
|
58
|
+
name: 'Zed',
|
|
59
|
+
path: '~/.config/zed/settings.json',
|
|
60
|
+
config: {
|
|
61
|
+
context_servers: {
|
|
62
|
+
'knowledge-base': {
|
|
63
|
+
command: {
|
|
64
|
+
path: 'kb-mcp',
|
|
65
|
+
args: ['serve'],
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
};
|
|
72
|
+
export default defineCommand({
|
|
73
|
+
meta: {
|
|
74
|
+
name: 'setup',
|
|
75
|
+
description: 'Print MCP client configuration',
|
|
76
|
+
},
|
|
77
|
+
args: {
|
|
78
|
+
client: {
|
|
79
|
+
type: 'positional',
|
|
80
|
+
description: 'MCP client (claude-code, cursor, windsurf, continue, zed)',
|
|
81
|
+
required: false,
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
async run({ args }) {
|
|
85
|
+
try {
|
|
86
|
+
const client = args.client;
|
|
87
|
+
if (!client) {
|
|
88
|
+
// Show all options
|
|
89
|
+
console.log('\nš§ MCP Client Setup\n');
|
|
90
|
+
console.log('Run with a client name to see specific configuration:\n');
|
|
91
|
+
for (const [key, value] of Object.entries(CONFIGS)) {
|
|
92
|
+
console.log(` kb-mcp setup ${key.padEnd(15)} # ${value.name}`);
|
|
93
|
+
}
|
|
94
|
+
console.log();
|
|
95
|
+
return;
|
|
96
|
+
}
|
|
97
|
+
const config = CONFIGS[client];
|
|
98
|
+
if (!config) {
|
|
99
|
+
console.error(`\nā Unknown client: ${client}\n`);
|
|
100
|
+
console.error('Available clients:', Object.keys(CONFIGS).join(', '));
|
|
101
|
+
console.error();
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
console.log(`\nš§ ${config.name} Configuration\n`);
|
|
105
|
+
console.log(`Add this to ${config.path}:\n`);
|
|
106
|
+
console.log('```json');
|
|
107
|
+
console.log(JSON.stringify(config.config, null, 2));
|
|
108
|
+
console.log('```\n');
|
|
109
|
+
}
|
|
110
|
+
catch (error) {
|
|
111
|
+
exitWithError(error);
|
|
112
|
+
}
|
|
113
|
+
},
|
|
114
|
+
});
|
|
115
|
+
//# sourceMappingURL=setup.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["../../../src/commands/setup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAEnD,MAAM,OAAO,GAAG;IACd,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,IAAI,EAAE,sCAAsC;QAC5C,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB;aACF;SACF;KACF;IACD,MAAM,EAAE;QACN,IAAI,EAAE,QAAQ;QACd,IAAI,EAAE,mCAAmC;QACzC,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB;aACF;SACF;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,UAAU;QAChB,IAAI,EAAE,qCAAqC;QAC3C,MAAM,EAAE;YACN,UAAU,EAAE;gBACV,gBAAgB,EAAE;oBAChB,OAAO,EAAE,QAAQ;oBACjB,IAAI,EAAE,CAAC,OAAO,CAAC;iBAChB;aACF;SACF;KACF;IACD,QAAQ,EAAE;QACR,IAAI,EAAE,cAAc;QACpB,IAAI,EAAE,yBAAyB;QAC/B,MAAM,EAAE;YACN,YAAY,EAAE;gBACZ,2BAA2B,EAAE;oBAC3B;wBACE,SAAS,EAAE;4BACT,IAAI,EAAE,OAAO;4BACb,OAAO,EAAE,QAAQ;4BACjB,IAAI,EAAE,CAAC,OAAO,CAAC;yBAChB;qBACF;iBACF;aACF;SACF;KACF;IACD,GAAG,EAAE;QACH,IAAI,EAAE,KAAK;QACX,IAAI,EAAE,6BAA6B;QACnC,MAAM,EAAE;YACN,eAAe,EAAE;gBACf,gBAAgB,EAAE;oBAChB,OAAO,EAAE;wBACP,IAAI,EAAE,QAAQ;wBACd,IAAI,EAAE,CAAC,OAAO,CAAC;qBAChB;iBACF;aACF;SACF;KACF;CACF,CAAC;AAEF,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,OAAO;QACb,WAAW,EAAE,gCAAgC;KAC9C;IACD,IAAI,EAAE;QACJ,MAAM,EAAE;YACN,IAAI,EAAE,YAAY;YAClB,WAAW,EAAE,2DAA2D;YACxE,QAAQ,EAAE,KAAK;SAChB;KACF;IACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;QAChB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;YAEjD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,mBAAmB;gBACnB,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;gBACvC,OAAO,CAAC,GAAG,CAAC,yDAAyD,CAAC,CAAC;gBAEvE,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;oBACnD,OAAO,CAAC,GAAG,CAAC,kBAAkB,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAClE,CAAC;gBAED,OAAO,CAAC,GAAG,EAAE,CAAC;gBACd,OAAO;YACT,CAAC;YAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAA8B,CAAC,CAAC;YAEvD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,IAAI,CAAC,CAAC;gBACjD,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;gBACrE,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,IAAI,kBAAkB,CAAC,CAAC;YACnD,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,IAAI,KAAK,CAAC,CAAC;YAC7C,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACpD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACvB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,aAAa,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.d.ts","sourceRoot":"","sources":["../../../src/commands/sources.ts"],"names":[],"mappings":";AAQA,wBAwPG"}
|
|
@@ -0,0 +1,258 @@
|
|
|
1
|
+
import { defineCommand } from 'citty';
|
|
2
|
+
import { loadConfig, saveConfig } from '../config/index.js';
|
|
3
|
+
import { getDatabase } from '../db/index.js';
|
|
4
|
+
import { upsertSource, deleteSource, setSourceEnabled, getSourcesWithStats } from '../db/sources.js';
|
|
5
|
+
import { testConnection } from '../sync/zendesk.js';
|
|
6
|
+
import { exitWithError } from '../utils/errors.js';
|
|
7
|
+
export default defineCommand({
|
|
8
|
+
meta: {
|
|
9
|
+
name: 'sources',
|
|
10
|
+
description: 'Manage knowledge base sources',
|
|
11
|
+
},
|
|
12
|
+
subCommands: {
|
|
13
|
+
list: defineCommand({
|
|
14
|
+
meta: {
|
|
15
|
+
name: 'list',
|
|
16
|
+
description: 'List all sources',
|
|
17
|
+
},
|
|
18
|
+
async run() {
|
|
19
|
+
try {
|
|
20
|
+
const db = await getDatabase();
|
|
21
|
+
const sources = getSourcesWithStats(db);
|
|
22
|
+
if (sources.length === 0) {
|
|
23
|
+
console.log('\nNo sources configured yet.\n');
|
|
24
|
+
console.log('Add one with:');
|
|
25
|
+
console.log(' kb-mcp sources add\n');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
console.log('\nš Knowledge Base Sources\n');
|
|
29
|
+
for (const source of sources) {
|
|
30
|
+
const status = source.enabled ? 'ā' : 'ā';
|
|
31
|
+
const lastSynced = source.lastSyncedAt
|
|
32
|
+
? source.lastSyncedAt.toLocaleString()
|
|
33
|
+
: 'Never';
|
|
34
|
+
console.log(`${status} ${source.name} (${source.id})`);
|
|
35
|
+
console.log(` URL: ${source.baseUrl}`);
|
|
36
|
+
console.log(` Locale: ${source.locale}`);
|
|
37
|
+
console.log(` Articles: ${source.articleCount}`);
|
|
38
|
+
console.log(` Chunks: ${source.chunkCount}`);
|
|
39
|
+
console.log(` Last Synced: ${lastSynced}`);
|
|
40
|
+
console.log();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
exitWithError(error);
|
|
45
|
+
}
|
|
46
|
+
},
|
|
47
|
+
}),
|
|
48
|
+
add: defineCommand({
|
|
49
|
+
meta: {
|
|
50
|
+
name: 'add',
|
|
51
|
+
description: 'Add a new source',
|
|
52
|
+
},
|
|
53
|
+
args: {
|
|
54
|
+
id: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
description: 'Source ID',
|
|
57
|
+
},
|
|
58
|
+
name: {
|
|
59
|
+
type: 'string',
|
|
60
|
+
description: 'Source name',
|
|
61
|
+
},
|
|
62
|
+
url: {
|
|
63
|
+
type: 'string',
|
|
64
|
+
description: 'Zendesk Help Center base URL',
|
|
65
|
+
},
|
|
66
|
+
locale: {
|
|
67
|
+
type: 'string',
|
|
68
|
+
description: 'Locale (e.g., en-us, nl)',
|
|
69
|
+
},
|
|
70
|
+
},
|
|
71
|
+
async run({ args }) {
|
|
72
|
+
try {
|
|
73
|
+
const config = await loadConfig();
|
|
74
|
+
const db = await getDatabase();
|
|
75
|
+
// Interactive mode if no args provided
|
|
76
|
+
if (!args.id || !args.name || !args.url || !args.locale) {
|
|
77
|
+
const readline = await import('readline/promises');
|
|
78
|
+
const rl = readline.createInterface({
|
|
79
|
+
input: process.stdin,
|
|
80
|
+
output: process.stdout,
|
|
81
|
+
});
|
|
82
|
+
console.log('\nš Add Knowledge Base Source\n');
|
|
83
|
+
const id = args.id || await rl.question('Source ID (e.g., "myco"): ');
|
|
84
|
+
const name = args.name || await rl.question('Source Name (e.g., "My Company"): ');
|
|
85
|
+
const url = args.url || await rl.question('Base URL (e.g., "https://support.myco.com"): ');
|
|
86
|
+
const locale = args.locale || await rl.question('Locale (e.g., "en-us"): ');
|
|
87
|
+
rl.close();
|
|
88
|
+
const source = {
|
|
89
|
+
id: String(id).trim(),
|
|
90
|
+
name: String(name).trim(),
|
|
91
|
+
baseUrl: String(url).trim().replace(/\/$/, ''),
|
|
92
|
+
locale: String(locale).trim(),
|
|
93
|
+
enabled: true,
|
|
94
|
+
};
|
|
95
|
+
await addSource(config, db, source);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
const source = {
|
|
99
|
+
id: String(args.id),
|
|
100
|
+
name: String(args.name),
|
|
101
|
+
baseUrl: String(args.url).replace(/\/$/, ''),
|
|
102
|
+
locale: String(args.locale),
|
|
103
|
+
enabled: true,
|
|
104
|
+
};
|
|
105
|
+
await addSource(config, db, source);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
catch (error) {
|
|
109
|
+
exitWithError(error);
|
|
110
|
+
}
|
|
111
|
+
},
|
|
112
|
+
}),
|
|
113
|
+
remove: defineCommand({
|
|
114
|
+
meta: {
|
|
115
|
+
name: 'remove',
|
|
116
|
+
description: 'Remove a source',
|
|
117
|
+
},
|
|
118
|
+
args: {
|
|
119
|
+
id: {
|
|
120
|
+
type: 'positional',
|
|
121
|
+
description: 'Source ID to remove',
|
|
122
|
+
required: true,
|
|
123
|
+
},
|
|
124
|
+
},
|
|
125
|
+
async run({ args }) {
|
|
126
|
+
try {
|
|
127
|
+
const config = await loadConfig();
|
|
128
|
+
const db = await getDatabase();
|
|
129
|
+
const id = args.id;
|
|
130
|
+
// Remove from database
|
|
131
|
+
deleteSource(db, id);
|
|
132
|
+
// Remove from config
|
|
133
|
+
config.sources = config.sources.filter(s => s.id !== id);
|
|
134
|
+
await saveConfig(config);
|
|
135
|
+
console.log(`\nā Removed source: ${id}\n`);
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
exitWithError(error);
|
|
139
|
+
}
|
|
140
|
+
},
|
|
141
|
+
}),
|
|
142
|
+
enable: defineCommand({
|
|
143
|
+
meta: {
|
|
144
|
+
name: 'enable',
|
|
145
|
+
description: 'Enable a source',
|
|
146
|
+
},
|
|
147
|
+
args: {
|
|
148
|
+
id: {
|
|
149
|
+
type: 'positional',
|
|
150
|
+
description: 'Source ID to enable',
|
|
151
|
+
required: true,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
async run({ args }) {
|
|
155
|
+
try {
|
|
156
|
+
const config = await loadConfig();
|
|
157
|
+
const db = await getDatabase();
|
|
158
|
+
const id = args.id;
|
|
159
|
+
// Update database
|
|
160
|
+
setSourceEnabled(db, id, true);
|
|
161
|
+
// Update config
|
|
162
|
+
const source = config.sources.find(s => s.id === id);
|
|
163
|
+
if (source) {
|
|
164
|
+
source.enabled = true;
|
|
165
|
+
await saveConfig(config);
|
|
166
|
+
}
|
|
167
|
+
console.log(`\nā Enabled source: ${id}\n`);
|
|
168
|
+
}
|
|
169
|
+
catch (error) {
|
|
170
|
+
exitWithError(error);
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
}),
|
|
174
|
+
disable: defineCommand({
|
|
175
|
+
meta: {
|
|
176
|
+
name: 'disable',
|
|
177
|
+
description: 'Disable a source',
|
|
178
|
+
},
|
|
179
|
+
args: {
|
|
180
|
+
id: {
|
|
181
|
+
type: 'positional',
|
|
182
|
+
description: 'Source ID to disable',
|
|
183
|
+
required: true,
|
|
184
|
+
},
|
|
185
|
+
},
|
|
186
|
+
async run({ args }) {
|
|
187
|
+
try {
|
|
188
|
+
const config = await loadConfig();
|
|
189
|
+
const db = await getDatabase();
|
|
190
|
+
const id = args.id;
|
|
191
|
+
// Update database
|
|
192
|
+
setSourceEnabled(db, id, false);
|
|
193
|
+
// Update config
|
|
194
|
+
const source = config.sources.find(s => s.id === id);
|
|
195
|
+
if (source) {
|
|
196
|
+
source.enabled = false;
|
|
197
|
+
await saveConfig(config);
|
|
198
|
+
}
|
|
199
|
+
console.log(`\nā Disabled source: ${id}\n`);
|
|
200
|
+
}
|
|
201
|
+
catch (error) {
|
|
202
|
+
exitWithError(error);
|
|
203
|
+
}
|
|
204
|
+
},
|
|
205
|
+
}),
|
|
206
|
+
},
|
|
207
|
+
async run() {
|
|
208
|
+
// Default: list sources
|
|
209
|
+
const db = await getDatabase();
|
|
210
|
+
const sources = getSourcesWithStats(db);
|
|
211
|
+
if (sources.length === 0) {
|
|
212
|
+
console.log('\nNo sources configured yet.\n');
|
|
213
|
+
console.log('Add one with:');
|
|
214
|
+
console.log(' kb-mcp sources add\n');
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
console.log('\nš Knowledge Base Sources\n');
|
|
218
|
+
for (const source of sources) {
|
|
219
|
+
const status = source.enabled ? 'ā' : 'ā';
|
|
220
|
+
const lastSynced = source.lastSyncedAt
|
|
221
|
+
? source.lastSyncedAt.toLocaleString()
|
|
222
|
+
: 'Never';
|
|
223
|
+
console.log(`${status} ${source.name} (${source.id})`);
|
|
224
|
+
console.log(` URL: ${source.baseUrl}`);
|
|
225
|
+
console.log(` Locale: ${source.locale}`);
|
|
226
|
+
console.log(` Articles: ${source.articleCount}`);
|
|
227
|
+
console.log(` Chunks: ${source.chunkCount}`);
|
|
228
|
+
console.log(` Last Synced: ${lastSynced}`);
|
|
229
|
+
console.log();
|
|
230
|
+
}
|
|
231
|
+
},
|
|
232
|
+
});
|
|
233
|
+
async function addSource(config, db, source) {
|
|
234
|
+
// Validate
|
|
235
|
+
if (!source.id || !source.name || !source.baseUrl || !source.locale) {
|
|
236
|
+
throw new Error('All fields are required');
|
|
237
|
+
}
|
|
238
|
+
// Check if source already exists
|
|
239
|
+
if (config.sources.some((s) => s.id === source.id)) {
|
|
240
|
+
throw new Error(`Source with ID '${source.id}' already exists`);
|
|
241
|
+
}
|
|
242
|
+
// Test connection
|
|
243
|
+
console.log(`\nTesting connection to ${source.baseUrl}...`);
|
|
244
|
+
const connected = await testConnection(source);
|
|
245
|
+
if (!connected) {
|
|
246
|
+
throw new Error(`Cannot connect to ${source.baseUrl}\n\n` +
|
|
247
|
+
`Make sure the URL is correct and the Help Center is publicly accessible.`);
|
|
248
|
+
}
|
|
249
|
+
console.log('ā Connection successful');
|
|
250
|
+
// Add to database
|
|
251
|
+
upsertSource(db, source);
|
|
252
|
+
// Add to config
|
|
253
|
+
config.sources.push(source);
|
|
254
|
+
await saveConfig(config);
|
|
255
|
+
console.log(`\nā Added source: ${source.name} (${source.id})`);
|
|
256
|
+
console.log(`\nRun 'kb-mcp sync' to index this knowledge base.\n`);
|
|
257
|
+
}
|
|
258
|
+
//# sourceMappingURL=sources.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sources.js","sourceRoot":"","sources":["../../../src/commands/sources.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/stats.ts"],"names":[],"mappings":";AAKA,wBAqCG"}
|