@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.
Files changed (273) hide show
  1. package/dist/agent/background-tasks.d.ts +49 -0
  2. package/dist/agent/background-tasks.js +153 -0
  3. package/dist/agent/background-tasks.js.map +1 -0
  4. package/dist/agent/definitions/agent-definition-loader.d.ts +21 -0
  5. package/dist/agent/definitions/agent-definition-loader.js +161 -0
  6. package/dist/agent/definitions/agent-definition-loader.js.map +1 -0
  7. package/dist/agent/definitions/index.d.ts +1 -0
  8. package/dist/agent/definitions/index.js +2 -0
  9. package/dist/agent/definitions/index.js.map +1 -0
  10. package/dist/agent/extended-thinking.d.ts +64 -0
  11. package/dist/agent/extended-thinking.js +103 -0
  12. package/dist/agent/extended-thinking.js.map +1 -0
  13. package/dist/agent/prompt-suggestions.d.ts +55 -0
  14. package/dist/agent/prompt-suggestions.js +125 -0
  15. package/dist/agent/prompt-suggestions.js.map +1 -0
  16. package/dist/agent/rewind-manager.d.ts +59 -0
  17. package/dist/agent/rewind-manager.js +124 -0
  18. package/dist/agent/rewind-manager.js.map +1 -0
  19. package/dist/agent/teams/agent-team.d.ts +54 -0
  20. package/dist/agent/teams/agent-team.js +114 -0
  21. package/dist/agent/teams/agent-team.js.map +1 -0
  22. package/dist/agent/teams/index.d.ts +1 -0
  23. package/dist/agent/teams/index.js +2 -0
  24. package/dist/agent/teams/index.js.map +1 -0
  25. package/dist/agent/teams/team-v2.d.ts +166 -0
  26. package/dist/agent/teams/team-v2.js +376 -0
  27. package/dist/agent/teams/team-v2.js.map +1 -0
  28. package/dist/channels/imessage/index.d.ts +40 -0
  29. package/dist/channels/imessage/index.js +69 -0
  30. package/dist/channels/imessage/index.js.map +1 -0
  31. package/dist/channels/line/index.d.ts +36 -0
  32. package/dist/channels/line/index.js +71 -0
  33. package/dist/channels/line/index.js.map +1 -0
  34. package/dist/channels/mattermost/index.d.ts +34 -0
  35. package/dist/channels/mattermost/index.js +56 -0
  36. package/dist/channels/mattermost/index.js.map +1 -0
  37. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  38. package/dist/channels/nextcloud-talk/index.js +67 -0
  39. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  40. package/dist/channels/niche-channels.d.ts +61 -0
  41. package/dist/channels/niche-channels.js +131 -0
  42. package/dist/channels/niche-channels.js.map +1 -0
  43. package/dist/channels/nostr/index.d.ts +30 -0
  44. package/dist/channels/nostr/index.js +68 -0
  45. package/dist/channels/nostr/index.js.map +1 -0
  46. package/dist/channels/twilio-voice/index.d.ts +37 -0
  47. package/dist/channels/twilio-voice/index.js +76 -0
  48. package/dist/channels/twilio-voice/index.js.map +1 -0
  49. package/dist/channels/whatsapp/index.js +0 -1
  50. package/dist/channels/whatsapp/index.js.map +1 -1
  51. package/dist/channels/zalo/index.d.ts +28 -0
  52. package/dist/channels/zalo/index.js +53 -0
  53. package/dist/channels/zalo/index.js.map +1 -0
  54. package/dist/cloud/cloud-sessions.d.ts +56 -0
  55. package/dist/cloud/cloud-sessions.js +187 -0
  56. package/dist/cloud/cloud-sessions.js.map +1 -0
  57. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  58. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  60. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  61. package/dist/codebuddy/tool-definitions/index.js +1 -1
  62. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  63. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  64. package/dist/commands/handlers/auth-handler.js +137 -0
  65. package/dist/commands/handlers/auth-handler.js.map +1 -0
  66. package/dist/commands/handlers/context-handler.d.ts +46 -0
  67. package/dist/commands/handlers/context-handler.js +102 -0
  68. package/dist/commands/handlers/context-handler.js.map +1 -0
  69. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  70. package/dist/commands/handlers/keybindings-handler.js +124 -0
  71. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  72. package/dist/commands/handlers/session-commands.d.ts +17 -0
  73. package/dist/commands/handlers/session-commands.js +119 -0
  74. package/dist/commands/handlers/session-commands.js.map +1 -0
  75. package/dist/commands/slash/builtin-commands.js +1 -1
  76. package/dist/commands/slash/builtin-commands.js.map +1 -1
  77. package/dist/config/admin-config.d.ts +54 -0
  78. package/dist/config/admin-config.js +144 -0
  79. package/dist/config/admin-config.js.map +1 -0
  80. package/dist/config/advanced-config.d.ts +118 -0
  81. package/dist/config/advanced-config.js +364 -0
  82. package/dist/config/advanced-config.js.map +1 -0
  83. package/dist/config/managed-policies.d.ts +50 -0
  84. package/dist/config/managed-policies.js +120 -0
  85. package/dist/config/managed-policies.js.map +1 -0
  86. package/dist/config/settings-hierarchy.d.ts +59 -0
  87. package/dist/config/settings-hierarchy.js +188 -0
  88. package/dist/config/settings-hierarchy.js.map +1 -0
  89. package/dist/config/tool-profiles.d.ts +37 -0
  90. package/dist/config/tool-profiles.js +150 -0
  91. package/dist/config/tool-profiles.js.map +1 -0
  92. package/dist/config/user-settings.d.ts +31 -0
  93. package/dist/config/user-settings.js +66 -0
  94. package/dist/config/user-settings.js.map +1 -0
  95. package/dist/context/context-files.d.ts +1 -1
  96. package/dist/context/context-files.js +2 -2
  97. package/dist/context/context-files.js.map +1 -1
  98. package/dist/context/partial-summarizer.d.ts +32 -0
  99. package/dist/context/partial-summarizer.js +144 -0
  100. package/dist/context/partial-summarizer.js.map +1 -0
  101. package/dist/desktop/desktop-app.d.ts +44 -0
  102. package/dist/desktop/desktop-app.js +136 -0
  103. package/dist/desktop/desktop-app.js.map +1 -0
  104. package/dist/git/worktree-sessions.d.ts +24 -0
  105. package/dist/git/worktree-sessions.js +93 -0
  106. package/dist/git/worktree-sessions.js.map +1 -0
  107. package/dist/hooks/advanced-hooks.d.ts +110 -0
  108. package/dist/hooks/advanced-hooks.js +256 -0
  109. package/dist/hooks/advanced-hooks.js.map +1 -0
  110. package/dist/hooks/async-hooks.d.ts +73 -0
  111. package/dist/hooks/async-hooks.js +213 -0
  112. package/dist/hooks/async-hooks.js.map +1 -0
  113. package/dist/hooks/env-persistence.d.ts +58 -0
  114. package/dist/hooks/env-persistence.js +195 -0
  115. package/dist/hooks/env-persistence.js.map +1 -0
  116. package/dist/hooks/hook-events.d.ts +36 -0
  117. package/dist/hooks/hook-events.js +55 -0
  118. package/dist/hooks/hook-events.js.map +1 -0
  119. package/dist/hooks/smart-hooks.d.ts +85 -0
  120. package/dist/hooks/smart-hooks.js +199 -0
  121. package/dist/hooks/smart-hooks.js.map +1 -0
  122. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  123. package/dist/ide/jetbrains-plugin.js +156 -0
  124. package/dist/ide/jetbrains-plugin.js.map +1 -0
  125. package/dist/ide/vscode-extension.d.ts +94 -0
  126. package/dist/ide/vscode-extension.js +229 -0
  127. package/dist/ide/vscode-extension.js.map +1 -0
  128. package/dist/index.js +77 -3
  129. package/dist/index.js.map +1 -1
  130. package/dist/input/file-autocomplete.d.ts +42 -0
  131. package/dist/input/file-autocomplete.js +154 -0
  132. package/dist/input/file-autocomplete.js.map +1 -0
  133. package/dist/integrations/chrome-bridge.d.ts +90 -0
  134. package/dist/integrations/chrome-bridge.js +151 -0
  135. package/dist/integrations/chrome-bridge.js.map +1 -0
  136. package/dist/integrations/github-action-runner.d.ts +40 -0
  137. package/dist/integrations/github-action-runner.js +163 -0
  138. package/dist/integrations/github-action-runner.js.map +1 -0
  139. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  140. package/dist/integrations/gitlab-ci-runner.js +104 -0
  141. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  142. package/dist/integrations/pr-session-linker.d.ts +44 -0
  143. package/dist/integrations/pr-session-linker.js +103 -0
  144. package/dist/integrations/pr-session-linker.js.map +1 -0
  145. package/dist/integrations/tailscale.d.ts +36 -0
  146. package/dist/integrations/tailscale.js +101 -0
  147. package/dist/integrations/tailscale.js.map +1 -0
  148. package/dist/lsp/lsp-client.d.ts +68 -0
  149. package/dist/lsp/lsp-client.js +182 -0
  150. package/dist/lsp/lsp-client.js.map +1 -0
  151. package/dist/mcp/connectors.d.ts +28 -0
  152. package/dist/mcp/connectors.js +148 -0
  153. package/dist/mcp/connectors.js.map +1 -0
  154. package/dist/mcp/index.d.ts +7 -4
  155. package/dist/mcp/index.js +7 -4
  156. package/dist/mcp/index.js.map +1 -1
  157. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  158. package/dist/mcp/mcp-auto-discovery.js +104 -0
  159. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  160. package/dist/mcp/mcp-server.d.ts +70 -0
  161. package/dist/mcp/mcp-server.js +374 -0
  162. package/dist/mcp/mcp-server.js.map +1 -0
  163. package/dist/memory/auto-memory.d.ts +53 -0
  164. package/dist/memory/auto-memory.js +250 -0
  165. package/dist/memory/auto-memory.js.map +1 -0
  166. package/dist/memory/hybrid-search.d.ts +51 -0
  167. package/dist/memory/hybrid-search.js +199 -0
  168. package/dist/memory/hybrid-search.js.map +1 -0
  169. package/dist/memory/memory-flush.d.ts +51 -0
  170. package/dist/memory/memory-flush.js +102 -0
  171. package/dist/memory/memory-flush.js.map +1 -0
  172. package/dist/memory/subagent-memory.d.ts +73 -0
  173. package/dist/memory/subagent-memory.js +172 -0
  174. package/dist/memory/subagent-memory.js.map +1 -0
  175. package/dist/nodes/device-node.d.ts +40 -0
  176. package/dist/nodes/device-node.js +117 -0
  177. package/dist/nodes/device-node.js.map +1 -0
  178. package/dist/output/json-schema-output.d.ts +67 -0
  179. package/dist/output/json-schema-output.js +273 -0
  180. package/dist/output/json-schema-output.js.map +1 -0
  181. package/dist/persistence/session-picker.d.ts +22 -0
  182. package/dist/persistence/session-picker.js +47 -0
  183. package/dist/persistence/session-picker.js.map +1 -0
  184. package/dist/persistence/session-store.d.ts +11 -0
  185. package/dist/persistence/session-store.js +17 -0
  186. package/dist/persistence/session-store.js.map +1 -1
  187. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  188. package/dist/plugins/git-pinned-marketplace.js +152 -0
  189. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  190. package/dist/plugins/plugin-manifest.d.ts +116 -0
  191. package/dist/plugins/plugin-manifest.js +283 -0
  192. package/dist/plugins/plugin-manifest.js.map +1 -0
  193. package/dist/sandbox/os-sandbox.d.ts +49 -1
  194. package/dist/sandbox/os-sandbox.js +347 -6
  195. package/dist/sandbox/os-sandbox.js.map +1 -1
  196. package/dist/sdk/agent-sdk.d.ts +61 -0
  197. package/dist/sdk/agent-sdk.js +90 -0
  198. package/dist/sdk/agent-sdk.js.map +1 -0
  199. package/dist/security/permission-modes.d.ts +76 -0
  200. package/dist/security/permission-modes.js +195 -0
  201. package/dist/security/permission-modes.js.map +1 -0
  202. package/dist/security/permission-patterns.d.ts +61 -0
  203. package/dist/security/permission-patterns.js +171 -0
  204. package/dist/security/permission-patterns.js.map +1 -0
  205. package/dist/security/safe-binaries.d.ts +23 -0
  206. package/dist/security/safe-binaries.js +96 -0
  207. package/dist/security/safe-binaries.js.map +1 -0
  208. package/dist/security/sender-policies.d.ts +46 -0
  209. package/dist/security/sender-policies.js +90 -0
  210. package/dist/security/sender-policies.js.map +1 -0
  211. package/dist/server/dashboard.d.ts +53 -0
  212. package/dist/server/dashboard.js +93 -0
  213. package/dist/server/dashboard.js.map +1 -0
  214. package/dist/services/system-prompt-override.d.ts +34 -0
  215. package/dist/services/system-prompt-override.js +64 -0
  216. package/dist/services/system-prompt-override.js.map +1 -0
  217. package/dist/skills/skill-enhancements.d.ts +37 -0
  218. package/dist/skills/skill-enhancements.js +69 -0
  219. package/dist/skills/skill-enhancements.js.map +1 -0
  220. package/dist/telemetry/otel-tracer.d.ts +98 -0
  221. package/dist/telemetry/otel-tracer.js +245 -0
  222. package/dist/telemetry/otel-tracer.js.map +1 -0
  223. package/dist/tools/browser-stub.d.ts +61 -0
  224. package/dist/tools/browser-stub.js +184 -0
  225. package/dist/tools/browser-stub.js.map +1 -0
  226. package/dist/tools/gateway-tool.d.ts +43 -0
  227. package/dist/tools/gateway-tool.js +92 -0
  228. package/dist/tools/gateway-tool.js.map +1 -0
  229. package/dist/tools/image-stub.d.ts +32 -0
  230. package/dist/tools/image-stub.js +97 -0
  231. package/dist/tools/image-stub.js.map +1 -0
  232. package/dist/tools/js-repl.d.ts +78 -0
  233. package/dist/tools/js-repl.js +280 -0
  234. package/dist/tools/js-repl.js.map +1 -0
  235. package/dist/tools/message-tool.d.ts +42 -0
  236. package/dist/tools/message-tool.js +113 -0
  237. package/dist/tools/message-tool.js.map +1 -0
  238. package/dist/ui/cli-enhancements.d.ts +178 -0
  239. package/dist/ui/cli-enhancements.js +430 -0
  240. package/dist/ui/cli-enhancements.js.map +1 -0
  241. package/dist/ui/status-line.d.ts +90 -0
  242. package/dist/ui/status-line.js +160 -0
  243. package/dist/ui/status-line.js.map +1 -0
  244. package/dist/ui/terminal-enhancements.d.ts +34 -0
  245. package/dist/ui/terminal-enhancements.js +97 -0
  246. package/dist/ui/terminal-enhancements.js.map +1 -0
  247. package/dist/ui/ui-enhancements.d.ts +38 -0
  248. package/dist/ui/ui-enhancements.js +116 -0
  249. package/dist/ui/ui-enhancements.js.map +1 -0
  250. package/dist/utils/custom-instructions.js +4 -1
  251. package/dist/utils/custom-instructions.js.map +1 -1
  252. package/dist/utils/init-project.d.ts +1 -1
  253. package/dist/utils/init-project.js +20 -20
  254. package/dist/utils/init-project.js.map +1 -1
  255. package/dist/utils/output-schema-validator.d.ts +40 -0
  256. package/dist/utils/output-schema-validator.js +137 -0
  257. package/dist/utils/output-schema-validator.js.map +1 -0
  258. package/dist/utils/safety-misc.d.ts +24 -0
  259. package/dist/utils/safety-misc.js +91 -0
  260. package/dist/utils/safety-misc.js.map +1 -0
  261. package/dist/utils/session-enhancements.d.ts +40 -0
  262. package/dist/utils/session-enhancements.js +118 -0
  263. package/dist/utils/session-enhancements.js.map +1 -0
  264. package/dist/utils/shell-snapshot.d.ts +38 -0
  265. package/dist/utils/shell-snapshot.js +323 -0
  266. package/dist/utils/shell-snapshot.js.map +1 -0
  267. package/dist/utils/stream-json-formatter.d.ts +77 -0
  268. package/dist/utils/stream-json-formatter.js +61 -0
  269. package/dist/utils/stream-json-formatter.js.map +1 -0
  270. package/dist/workflows/lobster-engine.d.ts +43 -0
  271. package/dist/workflows/lobster-engine.js +167 -0
  272. package/dist/workflows/lobster-engine.js.map +1 -0
  273. 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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"}
@@ -1,14 +1,17 @@
1
1
  /**
2
2
  * MCP Module - Model Context Protocol Integration
3
3
  *
4
- * This module provides two client implementations:
5
- * - MCPManager (client.ts): Uses the official MCP SDK, supports multiple transport types
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 as it uses the official SDK.
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 two client implementations:
5
- * - MCPManager (client.ts): Uses the official MCP SDK, supports multiple transport types
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 as it uses the official SDK.
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
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/mcp/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;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,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"}
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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"}