hoolix 0.0.1-beta.19
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/README.md +337 -0
- package/STABILITY.md +109 -0
- package/bin/hoolix.js +50 -0
- package/bin/mcp-portal.js +12 -0
- package/bin/postinstall.js +61 -0
- package/dist/app/contracts.d.ts +105 -0
- package/dist/app/contracts.d.ts.map +1 -0
- package/dist/app/contracts.js +2 -0
- package/dist/app/contracts.js.map +1 -0
- package/dist/app/events.d.ts +13 -0
- package/dist/app/events.d.ts.map +1 -0
- package/dist/app/events.js +13 -0
- package/dist/app/events.js.map +1 -0
- package/dist/app/services/analytics.d.ts +42 -0
- package/dist/app/services/analytics.d.ts.map +1 -0
- package/dist/app/services/analytics.js +106 -0
- package/dist/app/services/analytics.js.map +1 -0
- package/dist/app/services/catalog.d.ts +14 -0
- package/dist/app/services/catalog.d.ts.map +1 -0
- package/dist/app/services/catalog.js +26 -0
- package/dist/app/services/catalog.js.map +1 -0
- package/dist/app/services/credentials.d.ts +42 -0
- package/dist/app/services/credentials.d.ts.map +1 -0
- package/dist/app/services/credentials.js +143 -0
- package/dist/app/services/credentials.js.map +1 -0
- package/dist/app/services/servers.d.ts +15 -0
- package/dist/app/services/servers.d.ts.map +1 -0
- package/dist/app/services/servers.js +445 -0
- package/dist/app/services/servers.js.map +1 -0
- package/dist/catalog/community.d.ts +19 -0
- package/dist/catalog/community.d.ts.map +1 -0
- package/dist/catalog/community.js +53 -0
- package/dist/catalog/community.js.map +1 -0
- package/dist/catalog/templates.d.ts +436 -0
- package/dist/catalog/templates.d.ts.map +1 -0
- package/dist/catalog/templates.js +489 -0
- package/dist/catalog/templates.js.map +1 -0
- package/dist/commands/audit.d.ts +2 -0
- package/dist/commands/audit.d.ts.map +1 -0
- package/dist/commands/audit.js +122 -0
- package/dist/commands/audit.js.map +1 -0
- package/dist/commands/bundle.d.ts +11 -0
- package/dist/commands/bundle.d.ts.map +1 -0
- package/dist/commands/bundle.js +299 -0
- package/dist/commands/bundle.js.map +1 -0
- package/dist/commands/clients.d.ts +6 -0
- package/dist/commands/clients.d.ts.map +1 -0
- package/dist/commands/clients.js +242 -0
- package/dist/commands/clients.js.map +1 -0
- package/dist/commands/completion.d.ts +18 -0
- package/dist/commands/completion.d.ts.map +1 -0
- package/dist/commands/completion.js +495 -0
- package/dist/commands/completion.js.map +1 -0
- package/dist/commands/connect.d.ts +10 -0
- package/dist/commands/connect.d.ts.map +1 -0
- package/dist/commands/connect.js +463 -0
- package/dist/commands/connect.js.map +1 -0
- package/dist/commands/create.d.ts +2 -0
- package/dist/commands/create.d.ts.map +1 -0
- package/dist/commands/create.js +607 -0
- package/dist/commands/create.js.map +1 -0
- package/dist/commands/delete.d.ts +2 -0
- package/dist/commands/delete.d.ts.map +1 -0
- package/dist/commands/delete.js +44 -0
- package/dist/commands/delete.js.map +1 -0
- package/dist/commands/doctor.d.ts +2 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +259 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/export.d.ts +2 -0
- package/dist/commands/export.d.ts.map +1 -0
- package/dist/commands/export.js +93 -0
- package/dist/commands/export.js.map +1 -0
- package/dist/commands/gui.d.ts +2 -0
- package/dist/commands/gui.d.ts.map +1 -0
- package/dist/commands/gui.js +19 -0
- package/dist/commands/gui.js.map +1 -0
- package/dist/commands/import.d.ts +2 -0
- package/dist/commands/import.d.ts.map +1 -0
- package/dist/commands/import.js +102 -0
- package/dist/commands/import.js.map +1 -0
- package/dist/commands/info.d.ts +2 -0
- package/dist/commands/info.d.ts.map +1 -0
- package/dist/commands/info.js +151 -0
- package/dist/commands/info.js.map +1 -0
- package/dist/commands/list.d.ts +2 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +90 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/reindex.d.ts +2 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +186 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/rotate.d.ts +2 -0
- package/dist/commands/rotate.d.ts.map +1 -0
- package/dist/commands/rotate.js +67 -0
- package/dist/commands/rotate.js.map +1 -0
- package/dist/commands/secrets.d.ts +10 -0
- package/dist/commands/secrets.d.ts.map +1 -0
- package/dist/commands/secrets.js +293 -0
- package/dist/commands/secrets.js.map +1 -0
- package/dist/commands/start.d.ts +2 -0
- package/dist/commands/start.d.ts.map +1 -0
- package/dist/commands/start.js +234 -0
- package/dist/commands/start.js.map +1 -0
- package/dist/commands/stats.d.ts +2 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +220 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/stop.d.ts +2 -0
- package/dist/commands/stop.d.ts.map +1 -0
- package/dist/commands/stop.js +24 -0
- package/dist/commands/stop.js.map +1 -0
- package/dist/commands/templates.d.ts +2 -0
- package/dist/commands/templates.d.ts.map +1 -0
- package/dist/commands/templates.js +168 -0
- package/dist/commands/templates.js.map +1 -0
- package/dist/commands/trial.d.ts +2 -0
- package/dist/commands/trial.d.ts.map +1 -0
- package/dist/commands/trial.js +61 -0
- package/dist/commands/trial.js.map +1 -0
- package/dist/commands/uninstall.d.ts +2 -0
- package/dist/commands/uninstall.d.ts.map +1 -0
- package/dist/commands/uninstall.js +114 -0
- package/dist/commands/uninstall.js.map +1 -0
- package/dist/commands/update.d.ts +2 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +104 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/verify.d.ts +2 -0
- package/dist/commands/verify.d.ts.map +1 -0
- package/dist/commands/verify.js +301 -0
- package/dist/commands/verify.js.map +1 -0
- package/dist/core/config.d.ts +25 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +54 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/errors.d.ts +25 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +53 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +3 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +12 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/paths.d.ts +15 -0
- package/dist/core/paths.d.ts.map +1 -0
- package/dist/core/paths.js +51 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/registry.d.ts +474 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +186 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/updater.d.ts +16 -0
- package/dist/core/updater.d.ts.map +1 -0
- package/dist/core/updater.js +317 -0
- package/dist/core/updater.js.map +1 -0
- package/dist/core/version.d.ts +2 -0
- package/dist/core/version.d.ts.map +1 -0
- package/dist/core/version.js +3 -0
- package/dist/core/version.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +270 -0
- package/dist/index.js.map +1 -0
- package/dist/ingestion/chunker.d.ts +13 -0
- package/dist/ingestion/chunker.d.ts.map +1 -0
- package/dist/ingestion/chunker.js +107 -0
- package/dist/ingestion/chunker.js.map +1 -0
- package/dist/ingestion/cleaners.d.ts +10 -0
- package/dist/ingestion/cleaners.d.ts.map +1 -0
- package/dist/ingestion/cleaners.js +61 -0
- package/dist/ingestion/cleaners.js.map +1 -0
- package/dist/ingestion/detectors.d.ts +5 -0
- package/dist/ingestion/detectors.d.ts.map +1 -0
- package/dist/ingestion/detectors.js +25 -0
- package/dist/ingestion/detectors.js.map +1 -0
- package/dist/ingestion/fetchers.d.ts +38 -0
- package/dist/ingestion/fetchers.d.ts.map +1 -0
- package/dist/ingestion/fetchers.js +296 -0
- package/dist/ingestion/fetchers.js.map +1 -0
- package/dist/ingestion/github.d.ts +60 -0
- package/dist/ingestion/github.d.ts.map +1 -0
- package/dist/ingestion/github.js +314 -0
- package/dist/ingestion/github.js.map +1 -0
- package/dist/ingestion/pipeline.d.ts +3 -0
- package/dist/ingestion/pipeline.d.ts.map +1 -0
- package/dist/ingestion/pipeline.js +160 -0
- package/dist/ingestion/pipeline.js.map +1 -0
- package/dist/ingestion/types.d.ts +51 -0
- package/dist/ingestion/types.d.ts.map +1 -0
- package/dist/ingestion/types.js +2 -0
- package/dist/ingestion/types.js.map +1 -0
- package/dist/lib/auth.d.ts +2 -0
- package/dist/lib/auth.d.ts.map +1 -0
- package/dist/lib/auth.js +6 -0
- package/dist/lib/auth.js.map +1 -0
- package/dist/lib/embedding.d.ts +10 -0
- package/dist/lib/embedding.d.ts.map +1 -0
- package/dist/lib/embedding.js +21 -0
- package/dist/lib/embedding.js.map +1 -0
- package/dist/mcp/host.d.ts +16 -0
- package/dist/mcp/host.d.ts.map +1 -0
- package/dist/mcp/host.js +307 -0
- package/dist/mcp/host.js.map +1 -0
- package/dist/mcp/proxy-host.d.ts +25 -0
- package/dist/mcp/proxy-host.d.ts.map +1 -0
- package/dist/mcp/proxy-host.js +393 -0
- package/dist/mcp/proxy-host.js.map +1 -0
- package/dist/mcp/stdio-host.d.ts +19 -0
- package/dist/mcp/stdio-host.d.ts.map +1 -0
- package/dist/mcp/stdio-host.js +175 -0
- package/dist/mcp/stdio-host.js.map +1 -0
- package/dist/process/manager.d.ts +74 -0
- package/dist/process/manager.d.ts.map +1 -0
- package/dist/process/manager.js +322 -0
- package/dist/process/manager.js.map +1 -0
- package/dist/rag/models.d.ts +30 -0
- package/dist/rag/models.d.ts.map +1 -0
- package/dist/rag/models.js +30 -0
- package/dist/rag/models.js.map +1 -0
- package/dist/rag/store.d.ts +63 -0
- package/dist/rag/store.d.ts.map +1 -0
- package/dist/rag/store.js +505 -0
- package/dist/rag/store.js.map +1 -0
- package/dist/rag/types.d.ts +56 -0
- package/dist/rag/types.d.ts.map +1 -0
- package/dist/rag/types.js +2 -0
- package/dist/rag/types.js.map +1 -0
- package/dist/sources/plugins.d.ts +25 -0
- package/dist/sources/plugins.d.ts.map +1 -0
- package/dist/sources/plugins.js +55 -0
- package/dist/sources/plugins.js.map +1 -0
- package/dist/sources/registry.d.ts +19 -0
- package/dist/sources/registry.d.ts.map +1 -0
- package/dist/sources/registry.js +183 -0
- package/dist/sources/registry.js.map +1 -0
- package/dist/sources/types.d.ts +361 -0
- package/dist/sources/types.d.ts.map +1 -0
- package/dist/sources/types.js +59 -0
- package/dist/sources/types.js.map +1 -0
- package/dist/tui/index.d.ts +22 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +711 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/ui/format.d.ts +27 -0
- package/dist/ui/format.d.ts.map +1 -0
- package/dist/ui/format.js +80 -0
- package/dist/ui/format.js.map +1 -0
- package/dist/ui/help.d.ts +2 -0
- package/dist/ui/help.d.ts.map +1 -0
- package/dist/ui/help.js +106 -0
- package/dist/ui/help.js.map +1 -0
- package/dist/web/assets.d.ts +2 -0
- package/dist/web/assets.d.ts.map +1 -0
- package/dist/web/assets.js +659 -0
- package/dist/web/assets.js.map +1 -0
- package/dist/web/server.d.ts +9 -0
- package/dist/web/server.d.ts.map +1 -0
- package/dist/web/server.js +349 -0
- package/dist/web/server.js.map +1 -0
- package/package.json +105 -0
|
@@ -0,0 +1,463 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import fs from 'fs-extra';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { text, select, isCancel, cancel } from '@clack/prompts';
|
|
6
|
+
import { getServerMetadata } from '../core/registry.js';
|
|
7
|
+
import { serverManager } from '../process/manager.js';
|
|
8
|
+
import { logger } from '../core/logger.js';
|
|
9
|
+
import { ServerNotFoundError } from '../core/errors.js';
|
|
10
|
+
import { loadCredentials } from '../app/services/credentials.js';
|
|
11
|
+
import { interpolateRunConfig } from '../app/services/credentials.js';
|
|
12
|
+
import { getTemplate } from '../app/services/catalog.js';
|
|
13
|
+
import { printTitle, printSection, printCommand, printJson, ui, } from '../ui/format.js';
|
|
14
|
+
export const ALL_CLIENTS = [
|
|
15
|
+
'claude', 'claude-code', 'cursor', 'vscode',
|
|
16
|
+
'windsurf', 'continue', 'cline', 'codex', 'grokbuild', 'generic',
|
|
17
|
+
];
|
|
18
|
+
export function getConfigPath(client, { projectCwd } = {}) {
|
|
19
|
+
const home = os.homedir();
|
|
20
|
+
const cwd = projectCwd || process.cwd();
|
|
21
|
+
const appdata = process.env.APPDATA;
|
|
22
|
+
const isWin = process.platform === 'win32';
|
|
23
|
+
const isMac = process.platform === 'darwin';
|
|
24
|
+
const useProject = !!projectCwd;
|
|
25
|
+
switch (client) {
|
|
26
|
+
case 'claude': {
|
|
27
|
+
if (isWin && appdata)
|
|
28
|
+
return path.join(appdata, 'Claude', 'claude_desktop_config.json');
|
|
29
|
+
if (isMac)
|
|
30
|
+
return path.join(home, 'Library', 'Application Support', 'Claude', 'claude_desktop_config.json');
|
|
31
|
+
return path.join(home, '.config', 'Claude', 'claude_desktop_config.json');
|
|
32
|
+
}
|
|
33
|
+
case 'claude-code':
|
|
34
|
+
return path.join(home, '.claude', 'settings.json');
|
|
35
|
+
case 'cursor':
|
|
36
|
+
return path.join(useProject ? cwd : home, '.cursor', 'mcp.json');
|
|
37
|
+
case 'vscode':
|
|
38
|
+
// Project-level: .vscode/mcp.json (uses 'servers' key, VS Code 1.99+)
|
|
39
|
+
// Global: VS Code settings.json — not written to avoid stomping unrelated settings
|
|
40
|
+
return useProject ? path.join(cwd, '.vscode', 'mcp.json') : null;
|
|
41
|
+
case 'windsurf':
|
|
42
|
+
return path.join(home, '.codeium', 'windsurf', 'mcp_config.json');
|
|
43
|
+
case 'continue':
|
|
44
|
+
return path.join(useProject ? cwd : home, '.continue', 'mcpServers', 'mcp.json');
|
|
45
|
+
case 'cline':
|
|
46
|
+
return path.join(home, '.cline', 'mcp.json');
|
|
47
|
+
case 'codex':
|
|
48
|
+
return path.join(home, '.codex', 'config.json');
|
|
49
|
+
case 'grokbuild':
|
|
50
|
+
return path.join(home, '.grokbuild', 'mcp.json');
|
|
51
|
+
default:
|
|
52
|
+
return null;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
export function detectPreferredClient() {
|
|
56
|
+
// Check in priority order: most recently adopted first
|
|
57
|
+
const candidates = ['claude-code', 'cursor', 'claude', 'windsurf', 'cline', 'continue', 'grokbuild'];
|
|
58
|
+
for (const c of candidates) {
|
|
59
|
+
const p = getConfigPath(c);
|
|
60
|
+
if (p) {
|
|
61
|
+
try {
|
|
62
|
+
if (fs.pathExistsSync(path.dirname(p)) || fs.pathExistsSync(p))
|
|
63
|
+
return c;
|
|
64
|
+
}
|
|
65
|
+
catch { }
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
return 'generic';
|
|
69
|
+
}
|
|
70
|
+
export function copyToClipboard(text) {
|
|
71
|
+
try {
|
|
72
|
+
if (process.platform === 'win32') {
|
|
73
|
+
execSync('clip', { input: text, stdio: ['pipe', 'ignore', 'ignore'] });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
if (process.platform === 'darwin') {
|
|
77
|
+
execSync('pbcopy', { input: text, stdio: ['pipe', 'ignore', 'ignore'] });
|
|
78
|
+
return true;
|
|
79
|
+
}
|
|
80
|
+
try {
|
|
81
|
+
execSync('xclip -selection clipboard', { input: text, stdio: ['pipe', 'ignore', 'ignore'] });
|
|
82
|
+
return true;
|
|
83
|
+
}
|
|
84
|
+
catch { }
|
|
85
|
+
execSync('wl-copy', { input: text, stdio: ['pipe', 'ignore', 'ignore'] });
|
|
86
|
+
return true;
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
export function getClientSteps(client, transport = 'http') {
|
|
93
|
+
switch (client) {
|
|
94
|
+
case 'claude':
|
|
95
|
+
return [
|
|
96
|
+
'Open Claude Desktop.',
|
|
97
|
+
'Go to Settings → Developer → Edit Config (or edit claude_desktop_config.json directly).',
|
|
98
|
+
'The entry has been auto-merged under "mcpServers".',
|
|
99
|
+
'Save and fully restart Claude Desktop.',
|
|
100
|
+
];
|
|
101
|
+
case 'claude-code':
|
|
102
|
+
return transport === 'stdio'
|
|
103
|
+
? [
|
|
104
|
+
'The entry has been merged into ~/.claude/settings.json.',
|
|
105
|
+
'Claude Code reads this on startup — no restart needed for new sessions.',
|
|
106
|
+
'Verify: claude mcp list (or start a new chat and try the server tools).',
|
|
107
|
+
]
|
|
108
|
+
: [
|
|
109
|
+
'The HTTP entry has been merged into ~/.claude/settings.json.',
|
|
110
|
+
'Ensure the server is running: hoolix start <slug>',
|
|
111
|
+
'Verify: claude mcp list',
|
|
112
|
+
];
|
|
113
|
+
case 'cursor':
|
|
114
|
+
return [
|
|
115
|
+
'The entry has been auto-merged into ~/.cursor/mcp.json (or .cursor/mcp.json for --project).',
|
|
116
|
+
'Reload the Cursor window: Cmd/Ctrl+Shift+P → "Reload Window".',
|
|
117
|
+
];
|
|
118
|
+
case 'vscode':
|
|
119
|
+
return [
|
|
120
|
+
'The entry has been written to .vscode/mcp.json in your project.',
|
|
121
|
+
'VS Code 1.99+ picks this up automatically — reload the window to apply.',
|
|
122
|
+
'Tip: commit .vscode/mcp.json to share the MCP setup with your team.',
|
|
123
|
+
];
|
|
124
|
+
case 'windsurf':
|
|
125
|
+
return [
|
|
126
|
+
'The entry has been merged into ~/.codeium/windsurf/mcp_config.json.',
|
|
127
|
+
'Restart Windsurf or reload the Cascade panel.',
|
|
128
|
+
];
|
|
129
|
+
case 'continue':
|
|
130
|
+
return [
|
|
131
|
+
'The entry has been written to .continue/mcpServers/mcp.json.',
|
|
132
|
+
'Restart the Continue extension or reload your IDE.',
|
|
133
|
+
];
|
|
134
|
+
case 'cline':
|
|
135
|
+
return [
|
|
136
|
+
'The entry has been merged into ~/.cline/mcp.json.',
|
|
137
|
+
'Reload the Cline extension in your editor.',
|
|
138
|
+
];
|
|
139
|
+
case 'codex':
|
|
140
|
+
return [
|
|
141
|
+
'The entry has been merged into ~/.codex/config.json.',
|
|
142
|
+
'Restart or reconnect the Codex CLI session.',
|
|
143
|
+
];
|
|
144
|
+
case 'grokbuild':
|
|
145
|
+
return [
|
|
146
|
+
'Add the JSON snippet to your Grok Build / xAI agent MCP configuration.',
|
|
147
|
+
'Restart or reconnect the agent session.',
|
|
148
|
+
];
|
|
149
|
+
default:
|
|
150
|
+
return [
|
|
151
|
+
'Copy the JSON block above.',
|
|
152
|
+
'Add it under the "mcpServers" key in your client\'s MCP configuration file.',
|
|
153
|
+
'Restart/reload the client application.',
|
|
154
|
+
];
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function buildStdioEntry(client, runConfig) {
|
|
158
|
+
const entry = {
|
|
159
|
+
command: runConfig.command,
|
|
160
|
+
args: runConfig.args,
|
|
161
|
+
};
|
|
162
|
+
// Include type field for clients that expect it
|
|
163
|
+
if (client === 'claude-code' || client === 'vscode') {
|
|
164
|
+
entry.type = 'stdio';
|
|
165
|
+
}
|
|
166
|
+
// Only include env if non-empty
|
|
167
|
+
const nonEmptyEnv = Object.fromEntries(Object.entries(runConfig.env).filter(([, v]) => v));
|
|
168
|
+
if (Object.keys(nonEmptyEnv).length > 0)
|
|
169
|
+
entry.env = nonEmptyEnv;
|
|
170
|
+
return entry;
|
|
171
|
+
}
|
|
172
|
+
function buildHttpEntry(authKey, port) {
|
|
173
|
+
return {
|
|
174
|
+
type: 'streamable-http',
|
|
175
|
+
url: `http://127.0.0.1:${port}/mcp`,
|
|
176
|
+
headers: { Authorization: `Bearer ${authKey}` },
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Build the full payload object to merge into the client config file.
|
|
181
|
+
* VS Code project-level uses 'servers' key + type field; all others use 'mcpServers'.
|
|
182
|
+
*/
|
|
183
|
+
function buildPayload(client, slug, entry, isProject) {
|
|
184
|
+
if (client === 'vscode' && isProject) {
|
|
185
|
+
return {
|
|
186
|
+
key: 'servers',
|
|
187
|
+
payload: { servers: { [slug]: entry } },
|
|
188
|
+
};
|
|
189
|
+
}
|
|
190
|
+
return {
|
|
191
|
+
key: 'mcpServers',
|
|
192
|
+
payload: { mcpServers: { [slug]: entry } },
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
async function validateClientConfigWrite(cfgPath, slug, payloadKey, expected) {
|
|
196
|
+
try {
|
|
197
|
+
const written = await fs.readJson(cfgPath);
|
|
198
|
+
const actual = written?.[payloadKey]?.[slug];
|
|
199
|
+
if (!actual || typeof actual !== 'object')
|
|
200
|
+
return { ok: false, issue: 'server entry missing after write' };
|
|
201
|
+
if (JSON.stringify(actual) !== JSON.stringify(expected))
|
|
202
|
+
return { ok: false, issue: 'server entry differs after write' };
|
|
203
|
+
return { ok: true };
|
|
204
|
+
}
|
|
205
|
+
catch (e) {
|
|
206
|
+
return { ok: false, issue: e?.message || String(e) };
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
// ── Unresolved placeholder detection ─────────────────────────────────────────
|
|
210
|
+
function hasUnresolvedPlaceholders(obj) {
|
|
211
|
+
const str = JSON.stringify(obj);
|
|
212
|
+
return /\{[a-zA-Z]\w*\}/.test(str);
|
|
213
|
+
}
|
|
214
|
+
// ── Main command ──────────────────────────────────────────────────────────────
|
|
215
|
+
export async function cmdConnect(args, json) {
|
|
216
|
+
const slug = args[1];
|
|
217
|
+
if (!slug) {
|
|
218
|
+
logger.error('Usage: hoolix connect <slug> [--client claude|claude-code|cursor|vscode|…] [--yes] [--dry-run] [--json] [--project] [--port N]');
|
|
219
|
+
process.exit(1);
|
|
220
|
+
}
|
|
221
|
+
let meta;
|
|
222
|
+
try {
|
|
223
|
+
meta = await getServerMetadata(slug);
|
|
224
|
+
}
|
|
225
|
+
catch (e) {
|
|
226
|
+
if (e instanceof ServerNotFoundError || e?.code === 'SERVER_NOT_FOUND') {
|
|
227
|
+
logger.error(`Server "${slug}" not found. Run "hoolix list" to see available servers.`);
|
|
228
|
+
}
|
|
229
|
+
else {
|
|
230
|
+
logger.error('Failed to load server metadata:', e?.message || e);
|
|
231
|
+
}
|
|
232
|
+
process.exit(1);
|
|
233
|
+
}
|
|
234
|
+
const force = args.includes('--yes') || args.includes('-y');
|
|
235
|
+
const isProject = args.includes('--project');
|
|
236
|
+
const isDryRun = args.includes('--dry-run');
|
|
237
|
+
const serverKind = meta.serverKind ?? 'docs-rag';
|
|
238
|
+
// ── Client selection ────────────────────────────────────────────────────────
|
|
239
|
+
const clientIdx = args.indexOf('--client');
|
|
240
|
+
let client = (clientIdx !== -1 ? args[clientIdx + 1] : undefined);
|
|
241
|
+
if (!client) {
|
|
242
|
+
if (force || json) {
|
|
243
|
+
client = 'generic';
|
|
244
|
+
}
|
|
245
|
+
else {
|
|
246
|
+
const detected = detectPreferredClient();
|
|
247
|
+
const options = [
|
|
248
|
+
{ value: 'claude', label: 'Claude Desktop', hint: 'Global settings' },
|
|
249
|
+
{ value: 'claude-code', label: 'Claude Code CLI (~/.claude/)', hint: 'Recommended for Claude Code users' },
|
|
250
|
+
{ value: 'cursor', label: 'Cursor', hint: 'Global or --project' },
|
|
251
|
+
{ value: 'vscode', label: 'VS Code (project .vscode/)', hint: 'Use --project' },
|
|
252
|
+
{ value: 'windsurf', label: 'Windsurf / Codeium' },
|
|
253
|
+
{ value: 'continue', label: 'Continue.dev' },
|
|
254
|
+
{ value: 'cline', label: 'Cline' },
|
|
255
|
+
{ value: 'codex', label: 'OpenAI Codex CLI' },
|
|
256
|
+
{ value: 'grokbuild', label: 'Grok Build / xAI' },
|
|
257
|
+
{ value: 'generic', label: 'Generic (print JSON only)' },
|
|
258
|
+
];
|
|
259
|
+
const sel = await select({
|
|
260
|
+
message: 'Select target MCP client (config will be auto-merged with backup)',
|
|
261
|
+
options,
|
|
262
|
+
initialValue: detected,
|
|
263
|
+
});
|
|
264
|
+
if (isCancel(sel)) {
|
|
265
|
+
cancel('Connect cancelled');
|
|
266
|
+
process.exit(0);
|
|
267
|
+
}
|
|
268
|
+
client = sel;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (!ALL_CLIENTS.includes(client))
|
|
272
|
+
client = 'generic';
|
|
273
|
+
// ── Build MCP entry based on server kind ────────────────────────────────────
|
|
274
|
+
let mcpEntry;
|
|
275
|
+
let transport;
|
|
276
|
+
if (serverKind === 'mcp-server') {
|
|
277
|
+
// If the server is running in proxy mode, use HTTP config (same as docs-rag)
|
|
278
|
+
const proxyStatus = await serverManager.getStatus(slug);
|
|
279
|
+
if (proxyStatus.running && proxyStatus.mode === 'proxy' && proxyStatus.port) {
|
|
280
|
+
transport = 'http';
|
|
281
|
+
mcpEntry = buildHttpEntry(meta.authKey, proxyStatus.port);
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
// Config-only: load credentials + interpolate into the template's run config
|
|
285
|
+
const templateId = meta.definition?.template?.id;
|
|
286
|
+
if (!templateId) {
|
|
287
|
+
logger.error(`Server "${slug}" has no template ID in its definition. Next: delete and recreate with a supported template.`);
|
|
288
|
+
process.exit(1);
|
|
289
|
+
}
|
|
290
|
+
let template = null;
|
|
291
|
+
try {
|
|
292
|
+
template = await getTemplate(templateId);
|
|
293
|
+
}
|
|
294
|
+
catch {
|
|
295
|
+
logger.error(`Template "${templateId}" not found. Next: run "hoolix templates list".`);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
if (!template.server) {
|
|
299
|
+
logger.error(`Template "${templateId}" has no server run config. Next: check template definition.`);
|
|
300
|
+
process.exit(1);
|
|
301
|
+
}
|
|
302
|
+
const credentials = await loadCredentials(slug);
|
|
303
|
+
const templateInputs = meta.definition?.template?.inputs ?? {};
|
|
304
|
+
const substitutions = { ...templateInputs, ...credentials };
|
|
305
|
+
const interpolated = interpolateRunConfig(template.server, substitutions);
|
|
306
|
+
if (hasUnresolvedPlaceholders(interpolated)) {
|
|
307
|
+
logger.warn(`Some placeholders in the run config could not be resolved. Credentials may be missing — check: hoolix info ${slug}`);
|
|
308
|
+
}
|
|
309
|
+
transport = template.server.transport ?? 'stdio';
|
|
310
|
+
mcpEntry = buildStdioEntry(client, interpolated);
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
// docs-rag: existing HTTP streamable flow
|
|
315
|
+
transport = 'http';
|
|
316
|
+
const status = await serverManager.getStatus(slug);
|
|
317
|
+
const portIdx = args.indexOf('--port');
|
|
318
|
+
const portFromArg = portIdx !== -1 ? parseInt(args[portIdx + 1] || '0', 10) || undefined : undefined;
|
|
319
|
+
let port = status.port || portFromArg;
|
|
320
|
+
if (!port) {
|
|
321
|
+
if (json) {
|
|
322
|
+
logger.error(`Server "${slug}" is not running and no --port provided.`);
|
|
323
|
+
logger.info(`Next: start it first (hoolix start ${slug}) then retry, or pass --port N.`);
|
|
324
|
+
process.exit(1);
|
|
325
|
+
}
|
|
326
|
+
const suggested = 3456 + Math.floor(Math.random() * 400);
|
|
327
|
+
if (force) {
|
|
328
|
+
port = suggested;
|
|
329
|
+
logger.warn(`Server not detected running. Using suggested port ${port} (ensure you start with matching port).`);
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
const portInput = await text({
|
|
333
|
+
message: 'Port the MCP server listens on (must match the started server)',
|
|
334
|
+
placeholder: String(suggested),
|
|
335
|
+
validate: (v) => {
|
|
336
|
+
const n = parseInt(String(v), 10);
|
|
337
|
+
return n >= 1024 && n <= 65535 ? undefined : 'Port must be 1024–65535';
|
|
338
|
+
},
|
|
339
|
+
});
|
|
340
|
+
if (isCancel(portInput)) {
|
|
341
|
+
cancel('Connect cancelled');
|
|
342
|
+
process.exit(0);
|
|
343
|
+
}
|
|
344
|
+
port = parseInt(String(portInput), 10) || suggested;
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
else if (portFromArg && status.port && portFromArg !== status.port) {
|
|
348
|
+
logger.warn(`--port ${portFromArg} ignored (server already running on :${status.port}).`);
|
|
349
|
+
}
|
|
350
|
+
mcpEntry = buildHttpEntry(meta.authKey, port);
|
|
351
|
+
}
|
|
352
|
+
// ── Build payload ───────────────────────────────────────────────────────────
|
|
353
|
+
const { key: payloadKey, payload } = buildPayload(client, slug, mcpEntry, isProject);
|
|
354
|
+
const entryStr = JSON.stringify(payload, null, 2);
|
|
355
|
+
if (json) {
|
|
356
|
+
printJson({ ...payload, transport, serverKind, client });
|
|
357
|
+
return;
|
|
358
|
+
}
|
|
359
|
+
// ── Write config file (unless --dry-run) ────────────────────────────────────
|
|
360
|
+
const cfgPath = getConfigPath(client, { projectCwd: isProject ? process.cwd() : undefined });
|
|
361
|
+
if (cfgPath && !isDryRun) {
|
|
362
|
+
let existing = {};
|
|
363
|
+
if (await fs.pathExists(cfgPath)) {
|
|
364
|
+
try {
|
|
365
|
+
existing = await fs.readJson(cfgPath);
|
|
366
|
+
}
|
|
367
|
+
catch {
|
|
368
|
+
logger.warn('Existing config was invalid JSON; backing up and starting fresh for MCP servers.');
|
|
369
|
+
existing = {};
|
|
370
|
+
}
|
|
371
|
+
const ts = new Date().toISOString().replace(/[:.]/g, '-').slice(0, 19);
|
|
372
|
+
const rand = Math.random().toString(36).slice(2, 7);
|
|
373
|
+
await fs.copy(cfgPath, `${cfgPath}.${ts}-${rand}.bak`).catch(() => { });
|
|
374
|
+
logger.info(`Backup written: ${cfgPath}.${ts}-${rand}.bak`);
|
|
375
|
+
}
|
|
376
|
+
if (!existing || typeof existing !== 'object')
|
|
377
|
+
existing = {};
|
|
378
|
+
// Merge only the MCP server entry, leaving all other settings untouched
|
|
379
|
+
if (!existing[payloadKey] || typeof existing[payloadKey] !== 'object')
|
|
380
|
+
existing[payloadKey] = {};
|
|
381
|
+
const existingSection = existing[payloadKey];
|
|
382
|
+
const newSection = payload[payloadKey];
|
|
383
|
+
existing[payloadKey] = { ...existingSection, ...newSection };
|
|
384
|
+
await fs.ensureDir(path.dirname(cfgPath));
|
|
385
|
+
await fs.writeJson(cfgPath, existing, { spaces: 2 });
|
|
386
|
+
const validation = await validateClientConfigWrite(cfgPath, slug, payloadKey, mcpEntry);
|
|
387
|
+
logger.success(`Merged "${slug}" into ${client} config.`);
|
|
388
|
+
console.log(` ${ui.muted('File:')} ${cfgPath}`);
|
|
389
|
+
if (validation.ok) {
|
|
390
|
+
console.log(` ${ui.success('✓')} Config validation passed.`);
|
|
391
|
+
}
|
|
392
|
+
else {
|
|
393
|
+
logger.warn(`Config validation failed after write: ${validation.issue}`);
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
else if (!cfgPath && !isDryRun) {
|
|
397
|
+
logger.info(`No auto-write path for "${client}". Follow the manual steps below.`);
|
|
398
|
+
}
|
|
399
|
+
else if (isDryRun) {
|
|
400
|
+
console.log(` ${ui.warning('○')} Dry run — no files written.`);
|
|
401
|
+
if (cfgPath)
|
|
402
|
+
console.log(` ${ui.muted('Would write to:')} ${cfgPath}`);
|
|
403
|
+
}
|
|
404
|
+
// ── Output ──────────────────────────────────────────────────────────────────
|
|
405
|
+
printTitle('Connect ready', `"${meta.name}" (${slug}) → ${client}`);
|
|
406
|
+
printSection(`MCP config snippet${isDryRun ? ' (dry run)' : ' (ready to paste)'}`);
|
|
407
|
+
console.log(entryStr);
|
|
408
|
+
console.log('');
|
|
409
|
+
printSection(`Next steps for ${client}`);
|
|
410
|
+
getClientSteps(client, transport).forEach((s, i) => console.log(` ${i + 1}. ${s}`));
|
|
411
|
+
if (cfgPath && !isDryRun) {
|
|
412
|
+
console.log(` ${ui.muted('Auto-merged with backup. Restart/reload the client to apply.')}`);
|
|
413
|
+
}
|
|
414
|
+
console.log('');
|
|
415
|
+
// Transport-specific tip
|
|
416
|
+
if (transport === 'stdio') {
|
|
417
|
+
printSection('How it works (stdio)');
|
|
418
|
+
console.log(` Your client reads the config and ${chalk_muted('spawns the process on demand')} — no Hoolix host needed.`);
|
|
419
|
+
if (mcpEntry.command === 'npx') {
|
|
420
|
+
const pkg = mcpEntry.args[1]?.replace(/@latest$/, '');
|
|
421
|
+
console.log(` On first use the client will run: ${ui.accent(mcpEntry.args.slice(0, 2).join(' '))} ...`);
|
|
422
|
+
if (pkg)
|
|
423
|
+
console.log(` Package: ${ui.accent(pkg)}`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
else {
|
|
427
|
+
printSection('Recommended test prompt');
|
|
428
|
+
console.log(` Use the search_documentation tool, e.g. "search_documentation for installation instructions from ${meta.name}."`);
|
|
429
|
+
console.log(` Then try read_documentation_page or get_table_of_contents.`);
|
|
430
|
+
}
|
|
431
|
+
console.log('');
|
|
432
|
+
const copied = copyToClipboard(entryStr);
|
|
433
|
+
if (copied) {
|
|
434
|
+
console.log(` ${ui.success('✓')} Snippet copied to clipboard.`);
|
|
435
|
+
}
|
|
436
|
+
else {
|
|
437
|
+
console.log(` ${ui.muted('(Clipboard not available — copy the JSON block manually.)')}`);
|
|
438
|
+
}
|
|
439
|
+
console.log('');
|
|
440
|
+
printSection('Other options');
|
|
441
|
+
if (serverKind === 'mcp-server') {
|
|
442
|
+
printCommand(`hoolix connect ${slug} --client claude-code --yes`);
|
|
443
|
+
printCommand(`hoolix connect ${slug} --client cursor --yes`);
|
|
444
|
+
printCommand(`hoolix connect ${slug} --client vscode --project`);
|
|
445
|
+
printCommand(`hoolix connect ${slug} --dry-run`);
|
|
446
|
+
printCommand(`hoolix connect ${slug} --json`);
|
|
447
|
+
}
|
|
448
|
+
else {
|
|
449
|
+
printCommand(`hoolix connect ${slug} --client claude --yes`);
|
|
450
|
+
printCommand(`hoolix connect ${slug} --client cursor --project`);
|
|
451
|
+
printCommand(`hoolix connect ${slug} --dry-run`);
|
|
452
|
+
printCommand(`hoolix connect ${slug} --json`);
|
|
453
|
+
}
|
|
454
|
+
if (!isDryRun) {
|
|
455
|
+
console.log(` ${ui.muted('Tip:')} hoolix client status (see which clients have this server wired in)`);
|
|
456
|
+
console.log('');
|
|
457
|
+
}
|
|
458
|
+
}
|
|
459
|
+
// chalk.dim re-export for inline use without import
|
|
460
|
+
function chalk_muted(s) {
|
|
461
|
+
return `\x1b[2m${s}\x1b[0m`;
|
|
462
|
+
}
|
|
463
|
+
//# sourceMappingURL=connect.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/commands/connect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create.d.ts","sourceRoot":"","sources":["../../src/commands/create.ts"],"names":[],"mappings":"AA6KA,wBAAsB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA8N5E"}
|