@phuetz/code-buddy 0.1.18 → 0.1.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/dist/agent/background-tasks.d.ts +49 -0
- package/dist/agent/background-tasks.js +153 -0
- package/dist/agent/background-tasks.js.map +1 -0
- package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
- package/dist/agent/definitions/agent-definition-loader.js +161 -0
- package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
- package/dist/agent/definitions/index.d.ts +1 -0
- package/dist/agent/definitions/index.js +2 -0
- package/dist/agent/definitions/index.js.map +1 -0
- package/dist/agent/extended-thinking.d.ts +64 -0
- package/dist/agent/extended-thinking.js +103 -0
- package/dist/agent/extended-thinking.js.map +1 -0
- package/dist/agent/prompt-suggestions.d.ts +55 -0
- package/dist/agent/prompt-suggestions.js +125 -0
- package/dist/agent/prompt-suggestions.js.map +1 -0
- package/dist/agent/rewind-manager.d.ts +59 -0
- package/dist/agent/rewind-manager.js +124 -0
- package/dist/agent/rewind-manager.js.map +1 -0
- package/dist/agent/teams/agent-team.d.ts +54 -0
- package/dist/agent/teams/agent-team.js +114 -0
- package/dist/agent/teams/agent-team.js.map +1 -0
- package/dist/agent/teams/index.d.ts +1 -0
- package/dist/agent/teams/index.js +2 -0
- package/dist/agent/teams/index.js.map +1 -0
- package/dist/agent/teams/team-v2.d.ts +166 -0
- package/dist/agent/teams/team-v2.js +376 -0
- package/dist/agent/teams/team-v2.js.map +1 -0
- package/dist/channels/imessage/index.d.ts +40 -0
- package/dist/channels/imessage/index.js +69 -0
- package/dist/channels/imessage/index.js.map +1 -0
- package/dist/channels/line/index.d.ts +36 -0
- package/dist/channels/line/index.js +71 -0
- package/dist/channels/line/index.js.map +1 -0
- package/dist/channels/mattermost/index.d.ts +34 -0
- package/dist/channels/mattermost/index.js +56 -0
- package/dist/channels/mattermost/index.js.map +1 -0
- package/dist/channels/nextcloud-talk/index.d.ts +37 -0
- package/dist/channels/nextcloud-talk/index.js +67 -0
- package/dist/channels/nextcloud-talk/index.js.map +1 -0
- package/dist/channels/niche-channels.d.ts +61 -0
- package/dist/channels/niche-channels.js +131 -0
- package/dist/channels/niche-channels.js.map +1 -0
- package/dist/channels/nostr/index.d.ts +30 -0
- package/dist/channels/nostr/index.js +68 -0
- package/dist/channels/nostr/index.js.map +1 -0
- package/dist/channels/twilio-voice/index.d.ts +37 -0
- package/dist/channels/twilio-voice/index.js +76 -0
- package/dist/channels/twilio-voice/index.js.map +1 -0
- package/dist/channels/whatsapp/index.js +0 -1
- package/dist/channels/whatsapp/index.js.map +1 -1
- package/dist/channels/zalo/index.d.ts +28 -0
- package/dist/channels/zalo/index.js +53 -0
- package/dist/channels/zalo/index.js.map +1 -0
- package/dist/cloud/cloud-sessions.d.ts +56 -0
- package/dist/cloud/cloud-sessions.js +187 -0
- package/dist/cloud/cloud-sessions.js.map +1 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
- package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
- package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
- package/dist/codebuddy/tool-definitions/index.js +1 -1
- package/dist/codebuddy/tool-definitions/index.js.map +1 -1
- package/dist/commands/handlers/auth-handler.d.ts +32 -0
- package/dist/commands/handlers/auth-handler.js +137 -0
- package/dist/commands/handlers/auth-handler.js.map +1 -0
- package/dist/commands/handlers/context-handler.d.ts +46 -0
- package/dist/commands/handlers/context-handler.js +102 -0
- package/dist/commands/handlers/context-handler.js.map +1 -0
- package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
- package/dist/commands/handlers/keybindings-handler.js +124 -0
- package/dist/commands/handlers/keybindings-handler.js.map +1 -0
- package/dist/commands/handlers/session-commands.d.ts +17 -0
- package/dist/commands/handlers/session-commands.js +119 -0
- package/dist/commands/handlers/session-commands.js.map +1 -0
- package/dist/commands/slash/builtin-commands.js +1 -1
- package/dist/commands/slash/builtin-commands.js.map +1 -1
- package/dist/config/admin-config.d.ts +54 -0
- package/dist/config/admin-config.js +144 -0
- package/dist/config/admin-config.js.map +1 -0
- package/dist/config/advanced-config.d.ts +118 -0
- package/dist/config/advanced-config.js +364 -0
- package/dist/config/advanced-config.js.map +1 -0
- package/dist/config/managed-policies.d.ts +50 -0
- package/dist/config/managed-policies.js +120 -0
- package/dist/config/managed-policies.js.map +1 -0
- package/dist/config/settings-hierarchy.d.ts +59 -0
- package/dist/config/settings-hierarchy.js +188 -0
- package/dist/config/settings-hierarchy.js.map +1 -0
- package/dist/config/tool-profiles.d.ts +37 -0
- package/dist/config/tool-profiles.js +150 -0
- package/dist/config/tool-profiles.js.map +1 -0
- package/dist/config/user-settings.d.ts +31 -0
- package/dist/config/user-settings.js +66 -0
- package/dist/config/user-settings.js.map +1 -0
- package/dist/context/context-files.d.ts +1 -1
- package/dist/context/context-files.js +2 -2
- package/dist/context/context-files.js.map +1 -1
- package/dist/context/partial-summarizer.d.ts +32 -0
- package/dist/context/partial-summarizer.js +144 -0
- package/dist/context/partial-summarizer.js.map +1 -0
- package/dist/desktop/desktop-app.d.ts +44 -0
- package/dist/desktop/desktop-app.js +136 -0
- package/dist/desktop/desktop-app.js.map +1 -0
- package/dist/git/worktree-sessions.d.ts +24 -0
- package/dist/git/worktree-sessions.js +93 -0
- package/dist/git/worktree-sessions.js.map +1 -0
- package/dist/hooks/advanced-hooks.d.ts +110 -0
- package/dist/hooks/advanced-hooks.js +256 -0
- package/dist/hooks/advanced-hooks.js.map +1 -0
- package/dist/hooks/async-hooks.d.ts +73 -0
- package/dist/hooks/async-hooks.js +213 -0
- package/dist/hooks/async-hooks.js.map +1 -0
- package/dist/hooks/env-persistence.d.ts +58 -0
- package/dist/hooks/env-persistence.js +195 -0
- package/dist/hooks/env-persistence.js.map +1 -0
- package/dist/hooks/hook-events.d.ts +36 -0
- package/dist/hooks/hook-events.js +55 -0
- package/dist/hooks/hook-events.js.map +1 -0
- package/dist/hooks/smart-hooks.d.ts +85 -0
- package/dist/hooks/smart-hooks.js +199 -0
- package/dist/hooks/smart-hooks.js.map +1 -0
- package/dist/ide/jetbrains-plugin.d.ts +55 -0
- package/dist/ide/jetbrains-plugin.js +156 -0
- package/dist/ide/jetbrains-plugin.js.map +1 -0
- package/dist/ide/vscode-extension.d.ts +94 -0
- package/dist/ide/vscode-extension.js +229 -0
- package/dist/ide/vscode-extension.js.map +1 -0
- package/dist/index.js +77 -3
- package/dist/index.js.map +1 -1
- package/dist/input/file-autocomplete.d.ts +42 -0
- package/dist/input/file-autocomplete.js +154 -0
- package/dist/input/file-autocomplete.js.map +1 -0
- package/dist/integrations/chrome-bridge.d.ts +90 -0
- package/dist/integrations/chrome-bridge.js +151 -0
- package/dist/integrations/chrome-bridge.js.map +1 -0
- package/dist/integrations/github-action-runner.d.ts +40 -0
- package/dist/integrations/github-action-runner.js +163 -0
- package/dist/integrations/github-action-runner.js.map +1 -0
- package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
- package/dist/integrations/gitlab-ci-runner.js +104 -0
- package/dist/integrations/gitlab-ci-runner.js.map +1 -0
- package/dist/integrations/pr-session-linker.d.ts +44 -0
- package/dist/integrations/pr-session-linker.js +103 -0
- package/dist/integrations/pr-session-linker.js.map +1 -0
- package/dist/integrations/tailscale.d.ts +36 -0
- package/dist/integrations/tailscale.js +101 -0
- package/dist/integrations/tailscale.js.map +1 -0
- package/dist/lsp/lsp-client.d.ts +68 -0
- package/dist/lsp/lsp-client.js +182 -0
- package/dist/lsp/lsp-client.js.map +1 -0
- package/dist/mcp/connectors.d.ts +28 -0
- package/dist/mcp/connectors.js +148 -0
- package/dist/mcp/connectors.js.map +1 -0
- package/dist/mcp/index.d.ts +7 -4
- package/dist/mcp/index.js +7 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
- package/dist/mcp/mcp-auto-discovery.js +104 -0
- package/dist/mcp/mcp-auto-discovery.js.map +1 -0
- package/dist/mcp/mcp-server.d.ts +70 -0
- package/dist/mcp/mcp-server.js +374 -0
- package/dist/mcp/mcp-server.js.map +1 -0
- package/dist/memory/auto-memory.d.ts +53 -0
- package/dist/memory/auto-memory.js +250 -0
- package/dist/memory/auto-memory.js.map +1 -0
- package/dist/memory/hybrid-search.d.ts +51 -0
- package/dist/memory/hybrid-search.js +199 -0
- package/dist/memory/hybrid-search.js.map +1 -0
- package/dist/memory/memory-flush.d.ts +51 -0
- package/dist/memory/memory-flush.js +102 -0
- package/dist/memory/memory-flush.js.map +1 -0
- package/dist/memory/subagent-memory.d.ts +73 -0
- package/dist/memory/subagent-memory.js +172 -0
- package/dist/memory/subagent-memory.js.map +1 -0
- package/dist/nodes/device-node.d.ts +40 -0
- package/dist/nodes/device-node.js +117 -0
- package/dist/nodes/device-node.js.map +1 -0
- package/dist/output/json-schema-output.d.ts +67 -0
- package/dist/output/json-schema-output.js +273 -0
- package/dist/output/json-schema-output.js.map +1 -0
- package/dist/persistence/session-picker.d.ts +22 -0
- package/dist/persistence/session-picker.js +47 -0
- package/dist/persistence/session-picker.js.map +1 -0
- package/dist/persistence/session-store.d.ts +11 -0
- package/dist/persistence/session-store.js +17 -0
- package/dist/persistence/session-store.js.map +1 -1
- package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
- package/dist/plugins/git-pinned-marketplace.js +152 -0
- package/dist/plugins/git-pinned-marketplace.js.map +1 -0
- package/dist/plugins/plugin-manifest.d.ts +116 -0
- package/dist/plugins/plugin-manifest.js +283 -0
- package/dist/plugins/plugin-manifest.js.map +1 -0
- package/dist/sandbox/os-sandbox.d.ts +49 -1
- package/dist/sandbox/os-sandbox.js +347 -6
- package/dist/sandbox/os-sandbox.js.map +1 -1
- package/dist/sdk/agent-sdk.d.ts +61 -0
- package/dist/sdk/agent-sdk.js +90 -0
- package/dist/sdk/agent-sdk.js.map +1 -0
- package/dist/security/permission-modes.d.ts +76 -0
- package/dist/security/permission-modes.js +195 -0
- package/dist/security/permission-modes.js.map +1 -0
- package/dist/security/permission-patterns.d.ts +61 -0
- package/dist/security/permission-patterns.js +171 -0
- package/dist/security/permission-patterns.js.map +1 -0
- package/dist/security/safe-binaries.d.ts +23 -0
- package/dist/security/safe-binaries.js +96 -0
- package/dist/security/safe-binaries.js.map +1 -0
- package/dist/security/sender-policies.d.ts +46 -0
- package/dist/security/sender-policies.js +90 -0
- package/dist/security/sender-policies.js.map +1 -0
- package/dist/server/dashboard.d.ts +53 -0
- package/dist/server/dashboard.js +93 -0
- package/dist/server/dashboard.js.map +1 -0
- package/dist/services/system-prompt-override.d.ts +34 -0
- package/dist/services/system-prompt-override.js +64 -0
- package/dist/services/system-prompt-override.js.map +1 -0
- package/dist/skills/skill-enhancements.d.ts +37 -0
- package/dist/skills/skill-enhancements.js +69 -0
- package/dist/skills/skill-enhancements.js.map +1 -0
- package/dist/telemetry/otel-tracer.d.ts +98 -0
- package/dist/telemetry/otel-tracer.js +245 -0
- package/dist/telemetry/otel-tracer.js.map +1 -0
- package/dist/tools/browser-stub.d.ts +61 -0
- package/dist/tools/browser-stub.js +184 -0
- package/dist/tools/browser-stub.js.map +1 -0
- package/dist/tools/gateway-tool.d.ts +43 -0
- package/dist/tools/gateway-tool.js +92 -0
- package/dist/tools/gateway-tool.js.map +1 -0
- package/dist/tools/image-stub.d.ts +32 -0
- package/dist/tools/image-stub.js +97 -0
- package/dist/tools/image-stub.js.map +1 -0
- package/dist/tools/js-repl.d.ts +78 -0
- package/dist/tools/js-repl.js +280 -0
- package/dist/tools/js-repl.js.map +1 -0
- package/dist/tools/message-tool.d.ts +42 -0
- package/dist/tools/message-tool.js +113 -0
- package/dist/tools/message-tool.js.map +1 -0
- package/dist/ui/cli-enhancements.d.ts +178 -0
- package/dist/ui/cli-enhancements.js +430 -0
- package/dist/ui/cli-enhancements.js.map +1 -0
- package/dist/ui/status-line.d.ts +90 -0
- package/dist/ui/status-line.js +160 -0
- package/dist/ui/status-line.js.map +1 -0
- package/dist/ui/terminal-enhancements.d.ts +34 -0
- package/dist/ui/terminal-enhancements.js +97 -0
- package/dist/ui/terminal-enhancements.js.map +1 -0
- package/dist/ui/ui-enhancements.d.ts +38 -0
- package/dist/ui/ui-enhancements.js +116 -0
- package/dist/ui/ui-enhancements.js.map +1 -0
- package/dist/utils/custom-instructions.js +4 -1
- package/dist/utils/custom-instructions.js.map +1 -1
- package/dist/utils/init-project.d.ts +1 -1
- package/dist/utils/init-project.js +20 -20
- package/dist/utils/init-project.js.map +1 -1
- package/dist/utils/output-schema-validator.d.ts +40 -0
- package/dist/utils/output-schema-validator.js +137 -0
- package/dist/utils/output-schema-validator.js.map +1 -0
- package/dist/utils/safety-misc.d.ts +24 -0
- package/dist/utils/safety-misc.js +91 -0
- package/dist/utils/safety-misc.js.map +1 -0
- package/dist/utils/session-enhancements.d.ts +40 -0
- package/dist/utils/session-enhancements.js +118 -0
- package/dist/utils/session-enhancements.js.map +1 -0
- package/dist/utils/shell-snapshot.d.ts +38 -0
- package/dist/utils/shell-snapshot.js +323 -0
- package/dist/utils/shell-snapshot.js.map +1 -0
- package/dist/utils/stream-json-formatter.d.ts +77 -0
- package/dist/utils/stream-json-formatter.js +61 -0
- package/dist/utils/stream-json-formatter.js.map +1 -0
- package/dist/workflows/lobster-engine.d.ts +43 -0
- package/dist/workflows/lobster-engine.js +167 -0
- package/dist/workflows/lobster-engine.js.map +1 -0
- package/package.json +3 -6
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Client - Language Server Protocol integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a client that can connect to LSP servers for various languages,
|
|
5
|
+
* enabling go-to-definition, find-references, hover, symbols, and diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
export type LSPOperation = 'goToDefinition' | 'findReferences' | 'hover' | 'documentSymbol' | 'getDiagnostics';
|
|
8
|
+
export type LSPLanguage = 'python' | 'typescript' | 'javascript' | 'go' | 'rust' | 'java' | 'c' | 'cpp' | 'csharp' | 'php' | 'kotlin' | 'ruby' | 'html' | 'css';
|
|
9
|
+
export interface LSPServerConfig {
|
|
10
|
+
language: LSPLanguage;
|
|
11
|
+
command: string;
|
|
12
|
+
args: string[];
|
|
13
|
+
initOptions?: Record<string, unknown>;
|
|
14
|
+
}
|
|
15
|
+
export interface LSPLocation {
|
|
16
|
+
file: string;
|
|
17
|
+
line: number;
|
|
18
|
+
column: number;
|
|
19
|
+
endLine?: number;
|
|
20
|
+
endColumn?: number;
|
|
21
|
+
}
|
|
22
|
+
export interface LSPSymbol {
|
|
23
|
+
name: string;
|
|
24
|
+
kind: string;
|
|
25
|
+
location: LSPLocation;
|
|
26
|
+
children?: LSPSymbol[];
|
|
27
|
+
}
|
|
28
|
+
export interface LSPDiagnostic {
|
|
29
|
+
file: string;
|
|
30
|
+
line: number;
|
|
31
|
+
column: number;
|
|
32
|
+
severity: 'error' | 'warning' | 'info' | 'hint';
|
|
33
|
+
message: string;
|
|
34
|
+
source?: string;
|
|
35
|
+
}
|
|
36
|
+
export interface LSPHoverInfo {
|
|
37
|
+
content: string;
|
|
38
|
+
language?: string;
|
|
39
|
+
range?: LSPLocation;
|
|
40
|
+
}
|
|
41
|
+
export declare class LSPClient {
|
|
42
|
+
private servers;
|
|
43
|
+
private activeServers;
|
|
44
|
+
private configPath;
|
|
45
|
+
private stats;
|
|
46
|
+
constructor(configPath?: string);
|
|
47
|
+
registerServer(config: LSPServerConfig): void;
|
|
48
|
+
getRegisteredLanguages(): LSPLanguage[];
|
|
49
|
+
isLanguageSupported(lang: LSPLanguage): boolean;
|
|
50
|
+
static getDefaultConfig(language: LSPLanguage): LSPServerConfig | null;
|
|
51
|
+
static getSupportedLanguages(): LSPLanguage[];
|
|
52
|
+
goToDefinition(file: string, line: number, column: number): Promise<LSPLocation[]>;
|
|
53
|
+
findReferences(file: string, line: number, column: number): Promise<LSPLocation[]>;
|
|
54
|
+
hover(file: string, line: number, column: number): Promise<LSPHoverInfo | null>;
|
|
55
|
+
getDocumentSymbols(file: string): Promise<LSPSymbol[]>;
|
|
56
|
+
getDiagnostics(file: string): Promise<LSPDiagnostic[]>;
|
|
57
|
+
detectLanguage(filePath: string): LSPLanguage | null;
|
|
58
|
+
startServer(language: LSPLanguage): Promise<boolean>;
|
|
59
|
+
stopServer(language: LSPLanguage): Promise<void>;
|
|
60
|
+
stopAll(): Promise<void>;
|
|
61
|
+
getActiveServerCount(): number;
|
|
62
|
+
getStats(): {
|
|
63
|
+
queriesExecuted: number;
|
|
64
|
+
avgResponseMs: number;
|
|
65
|
+
cacheHits: number;
|
|
66
|
+
};
|
|
67
|
+
private recordQuery;
|
|
68
|
+
}
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LSP Client - Language Server Protocol integration
|
|
3
|
+
*
|
|
4
|
+
* Provides a client that can connect to LSP servers for various languages,
|
|
5
|
+
* enabling go-to-definition, find-references, hover, symbols, and diagnostics.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
import * as path from 'path';
|
|
9
|
+
const EXTENSION_MAP = {
|
|
10
|
+
'.py': 'python',
|
|
11
|
+
'.ts': 'typescript',
|
|
12
|
+
'.tsx': 'typescript',
|
|
13
|
+
'.js': 'javascript',
|
|
14
|
+
'.jsx': 'javascript',
|
|
15
|
+
'.go': 'go',
|
|
16
|
+
'.rs': 'rust',
|
|
17
|
+
'.java': 'java',
|
|
18
|
+
'.c': 'c',
|
|
19
|
+
'.h': 'c',
|
|
20
|
+
'.cpp': 'cpp',
|
|
21
|
+
'.cc': 'cpp',
|
|
22
|
+
'.cxx': 'cpp',
|
|
23
|
+
'.hpp': 'cpp',
|
|
24
|
+
'.cs': 'csharp',
|
|
25
|
+
'.php': 'php',
|
|
26
|
+
'.kt': 'kotlin',
|
|
27
|
+
'.kts': 'kotlin',
|
|
28
|
+
'.rb': 'ruby',
|
|
29
|
+
'.html': 'html',
|
|
30
|
+
'.htm': 'html',
|
|
31
|
+
'.css': 'css',
|
|
32
|
+
'.scss': 'css',
|
|
33
|
+
'.less': 'css',
|
|
34
|
+
};
|
|
35
|
+
const DEFAULT_CONFIGS = {
|
|
36
|
+
typescript: { language: 'typescript', command: 'typescript-language-server', args: ['--stdio'] },
|
|
37
|
+
javascript: { language: 'javascript', command: 'typescript-language-server', args: ['--stdio'] },
|
|
38
|
+
python: { language: 'python', command: 'pylsp', args: [] },
|
|
39
|
+
go: { language: 'go', command: 'gopls', args: ['serve'] },
|
|
40
|
+
rust: { language: 'rust', command: 'rust-analyzer', args: [] },
|
|
41
|
+
java: { language: 'java', command: 'jdtls', args: [] },
|
|
42
|
+
c: { language: 'c', command: 'clangd', args: [] },
|
|
43
|
+
cpp: { language: 'cpp', command: 'clangd', args: [] },
|
|
44
|
+
csharp: { language: 'csharp', command: 'omnisharp', args: ['-lsp'] },
|
|
45
|
+
php: { language: 'php', command: 'phpactor', args: ['language-server'] },
|
|
46
|
+
html: { language: 'html', command: 'vscode-html-language-server', args: ['--stdio'] },
|
|
47
|
+
css: { language: 'css', command: 'vscode-css-language-server', args: ['--stdio'] },
|
|
48
|
+
ruby: { language: 'ruby', command: 'solargraph', args: ['stdio'] },
|
|
49
|
+
kotlin: { language: 'kotlin', command: 'kotlin-language-server', args: [] },
|
|
50
|
+
};
|
|
51
|
+
export class LSPClient {
|
|
52
|
+
servers;
|
|
53
|
+
activeServers;
|
|
54
|
+
configPath;
|
|
55
|
+
stats;
|
|
56
|
+
constructor(configPath) {
|
|
57
|
+
this.servers = new Map();
|
|
58
|
+
this.activeServers = new Map();
|
|
59
|
+
this.configPath = configPath || '.codebuddy/lsp-config.json';
|
|
60
|
+
this.stats = { queriesExecuted: 0, totalResponseMs: 0, cacheHits: 0 };
|
|
61
|
+
logger.debug('LSPClient initialized', { configPath: this.configPath });
|
|
62
|
+
}
|
|
63
|
+
registerServer(config) {
|
|
64
|
+
if (!config.language || !config.command) {
|
|
65
|
+
throw new Error('Language and command are required for LSP server config');
|
|
66
|
+
}
|
|
67
|
+
this.servers.set(config.language, { ...config });
|
|
68
|
+
logger.info('LSP server registered', { language: config.language, command: config.command });
|
|
69
|
+
}
|
|
70
|
+
getRegisteredLanguages() {
|
|
71
|
+
return Array.from(this.servers.keys());
|
|
72
|
+
}
|
|
73
|
+
isLanguageSupported(lang) {
|
|
74
|
+
return this.servers.has(lang);
|
|
75
|
+
}
|
|
76
|
+
static getDefaultConfig(language) {
|
|
77
|
+
const config = DEFAULT_CONFIGS[language];
|
|
78
|
+
return config ? { ...config } : null;
|
|
79
|
+
}
|
|
80
|
+
static getSupportedLanguages() {
|
|
81
|
+
return Object.keys(DEFAULT_CONFIGS);
|
|
82
|
+
}
|
|
83
|
+
async goToDefinition(file, line, column) {
|
|
84
|
+
const lang = this.detectLanguage(file);
|
|
85
|
+
if (!lang || !this.servers.has(lang)) {
|
|
86
|
+
logger.warn('No LSP server for language', { file, lang });
|
|
87
|
+
return [];
|
|
88
|
+
}
|
|
89
|
+
this.recordQuery();
|
|
90
|
+
logger.debug('goToDefinition', { file, line, column });
|
|
91
|
+
// In a real implementation, this would communicate with the LSP server
|
|
92
|
+
return [];
|
|
93
|
+
}
|
|
94
|
+
async findReferences(file, line, column) {
|
|
95
|
+
const lang = this.detectLanguage(file);
|
|
96
|
+
if (!lang || !this.servers.has(lang)) {
|
|
97
|
+
logger.warn('No LSP server for language', { file, lang });
|
|
98
|
+
return [];
|
|
99
|
+
}
|
|
100
|
+
this.recordQuery();
|
|
101
|
+
logger.debug('findReferences', { file, line, column });
|
|
102
|
+
return [];
|
|
103
|
+
}
|
|
104
|
+
async hover(file, line, column) {
|
|
105
|
+
const lang = this.detectLanguage(file);
|
|
106
|
+
if (!lang || !this.servers.has(lang)) {
|
|
107
|
+
return null;
|
|
108
|
+
}
|
|
109
|
+
this.recordQuery();
|
|
110
|
+
logger.debug('hover', { file, line, column });
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
async getDocumentSymbols(file) {
|
|
114
|
+
const lang = this.detectLanguage(file);
|
|
115
|
+
if (!lang || !this.servers.has(lang)) {
|
|
116
|
+
return [];
|
|
117
|
+
}
|
|
118
|
+
this.recordQuery();
|
|
119
|
+
logger.debug('getDocumentSymbols', { file });
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
async getDiagnostics(file) {
|
|
123
|
+
const lang = this.detectLanguage(file);
|
|
124
|
+
if (!lang || !this.servers.has(lang)) {
|
|
125
|
+
return [];
|
|
126
|
+
}
|
|
127
|
+
this.recordQuery();
|
|
128
|
+
logger.debug('getDiagnostics', { file });
|
|
129
|
+
return [];
|
|
130
|
+
}
|
|
131
|
+
detectLanguage(filePath) {
|
|
132
|
+
const ext = path.extname(filePath).toLowerCase();
|
|
133
|
+
return EXTENSION_MAP[ext] || null;
|
|
134
|
+
}
|
|
135
|
+
async startServer(language) {
|
|
136
|
+
if (!this.servers.has(language)) {
|
|
137
|
+
logger.warn('Cannot start server: not registered', { language });
|
|
138
|
+
return false;
|
|
139
|
+
}
|
|
140
|
+
if (this.activeServers.has(language)) {
|
|
141
|
+
logger.debug('Server already running', { language });
|
|
142
|
+
return true;
|
|
143
|
+
}
|
|
144
|
+
const config = this.servers.get(language);
|
|
145
|
+
logger.info('Starting LSP server', { language, command: config.command });
|
|
146
|
+
// In production, this would spawn the process
|
|
147
|
+
this.activeServers.set(language, { process: null, initialized: true });
|
|
148
|
+
return true;
|
|
149
|
+
}
|
|
150
|
+
async stopServer(language) {
|
|
151
|
+
if (!this.activeServers.has(language)) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
logger.info('Stopping LSP server', { language });
|
|
155
|
+
this.activeServers.delete(language);
|
|
156
|
+
}
|
|
157
|
+
async stopAll() {
|
|
158
|
+
const languages = Array.from(this.activeServers.keys());
|
|
159
|
+
for (const lang of languages) {
|
|
160
|
+
await this.stopServer(lang);
|
|
161
|
+
}
|
|
162
|
+
logger.info('All LSP servers stopped');
|
|
163
|
+
}
|
|
164
|
+
getActiveServerCount() {
|
|
165
|
+
return this.activeServers.size;
|
|
166
|
+
}
|
|
167
|
+
getStats() {
|
|
168
|
+
return {
|
|
169
|
+
queriesExecuted: this.stats.queriesExecuted,
|
|
170
|
+
avgResponseMs: this.stats.queriesExecuted > 0
|
|
171
|
+
? this.stats.totalResponseMs / this.stats.queriesExecuted
|
|
172
|
+
: 0,
|
|
173
|
+
cacheHits: this.stats.cacheHits,
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
recordQuery() {
|
|
177
|
+
this.stats.queriesExecuted++;
|
|
178
|
+
// Simulated response time
|
|
179
|
+
this.stats.totalResponseMs += Math.random() * 50 + 5;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
//# sourceMappingURL=lsp-client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lsp-client.js","sourceRoot":"","sources":["../../src/lsp/lsp-client.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured MCP Connectors
|
|
3
|
+
*
|
|
4
|
+
* Registry of pre-configured MCP server connectors for popular
|
|
5
|
+
* services, with environment variable checks and setup instructions.
|
|
6
|
+
*/
|
|
7
|
+
export interface ConnectorConfig {
|
|
8
|
+
name: string;
|
|
9
|
+
type: string;
|
|
10
|
+
description: string;
|
|
11
|
+
mcpServerConfig: Record<string, unknown>;
|
|
12
|
+
requiredEnvVars: string[];
|
|
13
|
+
setupInstructions: string;
|
|
14
|
+
}
|
|
15
|
+
export declare class ConnectorRegistry {
|
|
16
|
+
private connectors;
|
|
17
|
+
constructor();
|
|
18
|
+
static getInstance(): ConnectorRegistry;
|
|
19
|
+
static resetInstance(): void;
|
|
20
|
+
getAvailableConnectors(): ConnectorConfig[];
|
|
21
|
+
getConnector(name: string): ConnectorConfig | undefined;
|
|
22
|
+
isConfigured(name: string): boolean;
|
|
23
|
+
getSetupInstructions(name: string): string | undefined;
|
|
24
|
+
listConfigured(): ConnectorConfig[];
|
|
25
|
+
listUnconfigured(): ConnectorConfig[];
|
|
26
|
+
}
|
|
27
|
+
export declare function getConnectorRegistry(): ConnectorRegistry;
|
|
28
|
+
export declare function resetConnectorRegistry(): void;
|
|
@@ -0,0 +1,148 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pre-configured MCP Connectors
|
|
3
|
+
*
|
|
4
|
+
* Registry of pre-configured MCP server connectors for popular
|
|
5
|
+
* services, with environment variable checks and setup instructions.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// Pre-configured Connectors
|
|
10
|
+
// ============================================================================
|
|
11
|
+
const CONNECTORS = [
|
|
12
|
+
{
|
|
13
|
+
name: 'google-calendar',
|
|
14
|
+
type: 'calendar',
|
|
15
|
+
description: 'Google Calendar integration for event management',
|
|
16
|
+
mcpServerConfig: {
|
|
17
|
+
command: 'npx',
|
|
18
|
+
args: ['@anthropic/mcp-google-calendar'],
|
|
19
|
+
},
|
|
20
|
+
requiredEnvVars: ['GOOGLE_CALENDAR_CLIENT_ID', 'GOOGLE_CALENDAR_CLIENT_SECRET'],
|
|
21
|
+
setupInstructions: '1. Create a Google Cloud project\n' +
|
|
22
|
+
'2. Enable Calendar API\n' +
|
|
23
|
+
'3. Create OAuth2 credentials\n' +
|
|
24
|
+
'4. Set GOOGLE_CALENDAR_CLIENT_ID and GOOGLE_CALENDAR_CLIENT_SECRET',
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
name: 'linear',
|
|
28
|
+
type: 'project-management',
|
|
29
|
+
description: 'Linear issue tracker integration',
|
|
30
|
+
mcpServerConfig: {
|
|
31
|
+
command: 'npx',
|
|
32
|
+
args: ['@anthropic/mcp-linear'],
|
|
33
|
+
},
|
|
34
|
+
requiredEnvVars: ['LINEAR_API_KEY'],
|
|
35
|
+
setupInstructions: '1. Go to Linear Settings > API\n' +
|
|
36
|
+
'2. Create a personal API key\n' +
|
|
37
|
+
'3. Set LINEAR_API_KEY environment variable',
|
|
38
|
+
},
|
|
39
|
+
{
|
|
40
|
+
name: 'notion',
|
|
41
|
+
type: 'knowledge-base',
|
|
42
|
+
description: 'Notion workspace integration for docs and databases',
|
|
43
|
+
mcpServerConfig: {
|
|
44
|
+
command: 'npx',
|
|
45
|
+
args: ['@anthropic/mcp-notion'],
|
|
46
|
+
},
|
|
47
|
+
requiredEnvVars: ['NOTION_API_KEY'],
|
|
48
|
+
setupInstructions: '1. Go to notion.so/my-integrations\n' +
|
|
49
|
+
'2. Create a new integration\n' +
|
|
50
|
+
'3. Copy the Internal Integration Token\n' +
|
|
51
|
+
'4. Set NOTION_API_KEY environment variable',
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
name: 'asana',
|
|
55
|
+
type: 'project-management',
|
|
56
|
+
description: 'Asana task and project management integration',
|
|
57
|
+
mcpServerConfig: {
|
|
58
|
+
command: 'npx',
|
|
59
|
+
args: ['@anthropic/mcp-asana'],
|
|
60
|
+
},
|
|
61
|
+
requiredEnvVars: ['ASANA_ACCESS_TOKEN'],
|
|
62
|
+
setupInstructions: '1. Go to Asana Developer Console\n' +
|
|
63
|
+
'2. Create a Personal Access Token\n' +
|
|
64
|
+
'3. Set ASANA_ACCESS_TOKEN environment variable',
|
|
65
|
+
},
|
|
66
|
+
{
|
|
67
|
+
name: 'github',
|
|
68
|
+
type: 'version-control',
|
|
69
|
+
description: 'GitHub repository and issue management',
|
|
70
|
+
mcpServerConfig: {
|
|
71
|
+
command: 'npx',
|
|
72
|
+
args: ['@anthropic/mcp-github'],
|
|
73
|
+
},
|
|
74
|
+
requiredEnvVars: ['GITHUB_TOKEN'],
|
|
75
|
+
setupInstructions: '1. Go to GitHub Settings > Developer settings > Personal access tokens\n' +
|
|
76
|
+
'2. Generate a new token with repo scope\n' +
|
|
77
|
+
'3. Set GITHUB_TOKEN environment variable',
|
|
78
|
+
},
|
|
79
|
+
{
|
|
80
|
+
name: 'slack',
|
|
81
|
+
type: 'communication',
|
|
82
|
+
description: 'Slack workspace messaging integration',
|
|
83
|
+
mcpServerConfig: {
|
|
84
|
+
command: 'npx',
|
|
85
|
+
args: ['@anthropic/mcp-slack'],
|
|
86
|
+
},
|
|
87
|
+
requiredEnvVars: ['SLACK_BOT_TOKEN'],
|
|
88
|
+
setupInstructions: '1. Create a Slack App at api.slack.com/apps\n' +
|
|
89
|
+
'2. Add Bot Token Scopes (chat:write, channels:read)\n' +
|
|
90
|
+
'3. Install to workspace\n' +
|
|
91
|
+
'4. Set SLACK_BOT_TOKEN environment variable',
|
|
92
|
+
},
|
|
93
|
+
];
|
|
94
|
+
// ============================================================================
|
|
95
|
+
// ConnectorRegistry
|
|
96
|
+
// ============================================================================
|
|
97
|
+
let instance = null;
|
|
98
|
+
export class ConnectorRegistry {
|
|
99
|
+
connectors = new Map();
|
|
100
|
+
constructor() {
|
|
101
|
+
for (const connector of CONNECTORS) {
|
|
102
|
+
this.connectors.set(connector.name, connector);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
static getInstance() {
|
|
106
|
+
if (!instance) {
|
|
107
|
+
instance = new ConnectorRegistry();
|
|
108
|
+
}
|
|
109
|
+
return instance;
|
|
110
|
+
}
|
|
111
|
+
static resetInstance() {
|
|
112
|
+
instance = null;
|
|
113
|
+
}
|
|
114
|
+
getAvailableConnectors() {
|
|
115
|
+
return Array.from(this.connectors.values());
|
|
116
|
+
}
|
|
117
|
+
getConnector(name) {
|
|
118
|
+
return this.connectors.get(name);
|
|
119
|
+
}
|
|
120
|
+
isConfigured(name) {
|
|
121
|
+
const connector = this.connectors.get(name);
|
|
122
|
+
if (!connector) {
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return connector.requiredEnvVars.every(v => !!process.env[v]);
|
|
126
|
+
}
|
|
127
|
+
getSetupInstructions(name) {
|
|
128
|
+
const connector = this.connectors.get(name);
|
|
129
|
+
if (!connector) {
|
|
130
|
+
return undefined;
|
|
131
|
+
}
|
|
132
|
+
logger.debug('Getting setup instructions', { connector: name });
|
|
133
|
+
return connector.setupInstructions;
|
|
134
|
+
}
|
|
135
|
+
listConfigured() {
|
|
136
|
+
return this.getAvailableConnectors().filter(c => this.isConfigured(c.name));
|
|
137
|
+
}
|
|
138
|
+
listUnconfigured() {
|
|
139
|
+
return this.getAvailableConnectors().filter(c => !this.isConfigured(c.name));
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
export function getConnectorRegistry() {
|
|
143
|
+
return ConnectorRegistry.getInstance();
|
|
144
|
+
}
|
|
145
|
+
export function resetConnectorRegistry() {
|
|
146
|
+
ConnectorRegistry.resetInstance();
|
|
147
|
+
}
|
|
148
|
+
//# sourceMappingURL=connectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"connectors.js","sourceRoot":"","sources":["../../src/mcp/connectors.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/index.d.ts
CHANGED
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Module - Model Context Protocol Integration
|
|
3
3
|
*
|
|
4
|
-
* This module provides
|
|
5
|
-
* - MCPManager (client.ts):
|
|
6
|
-
* - MCPClient (mcp-client.ts): Manual implementation with config file management
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - MCPManager (client.ts): SDK-based MCP client, supports multiple transport types
|
|
6
|
+
* - MCPClient (mcp-client.ts): Manual client implementation with config file management
|
|
7
|
+
* - CodeBuddyMCPServer (mcp-server.ts): MCP server exposing Code Buddy tools over stdio
|
|
7
8
|
*
|
|
8
|
-
* For new code, prefer MCPManager
|
|
9
|
+
* For new code, prefer MCPManager (client) and CodeBuddyMCPServer (server).
|
|
9
10
|
*/
|
|
10
11
|
export type { MCPServerConfig, MCPTool, ServerStatus, MCPConfig, } from "./types.js";
|
|
11
12
|
export { MCPManager } from "./client.js";
|
|
12
13
|
export { MCPClient, MCPResource, getMCPClient, resetMCPClient, } from "./mcp-client.js";
|
|
13
14
|
export { TransportType, TransportConfig, MCPTransport, StdioTransport, HttpTransport, SSETransport, StreamableHttpTransport, createTransport, } from "./transports.js";
|
|
15
|
+
export { CodeBuddyMCPServer } from "./mcp-server.js";
|
|
16
|
+
export type { MCPToolDefinition } from "./mcp-server.js";
|
|
14
17
|
export { loadMCPConfig, saveMCPConfig, addMCPServer, removeMCPServer, getMCPServer, PREDEFINED_SERVERS, saveProjectMCPConfig, createMCPConfigTemplate, hasProjectMCPConfig, getMCPConfigPaths, } from "./config.js";
|
package/dist/mcp/index.js
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Module - Model Context Protocol Integration
|
|
3
3
|
*
|
|
4
|
-
* This module provides
|
|
5
|
-
* - MCPManager (client.ts):
|
|
6
|
-
* - MCPClient (mcp-client.ts): Manual implementation with config file management
|
|
4
|
+
* This module provides:
|
|
5
|
+
* - MCPManager (client.ts): SDK-based MCP client, supports multiple transport types
|
|
6
|
+
* - MCPClient (mcp-client.ts): Manual client implementation with config file management
|
|
7
|
+
* - CodeBuddyMCPServer (mcp-server.ts): MCP server exposing Code Buddy tools over stdio
|
|
7
8
|
*
|
|
8
|
-
* For new code, prefer MCPManager
|
|
9
|
+
* For new code, prefer MCPManager (client) and CodeBuddyMCPServer (server).
|
|
9
10
|
*/
|
|
10
11
|
// SDK-based client (recommended)
|
|
11
12
|
export { MCPManager } from "./client.js";
|
|
@@ -13,6 +14,8 @@ export { MCPManager } from "./client.js";
|
|
|
13
14
|
export { MCPClient, getMCPClient, resetMCPClient, } from "./mcp-client.js";
|
|
14
15
|
// Transport implementations
|
|
15
16
|
export { StdioTransport, HttpTransport, SSETransport, StreamableHttpTransport, createTransport, } from "./transports.js";
|
|
17
|
+
// MCP Server (Code Buddy as a tool provider)
|
|
18
|
+
export { CodeBuddyMCPServer } from "./mcp-server.js";
|
|
16
19
|
// Configuration management
|
|
17
20
|
export { loadMCPConfig, saveMCPConfig, addMCPServer, removeMCPServer, getMCPServer, PREDEFINED_SERVERS, saveProjectMCPConfig, createMCPConfigTemplate, hasProjectMCPConfig, getMCPConfigPaths, } from "./config.js";
|
|
18
21
|
//# sourceMappingURL=index.js.map
|
package/dist/mcp/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,iCAAiC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,iDAAiD;AACjD,OAAO,EACL,SAAS,EAET,YAAY,EACZ,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,4BAA4B;AAC5B,OAAO,EAIL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,uBAAuB,EACvB,eAAe,GAChB,MAAM,iBAAiB,CAAC;AAEzB,6CAA6C;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,2BAA2B;AAC3B,OAAO,EACL,aAAa,EACb,aAAa,EACb,YAAY,EACZ,eAAe,EACf,YAAY,EACZ,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,GAClB,MAAM,aAAa,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Auto-Discovery
|
|
3
|
+
*
|
|
4
|
+
* Defers loading of MCP tool descriptions when they would consume
|
|
5
|
+
* too much of the context window, using on-demand search instead.
|
|
6
|
+
*/
|
|
7
|
+
export interface MCPToolInfo {
|
|
8
|
+
name: string;
|
|
9
|
+
description: string;
|
|
10
|
+
server: string;
|
|
11
|
+
inputSchema: Record<string, unknown>;
|
|
12
|
+
}
|
|
13
|
+
export declare class MCPAutoDiscovery {
|
|
14
|
+
private thresholdPercentage;
|
|
15
|
+
private loadedTools;
|
|
16
|
+
private deferredTools;
|
|
17
|
+
/**
|
|
18
|
+
* Determine if tool descriptions should be deferred
|
|
19
|
+
* Returns true if total description length exceeds threshold % of context window
|
|
20
|
+
*/
|
|
21
|
+
shouldDeferLoading(toolDescriptions: string[], contextWindowSize: number): boolean;
|
|
22
|
+
/**
|
|
23
|
+
* Search deferred tools by relevance to a query
|
|
24
|
+
*/
|
|
25
|
+
searchTools(query: string, allTools: MCPToolInfo[]): MCPToolInfo[];
|
|
26
|
+
/**
|
|
27
|
+
* Get currently loaded tool definitions
|
|
28
|
+
*/
|
|
29
|
+
getLoadedTools(): MCPToolInfo[];
|
|
30
|
+
/**
|
|
31
|
+
* Get deferred tool names
|
|
32
|
+
*/
|
|
33
|
+
getDeferredTools(): string[];
|
|
34
|
+
/**
|
|
35
|
+
* Set the threshold percentage for deferring
|
|
36
|
+
*/
|
|
37
|
+
setThreshold(percentage: number): void;
|
|
38
|
+
/**
|
|
39
|
+
* Get current threshold
|
|
40
|
+
*/
|
|
41
|
+
getThreshold(): number;
|
|
42
|
+
/**
|
|
43
|
+
* Partition tools into loaded and deferred sets
|
|
44
|
+
*/
|
|
45
|
+
partitionTools(tools: MCPToolInfo[], contextWindowSize: number): {
|
|
46
|
+
loaded: MCPToolInfo[];
|
|
47
|
+
deferred: MCPToolInfo[];
|
|
48
|
+
};
|
|
49
|
+
}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MCP Tool Auto-Discovery
|
|
3
|
+
*
|
|
4
|
+
* Defers loading of MCP tool descriptions when they would consume
|
|
5
|
+
* too much of the context window, using on-demand search instead.
|
|
6
|
+
*/
|
|
7
|
+
import { logger } from '../utils/logger.js';
|
|
8
|
+
// ============================================================================
|
|
9
|
+
// MCPAutoDiscovery
|
|
10
|
+
// ============================================================================
|
|
11
|
+
export class MCPAutoDiscovery {
|
|
12
|
+
thresholdPercentage = 10;
|
|
13
|
+
loadedTools = [];
|
|
14
|
+
deferredTools = [];
|
|
15
|
+
/**
|
|
16
|
+
* Determine if tool descriptions should be deferred
|
|
17
|
+
* Returns true if total description length exceeds threshold % of context window
|
|
18
|
+
*/
|
|
19
|
+
shouldDeferLoading(toolDescriptions, contextWindowSize) {
|
|
20
|
+
const totalChars = toolDescriptions.reduce((sum, d) => sum + d.length, 0);
|
|
21
|
+
// Rough token estimate: ~4 chars per token
|
|
22
|
+
const estimatedTokens = totalChars / 4;
|
|
23
|
+
const threshold = (this.thresholdPercentage / 100) * contextWindowSize;
|
|
24
|
+
const shouldDefer = estimatedTokens > threshold;
|
|
25
|
+
logger.debug(`MCP auto-discovery: ${estimatedTokens} estimated tokens vs ${threshold} threshold → ${shouldDefer ? 'defer' : 'load'}`);
|
|
26
|
+
return shouldDefer;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Search deferred tools by relevance to a query
|
|
30
|
+
*/
|
|
31
|
+
searchTools(query, allTools) {
|
|
32
|
+
const queryLower = query.toLowerCase();
|
|
33
|
+
const queryWords = queryLower.split(/\s+/).filter(w => w.length > 2);
|
|
34
|
+
const scored = allTools.map(tool => {
|
|
35
|
+
let score = 0;
|
|
36
|
+
const nameLower = tool.name.toLowerCase();
|
|
37
|
+
const descLower = tool.description.toLowerCase();
|
|
38
|
+
// Exact name match
|
|
39
|
+
if (nameLower === queryLower)
|
|
40
|
+
score += 10;
|
|
41
|
+
// Name contains query
|
|
42
|
+
if (nameLower.includes(queryLower))
|
|
43
|
+
score += 5;
|
|
44
|
+
// Description contains query
|
|
45
|
+
if (descLower.includes(queryLower))
|
|
46
|
+
score += 3;
|
|
47
|
+
// Word-level matching
|
|
48
|
+
for (const word of queryWords) {
|
|
49
|
+
if (nameLower.includes(word))
|
|
50
|
+
score += 2;
|
|
51
|
+
if (descLower.includes(word))
|
|
52
|
+
score += 1;
|
|
53
|
+
}
|
|
54
|
+
return { tool, score };
|
|
55
|
+
});
|
|
56
|
+
return scored
|
|
57
|
+
.filter(s => s.score > 0)
|
|
58
|
+
.sort((a, b) => b.score - a.score)
|
|
59
|
+
.map(s => s.tool);
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Get currently loaded tool definitions
|
|
63
|
+
*/
|
|
64
|
+
getLoadedTools() {
|
|
65
|
+
return [...this.loadedTools];
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get deferred tool names
|
|
69
|
+
*/
|
|
70
|
+
getDeferredTools() {
|
|
71
|
+
return this.deferredTools.map(t => t.name);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Set the threshold percentage for deferring
|
|
75
|
+
*/
|
|
76
|
+
setThreshold(percentage) {
|
|
77
|
+
if (percentage < 0 || percentage > 100) {
|
|
78
|
+
throw new Error('Threshold must be between 0 and 100');
|
|
79
|
+
}
|
|
80
|
+
this.thresholdPercentage = percentage;
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get current threshold
|
|
84
|
+
*/
|
|
85
|
+
getThreshold() {
|
|
86
|
+
return this.thresholdPercentage;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Partition tools into loaded and deferred sets
|
|
90
|
+
*/
|
|
91
|
+
partitionTools(tools, contextWindowSize) {
|
|
92
|
+
const descriptions = tools.map(t => t.description);
|
|
93
|
+
if (!this.shouldDeferLoading(descriptions, contextWindowSize)) {
|
|
94
|
+
this.loadedTools = [...tools];
|
|
95
|
+
this.deferredTools = [];
|
|
96
|
+
return { loaded: this.loadedTools, deferred: [] };
|
|
97
|
+
}
|
|
98
|
+
// When deferring, load no tools eagerly and defer all
|
|
99
|
+
this.loadedTools = [];
|
|
100
|
+
this.deferredTools = [...tools];
|
|
101
|
+
return { loaded: [], deferred: [...tools] };
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
//# sourceMappingURL=mcp-auto-discovery.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp-auto-discovery.js","sourceRoot":"","sources":["../../src/mcp/mcp-auto-discovery.ts"],"names":[],"mappings":"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"}
|