@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.
Files changed (106) hide show
  1. package/README.md +416 -0
  2. package/dist/scripts/postinstall.d.ts +3 -0
  3. package/dist/scripts/postinstall.d.ts.map +1 -0
  4. package/dist/scripts/postinstall.js +110 -0
  5. package/dist/scripts/postinstall.js.map +1 -0
  6. package/dist/src/cli.d.ts +3 -0
  7. package/dist/src/cli.d.ts.map +1 -0
  8. package/dist/src/cli.js +22 -0
  9. package/dist/src/cli.js.map +1 -0
  10. package/dist/src/commands/doctor.d.ts +3 -0
  11. package/dist/src/commands/doctor.d.ts.map +1 -0
  12. package/dist/src/commands/doctor.js +93 -0
  13. package/dist/src/commands/doctor.js.map +1 -0
  14. package/dist/src/commands/init.d.ts +3 -0
  15. package/dist/src/commands/init.d.ts.map +1 -0
  16. package/dist/src/commands/init.js +150 -0
  17. package/dist/src/commands/init.js.map +1 -0
  18. package/dist/src/commands/serve.d.ts +3 -0
  19. package/dist/src/commands/serve.d.ts.map +1 -0
  20. package/dist/src/commands/serve.js +22 -0
  21. package/dist/src/commands/serve.js.map +1 -0
  22. package/dist/src/commands/setup.d.ts +9 -0
  23. package/dist/src/commands/setup.d.ts.map +1 -0
  24. package/dist/src/commands/setup.js +115 -0
  25. package/dist/src/commands/setup.js.map +1 -0
  26. package/dist/src/commands/sources.d.ts +3 -0
  27. package/dist/src/commands/sources.d.ts.map +1 -0
  28. package/dist/src/commands/sources.js +258 -0
  29. package/dist/src/commands/sources.js.map +1 -0
  30. package/dist/src/commands/stats.d.ts +3 -0
  31. package/dist/src/commands/stats.d.ts.map +1 -0
  32. package/dist/src/commands/stats.js +48 -0
  33. package/dist/src/commands/stats.js.map +1 -0
  34. package/dist/src/commands/sync.d.ts +13 -0
  35. package/dist/src/commands/sync.d.ts.map +1 -0
  36. package/dist/src/commands/sync.js +106 -0
  37. package/dist/src/commands/sync.js.map +1 -0
  38. package/dist/src/config/index.d.ts +18 -0
  39. package/dist/src/config/index.d.ts.map +1 -0
  40. package/dist/src/config/index.js +67 -0
  41. package/dist/src/config/index.js.map +1 -0
  42. package/dist/src/config/paths.d.ts +21 -0
  43. package/dist/src/config/paths.d.ts.map +1 -0
  44. package/dist/src/config/paths.js +38 -0
  45. package/dist/src/config/paths.js.map +1 -0
  46. package/dist/src/config/schema.d.ts +133 -0
  47. package/dist/src/config/schema.d.ts.map +1 -0
  48. package/dist/src/config/schema.js +34 -0
  49. package/dist/src/config/schema.js.map +1 -0
  50. package/dist/src/db/articles.d.ts +39 -0
  51. package/dist/src/db/articles.d.ts.map +1 -0
  52. package/dist/src/db/articles.js +103 -0
  53. package/dist/src/db/articles.js.map +1 -0
  54. package/dist/src/db/chunks.d.ts +46 -0
  55. package/dist/src/db/chunks.d.ts.map +1 -0
  56. package/dist/src/db/chunks.js +129 -0
  57. package/dist/src/db/chunks.js.map +1 -0
  58. package/dist/src/db/index.d.ts +19 -0
  59. package/dist/src/db/index.d.ts.map +1 -0
  60. package/dist/src/db/index.js +86 -0
  61. package/dist/src/db/index.js.map +1 -0
  62. package/dist/src/db/schema.d.ts +10 -0
  63. package/dist/src/db/schema.d.ts.map +1 -0
  64. package/dist/src/db/schema.js +80 -0
  65. package/dist/src/db/schema.js.map +1 -0
  66. package/dist/src/db/sources.d.ts +48 -0
  67. package/dist/src/db/sources.d.ts.map +1 -0
  68. package/dist/src/db/sources.js +110 -0
  69. package/dist/src/db/sources.js.map +1 -0
  70. package/dist/src/index.d.ts +8 -0
  71. package/dist/src/index.d.ts.map +1 -0
  72. package/dist/src/index.js +87 -0
  73. package/dist/src/index.js.map +1 -0
  74. package/dist/src/search/embeddings.d.ts +22 -0
  75. package/dist/src/search/embeddings.d.ts.map +1 -0
  76. package/dist/src/search/embeddings.js +122 -0
  77. package/dist/src/search/embeddings.js.map +1 -0
  78. package/dist/src/search/index.d.ts +21 -0
  79. package/dist/src/search/index.d.ts.map +1 -0
  80. package/dist/src/search/index.js +50 -0
  81. package/dist/src/search/index.js.map +1 -0
  82. package/dist/src/sync/chunker.d.ts +15 -0
  83. package/dist/src/sync/chunker.d.ts.map +1 -0
  84. package/dist/src/sync/chunker.js +117 -0
  85. package/dist/src/sync/chunker.js.map +1 -0
  86. package/dist/src/sync/index.d.ts +24 -0
  87. package/dist/src/sync/index.d.ts.map +1 -0
  88. package/dist/src/sync/index.js +180 -0
  89. package/dist/src/sync/index.js.map +1 -0
  90. package/dist/src/sync/parser.d.ts +9 -0
  91. package/dist/src/sync/parser.d.ts.map +1 -0
  92. package/dist/src/sync/parser.js +91 -0
  93. package/dist/src/sync/parser.js.map +1 -0
  94. package/dist/src/sync/zendesk.d.ts +45 -0
  95. package/dist/src/sync/zendesk.d.ts.map +1 -0
  96. package/dist/src/sync/zendesk.js +161 -0
  97. package/dist/src/sync/zendesk.js.map +1 -0
  98. package/dist/src/utils/errors.d.ts +39 -0
  99. package/dist/src/utils/errors.d.ts.map +1 -0
  100. package/dist/src/utils/errors.js +62 -0
  101. package/dist/src/utils/errors.js.map +1 -0
  102. package/dist/src/utils/logger.d.ts +21 -0
  103. package/dist/src/utils/logger.d.ts.map +1 -0
  104. package/dist/src/utils/logger.js +25 -0
  105. package/dist/src/utils/logger.js.map +1 -0
  106. 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,3 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
3
+ //# sourceMappingURL=serve.d.ts.map
@@ -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,9 @@
1
+ declare const _default: import("citty").CommandDef<{
2
+ client: {
3
+ type: "positional";
4
+ description: string;
5
+ required: false;
6
+ };
7
+ }>;
8
+ export default _default;
9
+ //# sourceMappingURL=setup.d.ts.map
@@ -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":"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"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
3
+ //# sourceMappingURL=sources.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AACtC,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC7C,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AAGnD,eAAe,aAAa,CAAC;IAC3B,IAAI,EAAE;QACJ,IAAI,EAAE,SAAS;QACf,WAAW,EAAE,+BAA+B;KAC7C;IACD,WAAW,EAAE;QACX,IAAI,EAAE,aAAa,CAAC;YAClB,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM;gBACZ,WAAW,EAAE,kBAAkB;aAChC;YACD,KAAK,CAAC,GAAG;gBACP,IAAI,CAAC;oBACH,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;oBAC/B,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;oBAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACzB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;wBAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;wBAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;wBACtC,OAAO;oBACT,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;oBAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;wBAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY;4BACpC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE;4BACtC,CAAC,CAAC,OAAO,CAAC;wBAEZ,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;wBACvD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;wBACxC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;wBAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;wBAClD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;wBAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;wBAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,GAAG,EAAE,aAAa,CAAC;YACjB,IAAI,EAAE;gBACJ,IAAI,EAAE,KAAK;gBACX,WAAW,EAAE,kBAAkB;aAChC;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE;oBACF,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,WAAW;iBACzB;gBACD,IAAI,EAAE;oBACJ,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,aAAa;iBAC3B;gBACD,GAAG,EAAE;oBACH,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,8BAA8B;iBAC5C;gBACD,MAAM,EAAE;oBACN,IAAI,EAAE,QAAQ;oBACd,WAAW,EAAE,0BAA0B;iBACxC;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;oBAClC,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;oBAE/B,uCAAuC;oBACvC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;wBACxD,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;wBACnD,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC;4BAClC,KAAK,EAAE,OAAO,CAAC,KAAK;4BACpB,MAAM,EAAE,OAAO,CAAC,MAAM;yBACvB,CAAC,CAAC;wBAEH,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;wBAEhD,MAAM,EAAE,GAAI,IAAI,CAAC,EAAa,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,4BAA4B,CAAC,CAAC;wBAClF,MAAM,IAAI,GAAI,IAAI,CAAC,IAAe,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC,CAAC;wBAC9F,MAAM,GAAG,GAAI,IAAI,CAAC,GAAc,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,+CAA+C,CAAC,CAAC;wBACvG,MAAM,MAAM,GAAI,IAAI,CAAC,MAAiB,IAAI,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC,CAAC;wBAExF,EAAE,CAAC,KAAK,EAAE,CAAC;wBAEX,MAAM,MAAM,GAAW;4BACrB,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE;4BACrB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE;4BACzB,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;4BAC9C,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE;4BAC7B,OAAO,EAAE,IAAI;yBACd,CAAC;wBAEF,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACtC,CAAC;yBAAM,CAAC;wBACN,MAAM,MAAM,GAAW;4BACrB,EAAE,EAAE,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;4BACnB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;4BACvB,OAAO,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC;4BAC5C,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC;4BAC3B,OAAO,EAAE,IAAI;yBACd,CAAC;wBAEF,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,CAAC;oBACtC,CAAC;gBACH,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,MAAM,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE;oBACF,IAAI,EAAE,YAAY;oBAClB,WAAW,EAAE,qBAAqB;oBAClC,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;oBAClC,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;oBAE7B,uBAAuB;oBACvB,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;oBAErB,qBAAqB;oBACrB,MAAM,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACzD,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBAEzB,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,MAAM,EAAE,aAAa,CAAC;YACpB,IAAI,EAAE;gBACJ,IAAI,EAAE,QAAQ;gBACd,WAAW,EAAE,iBAAiB;aAC/B;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE;oBACF,IAAI,EAAE,YAAY;oBAClB,WAAW,EAAE,qBAAqB;oBAClC,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;oBAClC,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;oBAE7B,kBAAkB;oBAClB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;oBAE/B,gBAAgB;oBAChB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACrD,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;wBACtB,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,uBAAuB,EAAE,IAAI,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;QAEF,OAAO,EAAE,aAAa,CAAC;YACrB,IAAI,EAAE;gBACJ,IAAI,EAAE,SAAS;gBACf,WAAW,EAAE,kBAAkB;aAChC;YACD,IAAI,EAAE;gBACJ,EAAE,EAAE;oBACF,IAAI,EAAE,YAAY;oBAClB,WAAW,EAAE,sBAAsB;oBACnC,QAAQ,EAAE,IAAI;iBACf;aACF;YACD,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE;gBAChB,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAC;oBAClC,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;oBAC/B,MAAM,EAAE,GAAG,IAAI,CAAC,EAAY,CAAC;oBAE7B,kBAAkB;oBAClB,gBAAgB,CAAC,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC;oBAEhC,gBAAgB;oBAChB,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;oBACrD,IAAI,MAAM,EAAE,CAAC;wBACX,MAAM,CAAC,OAAO,GAAG,KAAK,CAAC;wBACvB,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;oBAC3B,CAAC;oBAED,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,IAAI,CAAC,CAAC;gBAC9C,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,aAAa,CAAC,KAAK,CAAC,CAAC;gBACvB,CAAC;YACH,CAAC;SACF,CAAC;KACH;IAED,KAAK,CAAC,GAAG;QACP,wBAAwB;QACxB,MAAM,EAAE,GAAG,MAAM,WAAW,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,mBAAmB,CAAC,EAAE,CAAC,CAAC;QAExC,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;YAC7B,OAAO,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;YACtC,OAAO;QACT,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QAE7C,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YAC1C,MAAM,UAAU,GAAG,MAAM,CAAC,YAAY;gBACpC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,cAAc,EAAE;gBACtC,CAAC,CAAC,OAAO,CAAC;YAEZ,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;YACvD,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1C,OAAO,CAAC,GAAG,CAAC,eAAe,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;YAClD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,kBAAkB,UAAU,EAAE,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,EAAE,CAAC;QAChB,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,KAAK,UAAU,SAAS,CAAC,MAAW,EAAE,EAAO,EAAE,MAAc;IAC3D,WAAW;IACX,IAAI,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;QAC3D,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,CAAC,EAAE,kBAAkB,CAAC,CAAC;IAClE,CAAC;IAED,kBAAkB;IAClB,OAAO,CAAC,GAAG,CAAC,2BAA2B,MAAM,CAAC,OAAO,KAAK,CAAC,CAAC;IAE5D,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,CAAC;IAE/C,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,qBAAqB,MAAM,CAAC,OAAO,MAAM;YACzC,0EAA0E,CAC3E,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,yBAAyB,CAAC,CAAC;IAEvC,kBAAkB;IAClB,YAAY,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAEzB,gBAAgB;IAChB,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,UAAU,CAAC,MAAM,CAAC,CAAC;IAEzB,OAAO,CAAC,GAAG,CAAC,qBAAqB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,GAAG,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;AACrE,CAAC"}
@@ -0,0 +1,3 @@
1
+ declare const _default: import("citty").CommandDef<import("citty").ArgsDef>;
2
+ export default _default;
3
+ //# sourceMappingURL=stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stats.d.ts","sourceRoot":"","sources":["../../../src/commands/stats.ts"],"names":[],"mappings":";AAKA,wBAqCG"}