@phuetz/code-buddy 0.1.18 → 0.1.20

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 (355) 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/analytics/dashboard.js +1 -1
  29. package/dist/analytics/dashboard.js.map +1 -1
  30. package/dist/channels/imessage/index.d.ts +40 -0
  31. package/dist/channels/imessage/index.js +69 -0
  32. package/dist/channels/imessage/index.js.map +1 -0
  33. package/dist/channels/line/index.d.ts +36 -0
  34. package/dist/channels/line/index.js +71 -0
  35. package/dist/channels/line/index.js.map +1 -0
  36. package/dist/channels/mattermost/index.d.ts +34 -0
  37. package/dist/channels/mattermost/index.js +56 -0
  38. package/dist/channels/mattermost/index.js.map +1 -0
  39. package/dist/channels/nextcloud-talk/index.d.ts +37 -0
  40. package/dist/channels/nextcloud-talk/index.js +67 -0
  41. package/dist/channels/nextcloud-talk/index.js.map +1 -0
  42. package/dist/channels/niche-channels.d.ts +61 -0
  43. package/dist/channels/niche-channels.js +131 -0
  44. package/dist/channels/niche-channels.js.map +1 -0
  45. package/dist/channels/nostr/index.d.ts +30 -0
  46. package/dist/channels/nostr/index.js +68 -0
  47. package/dist/channels/nostr/index.js.map +1 -0
  48. package/dist/channels/twilio-voice/index.d.ts +37 -0
  49. package/dist/channels/twilio-voice/index.js +76 -0
  50. package/dist/channels/twilio-voice/index.js.map +1 -0
  51. package/dist/channels/whatsapp/index.js +0 -1
  52. package/dist/channels/whatsapp/index.js.map +1 -1
  53. package/dist/channels/zalo/index.d.ts +28 -0
  54. package/dist/channels/zalo/index.js +53 -0
  55. package/dist/channels/zalo/index.js.map +1 -0
  56. package/dist/cloud/cloud-sessions.d.ts +56 -0
  57. package/dist/cloud/cloud-sessions.js +187 -0
  58. package/dist/cloud/cloud-sessions.js.map +1 -0
  59. package/dist/codebuddy/tool-definitions/advanced-tools.d.ts +1 -0
  60. package/dist/codebuddy/tool-definitions/advanced-tools.js +24 -0
  61. package/dist/codebuddy/tool-definitions/advanced-tools.js.map +1 -1
  62. package/dist/codebuddy/tool-definitions/index.d.ts +1 -1
  63. package/dist/codebuddy/tool-definitions/index.js +1 -1
  64. package/dist/codebuddy/tool-definitions/index.js.map +1 -1
  65. package/dist/commands/delegate.js +2 -2
  66. package/dist/commands/delegate.js.map +1 -1
  67. package/dist/commands/features.d.ts +1 -1
  68. package/dist/commands/features.js +1 -1
  69. package/dist/commands/handlers/auth-handler.d.ts +32 -0
  70. package/dist/commands/handlers/auth-handler.js +137 -0
  71. package/dist/commands/handlers/auth-handler.js.map +1 -0
  72. package/dist/commands/handlers/context-handler.d.ts +46 -0
  73. package/dist/commands/handlers/context-handler.js +102 -0
  74. package/dist/commands/handlers/context-handler.js.map +1 -0
  75. package/dist/commands/handlers/core-handlers.js +1 -1
  76. package/dist/commands/handlers/core-handlers.js.map +1 -1
  77. package/dist/commands/handlers/keybindings-handler.d.ts +30 -0
  78. package/dist/commands/handlers/keybindings-handler.js +124 -0
  79. package/dist/commands/handlers/keybindings-handler.js.map +1 -0
  80. package/dist/commands/handlers/missing-handlers.js +15 -14
  81. package/dist/commands/handlers/missing-handlers.js.map +1 -1
  82. package/dist/commands/handlers/session-commands.d.ts +17 -0
  83. package/dist/commands/handlers/session-commands.js +119 -0
  84. package/dist/commands/handlers/session-commands.js.map +1 -0
  85. package/dist/commands/handlers/worktree-handlers.d.ts +1 -1
  86. package/dist/commands/handlers/worktree-handlers.js +2 -2
  87. package/dist/commands/slash/builtin-commands.js +2 -2
  88. package/dist/commands/slash/builtin-commands.js.map +1 -1
  89. package/dist/config/admin-config.d.ts +54 -0
  90. package/dist/config/admin-config.js +144 -0
  91. package/dist/config/admin-config.js.map +1 -0
  92. package/dist/config/advanced-config.d.ts +118 -0
  93. package/dist/config/advanced-config.js +364 -0
  94. package/dist/config/advanced-config.js.map +1 -0
  95. package/dist/config/constants.d.ts +2 -2
  96. package/dist/config/constants.js +2 -2
  97. package/dist/config/constants.js.map +1 -1
  98. package/dist/config/managed-policies.d.ts +50 -0
  99. package/dist/config/managed-policies.js +120 -0
  100. package/dist/config/managed-policies.js.map +1 -0
  101. package/dist/config/settings-hierarchy.d.ts +59 -0
  102. package/dist/config/settings-hierarchy.js +188 -0
  103. package/dist/config/settings-hierarchy.js.map +1 -0
  104. package/dist/config/toml-config.js +1 -1
  105. package/dist/config/toml-config.js.map +1 -1
  106. package/dist/config/tool-profiles.d.ts +37 -0
  107. package/dist/config/tool-profiles.js +150 -0
  108. package/dist/config/tool-profiles.js.map +1 -0
  109. package/dist/config/user-settings.d.ts +31 -0
  110. package/dist/config/user-settings.js +66 -0
  111. package/dist/config/user-settings.js.map +1 -0
  112. package/dist/context/context-files.d.ts +1 -1
  113. package/dist/context/context-files.js +3 -3
  114. package/dist/context/context-files.js.map +1 -1
  115. package/dist/context/partial-summarizer.d.ts +32 -0
  116. package/dist/context/partial-summarizer.js +144 -0
  117. package/dist/context/partial-summarizer.js.map +1 -0
  118. package/dist/desktop/desktop-app.d.ts +44 -0
  119. package/dist/desktop/desktop-app.js +136 -0
  120. package/dist/desktop/desktop-app.js.map +1 -0
  121. package/dist/features/index.d.ts +1 -1
  122. package/dist/features/index.js +2 -2
  123. package/dist/features/index.js.map +1 -1
  124. package/dist/git/worktree-sessions.d.ts +24 -0
  125. package/dist/git/worktree-sessions.js +93 -0
  126. package/dist/git/worktree-sessions.js.map +1 -0
  127. package/dist/hooks/advanced-hooks.d.ts +110 -0
  128. package/dist/hooks/advanced-hooks.js +256 -0
  129. package/dist/hooks/advanced-hooks.js.map +1 -0
  130. package/dist/hooks/async-hooks.d.ts +73 -0
  131. package/dist/hooks/async-hooks.js +213 -0
  132. package/dist/hooks/async-hooks.js.map +1 -0
  133. package/dist/hooks/env-persistence.d.ts +58 -0
  134. package/dist/hooks/env-persistence.js +195 -0
  135. package/dist/hooks/env-persistence.js.map +1 -0
  136. package/dist/hooks/hook-events.d.ts +36 -0
  137. package/dist/hooks/hook-events.js +55 -0
  138. package/dist/hooks/hook-events.js.map +1 -0
  139. package/dist/hooks/hook-system.js +1 -1
  140. package/dist/hooks/hook-system.js.map +1 -1
  141. package/dist/hooks/smart-hooks.d.ts +85 -0
  142. package/dist/hooks/smart-hooks.js +199 -0
  143. package/dist/hooks/smart-hooks.js.map +1 -0
  144. package/dist/ide/jetbrains-plugin.d.ts +55 -0
  145. package/dist/ide/jetbrains-plugin.js +156 -0
  146. package/dist/ide/jetbrains-plugin.js.map +1 -0
  147. package/dist/ide/vscode-extension.d.ts +94 -0
  148. package/dist/ide/vscode-extension.js +229 -0
  149. package/dist/ide/vscode-extension.js.map +1 -0
  150. package/dist/index.js +77 -3
  151. package/dist/index.js.map +1 -1
  152. package/dist/input/file-autocomplete.d.ts +42 -0
  153. package/dist/input/file-autocomplete.js +154 -0
  154. package/dist/input/file-autocomplete.js.map +1 -0
  155. package/dist/integrations/chrome-bridge.d.ts +90 -0
  156. package/dist/integrations/chrome-bridge.js +151 -0
  157. package/dist/integrations/chrome-bridge.js.map +1 -0
  158. package/dist/integrations/github-action-runner.d.ts +40 -0
  159. package/dist/integrations/github-action-runner.js +163 -0
  160. package/dist/integrations/github-action-runner.js.map +1 -0
  161. package/dist/integrations/github-actions.js +1 -1
  162. package/dist/integrations/github-actions.js.map +1 -1
  163. package/dist/integrations/gitlab-ci-runner.d.ts +34 -0
  164. package/dist/integrations/gitlab-ci-runner.js +104 -0
  165. package/dist/integrations/gitlab-ci-runner.js.map +1 -0
  166. package/dist/integrations/pr-session-linker.d.ts +44 -0
  167. package/dist/integrations/pr-session-linker.js +103 -0
  168. package/dist/integrations/pr-session-linker.js.map +1 -0
  169. package/dist/integrations/tailscale.d.ts +36 -0
  170. package/dist/integrations/tailscale.js +101 -0
  171. package/dist/integrations/tailscale.js.map +1 -0
  172. package/dist/lsp/lsp-client.d.ts +68 -0
  173. package/dist/lsp/lsp-client.js +182 -0
  174. package/dist/lsp/lsp-client.js.map +1 -0
  175. package/dist/lsp/server.js +3 -3
  176. package/dist/lsp/server.js.map +1 -1
  177. package/dist/mcp/connectors.d.ts +28 -0
  178. package/dist/mcp/connectors.js +148 -0
  179. package/dist/mcp/connectors.js.map +1 -0
  180. package/dist/mcp/index.d.ts +7 -4
  181. package/dist/mcp/index.js +7 -4
  182. package/dist/mcp/index.js.map +1 -1
  183. package/dist/mcp/mcp-auto-discovery.d.ts +49 -0
  184. package/dist/mcp/mcp-auto-discovery.js +104 -0
  185. package/dist/mcp/mcp-auto-discovery.js.map +1 -0
  186. package/dist/mcp/mcp-server.d.ts +70 -0
  187. package/dist/mcp/mcp-server.js +374 -0
  188. package/dist/mcp/mcp-server.js.map +1 -0
  189. package/dist/memory/auto-memory.d.ts +53 -0
  190. package/dist/memory/auto-memory.js +250 -0
  191. package/dist/memory/auto-memory.js.map +1 -0
  192. package/dist/memory/hybrid-search.d.ts +51 -0
  193. package/dist/memory/hybrid-search.js +199 -0
  194. package/dist/memory/hybrid-search.js.map +1 -0
  195. package/dist/memory/memory-flush.d.ts +51 -0
  196. package/dist/memory/memory-flush.js +102 -0
  197. package/dist/memory/memory-flush.js.map +1 -0
  198. package/dist/memory/subagent-memory.d.ts +73 -0
  199. package/dist/memory/subagent-memory.js +172 -0
  200. package/dist/memory/subagent-memory.js.map +1 -0
  201. package/dist/nodes/device-node.d.ts +40 -0
  202. package/dist/nodes/device-node.js +117 -0
  203. package/dist/nodes/device-node.js.map +1 -0
  204. package/dist/observability/dashboard.d.ts +1 -1
  205. package/dist/observability/dashboard.js +2 -2
  206. package/dist/observability/dashboard.js.map +1 -1
  207. package/dist/offline/offline-mode.d.ts +1 -1
  208. package/dist/offline/offline-mode.js +1 -1
  209. package/dist/output/json-schema-output.d.ts +67 -0
  210. package/dist/output/json-schema-output.js +273 -0
  211. package/dist/output/json-schema-output.js.map +1 -0
  212. package/dist/persistence/session-picker.d.ts +22 -0
  213. package/dist/persistence/session-picker.js +47 -0
  214. package/dist/persistence/session-picker.js.map +1 -0
  215. package/dist/persistence/session-store.d.ts +11 -0
  216. package/dist/persistence/session-store.js +17 -0
  217. package/dist/persistence/session-store.js.map +1 -1
  218. package/dist/plugins/git-pinned-marketplace.d.ts +39 -0
  219. package/dist/plugins/git-pinned-marketplace.js +152 -0
  220. package/dist/plugins/git-pinned-marketplace.js.map +1 -0
  221. package/dist/plugins/marketplace.d.ts +1 -1
  222. package/dist/plugins/marketplace.js +1 -1
  223. package/dist/plugins/plugin-manifest.d.ts +116 -0
  224. package/dist/plugins/plugin-manifest.js +283 -0
  225. package/dist/plugins/plugin-manifest.js.map +1 -0
  226. package/dist/prompts/index.d.ts +1 -1
  227. package/dist/prompts/index.js +1 -1
  228. package/dist/providers/local-llm-provider.d.ts +1 -1
  229. package/dist/providers/local-llm-provider.js +1 -1
  230. package/dist/sandbox/os-sandbox.d.ts +49 -1
  231. package/dist/sandbox/os-sandbox.js +347 -6
  232. package/dist/sandbox/os-sandbox.js.map +1 -1
  233. package/dist/scripting/codebuddy-bindings.js +1 -1
  234. package/dist/scripting/codebuddy-bindings.js.map +1 -1
  235. package/dist/sdk/agent-sdk.d.ts +61 -0
  236. package/dist/sdk/agent-sdk.js +90 -0
  237. package/dist/sdk/agent-sdk.js.map +1 -0
  238. package/dist/security/index.d.ts +1 -1
  239. package/dist/security/index.js +1 -1
  240. package/dist/security/permission-modes.d.ts +76 -0
  241. package/dist/security/permission-modes.js +195 -0
  242. package/dist/security/permission-modes.js.map +1 -0
  243. package/dist/security/permission-patterns.d.ts +61 -0
  244. package/dist/security/permission-patterns.js +171 -0
  245. package/dist/security/permission-patterns.js.map +1 -0
  246. package/dist/security/safe-binaries.d.ts +23 -0
  247. package/dist/security/safe-binaries.js +96 -0
  248. package/dist/security/safe-binaries.js.map +1 -0
  249. package/dist/security/sender-policies.d.ts +46 -0
  250. package/dist/security/sender-policies.js +90 -0
  251. package/dist/security/sender-policies.js.map +1 -0
  252. package/dist/server/dashboard.d.ts +53 -0
  253. package/dist/server/dashboard.js +93 -0
  254. package/dist/server/dashboard.js.map +1 -0
  255. package/dist/services/system-prompt-override.d.ts +34 -0
  256. package/dist/services/system-prompt-override.js +64 -0
  257. package/dist/services/system-prompt-override.js.map +1 -0
  258. package/dist/skills/skill-enhancements.d.ts +37 -0
  259. package/dist/skills/skill-enhancements.js +69 -0
  260. package/dist/skills/skill-enhancements.js.map +1 -0
  261. package/dist/telemetry/otel-tracer.d.ts +98 -0
  262. package/dist/telemetry/otel-tracer.js +245 -0
  263. package/dist/telemetry/otel-tracer.js.map +1 -0
  264. package/dist/templates/export/html.template.js +2 -2
  265. package/dist/templates/export/markdown.template.js +1 -1
  266. package/dist/templates/export/markdown.template.js.map +1 -1
  267. package/dist/themes/default-themes.d.ts +1 -1
  268. package/dist/themes/default-themes.js +1 -1
  269. package/dist/themes/index.d.ts +1 -1
  270. package/dist/themes/index.js +1 -1
  271. package/dist/themes/theme-manager.d.ts +1 -1
  272. package/dist/themes/theme-manager.js +1 -1
  273. package/dist/themes/theme.d.ts +1 -1
  274. package/dist/themes/theme.js +1 -1
  275. package/dist/tools/browser-stub.d.ts +61 -0
  276. package/dist/tools/browser-stub.js +184 -0
  277. package/dist/tools/browser-stub.js.map +1 -0
  278. package/dist/tools/gateway-tool.d.ts +43 -0
  279. package/dist/tools/gateway-tool.js +92 -0
  280. package/dist/tools/gateway-tool.js.map +1 -0
  281. package/dist/tools/image-stub.d.ts +32 -0
  282. package/dist/tools/image-stub.js +97 -0
  283. package/dist/tools/image-stub.js.map +1 -0
  284. package/dist/tools/js-repl.d.ts +78 -0
  285. package/dist/tools/js-repl.js +280 -0
  286. package/dist/tools/js-repl.js.map +1 -0
  287. package/dist/tools/message-tool.d.ts +42 -0
  288. package/dist/tools/message-tool.js +113 -0
  289. package/dist/tools/message-tool.js.map +1 -0
  290. package/dist/types/errors.d.ts +1 -1
  291. package/dist/types/errors.js +1 -1
  292. package/dist/ui/app.js +1 -1
  293. package/dist/ui/app.js.map +1 -1
  294. package/dist/ui/cli-enhancements.d.ts +178 -0
  295. package/dist/ui/cli-enhancements.js +430 -0
  296. package/dist/ui/cli-enhancements.js.map +1 -0
  297. package/dist/ui/components/HelpSystem.d.ts +1 -1
  298. package/dist/ui/components/HelpSystem.js +1 -1
  299. package/dist/ui/context/theme-context.d.ts +1 -1
  300. package/dist/ui/context/theme-context.js +1 -1
  301. package/dist/ui/dashboard/dashboard.js +1 -1
  302. package/dist/ui/dashboard/dashboard.js.map +1 -1
  303. package/dist/ui/status-line.d.ts +90 -0
  304. package/dist/ui/status-line.js +160 -0
  305. package/dist/ui/status-line.js.map +1 -0
  306. package/dist/ui/terminal-enhancements.d.ts +34 -0
  307. package/dist/ui/terminal-enhancements.js +97 -0
  308. package/dist/ui/terminal-enhancements.js.map +1 -0
  309. package/dist/ui/ui-enhancements.d.ts +38 -0
  310. package/dist/ui/ui-enhancements.js +116 -0
  311. package/dist/ui/ui-enhancements.js.map +1 -0
  312. package/dist/undo/checkpoint-manager.d.ts +1 -1
  313. package/dist/undo/checkpoint-manager.js +1 -1
  314. package/dist/utils/codebuddy-home.d.ts +1 -1
  315. package/dist/utils/codebuddy-home.js +1 -1
  316. package/dist/utils/conversation-export.js +3 -3
  317. package/dist/utils/conversation-export.js.map +1 -1
  318. package/dist/utils/custom-commands.js +1 -1
  319. package/dist/utils/custom-instructions.js +4 -1
  320. package/dist/utils/custom-instructions.js.map +1 -1
  321. package/dist/utils/debug-logger.d.ts +1 -1
  322. package/dist/utils/debug-logger.js +1 -1
  323. package/dist/utils/errors.d.ts +2 -2
  324. package/dist/utils/errors.js +2 -2
  325. package/dist/utils/export-manager.js +3 -3
  326. package/dist/utils/export-manager.js.map +1 -1
  327. package/dist/utils/headless-output.js +1 -1
  328. package/dist/utils/headless-output.js.map +1 -1
  329. package/dist/utils/init-project.d.ts +1 -1
  330. package/dist/utils/init-project.js +20 -20
  331. package/dist/utils/init-project.js.map +1 -1
  332. package/dist/utils/logger.d.ts +1 -1
  333. package/dist/utils/logger.js +1 -1
  334. package/dist/utils/output-schema-validator.d.ts +40 -0
  335. package/dist/utils/output-schema-validator.js +137 -0
  336. package/dist/utils/output-schema-validator.js.map +1 -0
  337. package/dist/utils/safety-misc.d.ts +24 -0
  338. package/dist/utils/safety-misc.js +91 -0
  339. package/dist/utils/safety-misc.js.map +1 -0
  340. package/dist/utils/session-enhancements.d.ts +40 -0
  341. package/dist/utils/session-enhancements.js +118 -0
  342. package/dist/utils/session-enhancements.js.map +1 -0
  343. package/dist/utils/shell-completions.js +6 -6
  344. package/dist/utils/shell-snapshot.d.ts +38 -0
  345. package/dist/utils/shell-snapshot.js +323 -0
  346. package/dist/utils/shell-snapshot.js.map +1 -0
  347. package/dist/utils/stream-json-formatter.d.ts +77 -0
  348. package/dist/utils/stream-json-formatter.js +61 -0
  349. package/dist/utils/stream-json-formatter.js.map +1 -0
  350. package/dist/utils/terminal-notifications.js +1 -1
  351. package/dist/utils/terminal-notifications.js.map +1 -1
  352. package/dist/workflows/lobster-engine.d.ts +43 -0
  353. package/dist/workflows/lobster-engine.js +167 -0
  354. package/dist/workflows/lobster-engine.js.map +1 -0
  355. package/package.json +3 -6
@@ -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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"}
@@ -0,0 +1,70 @@
1
+ /**
2
+ * MCP Server - Expose Code Buddy tools via the Model Context Protocol
3
+ *
4
+ * Allows Code Buddy to act as a tool provider for other AI agents
5
+ * (VS Code, Cursor, Claude Desktop, etc.) over stdio transport.
6
+ *
7
+ * Exposed tools:
8
+ * - read_file: Read file contents
9
+ * - write_file: Write/create a file
10
+ * - edit_file: String replacement editing
11
+ * - bash: Execute shell commands
12
+ * - search_files: Search file contents (ripgrep-based)
13
+ * - list_files: List directory contents
14
+ * - git: Git operations (status, diff, log, add, commit, etc.)
15
+ */
16
+ /**
17
+ * Tool definition metadata for listing purposes.
18
+ */
19
+ export interface MCPToolDefinition {
20
+ name: string;
21
+ description: string;
22
+ inputSchema: Record<string, unknown>;
23
+ }
24
+ /**
25
+ * CodeBuddyMCPServer - MCP server that exposes Code Buddy tools.
26
+ *
27
+ * Usage:
28
+ * const server = new CodeBuddyMCPServer();
29
+ * await server.start(); // Blocks on stdio transport
30
+ * await server.stop(); // Clean shutdown
31
+ */
32
+ export declare class CodeBuddyMCPServer {
33
+ private mcpServer;
34
+ private transport;
35
+ private running;
36
+ private textEditor;
37
+ private searchTool;
38
+ private gitTool;
39
+ private bashTool;
40
+ constructor();
41
+ /**
42
+ * Get the list of tools exposed by this MCP server.
43
+ */
44
+ static getToolDefinitions(): MCPToolDefinition[];
45
+ /**
46
+ * Lazily initialize tool instances on first use.
47
+ */
48
+ private ensureTools;
49
+ /**
50
+ * Convert a ToolResult to MCP CallToolResult format.
51
+ */
52
+ private formatResult;
53
+ /**
54
+ * Register all Code Buddy tools with the MCP server.
55
+ */
56
+ private registerTools;
57
+ /**
58
+ * Start the MCP server over stdio transport.
59
+ * This method blocks until the transport is closed.
60
+ */
61
+ start(): Promise<void>;
62
+ /**
63
+ * Stop the MCP server and close the transport.
64
+ */
65
+ stop(): Promise<void>;
66
+ /**
67
+ * Whether the server is currently running.
68
+ */
69
+ isRunning(): boolean;
70
+ }
@@ -0,0 +1,374 @@
1
+ /**
2
+ * MCP Server - Expose Code Buddy tools via the Model Context Protocol
3
+ *
4
+ * Allows Code Buddy to act as a tool provider for other AI agents
5
+ * (VS Code, Cursor, Claude Desktop, etc.) over stdio transport.
6
+ *
7
+ * Exposed tools:
8
+ * - read_file: Read file contents
9
+ * - write_file: Write/create a file
10
+ * - edit_file: String replacement editing
11
+ * - bash: Execute shell commands
12
+ * - search_files: Search file contents (ripgrep-based)
13
+ * - list_files: List directory contents
14
+ * - git: Git operations (status, diff, log, add, commit, etc.)
15
+ */
16
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
17
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
18
+ import { z } from 'zod';
19
+ import * as path from 'path';
20
+ import * as fs from 'fs';
21
+ // Read version from package.json (avoid import.meta.url for ts-jest compat)
22
+ let packageVersion = '0.1.0';
23
+ try {
24
+ const pkgPath = path.resolve(__dirname, '../../package.json');
25
+ const pkgJson = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
26
+ packageVersion = pkgJson.version || packageVersion;
27
+ }
28
+ catch {
29
+ // Ignore - use default version
30
+ }
31
+ /**
32
+ * CodeBuddyMCPServer - MCP server that exposes Code Buddy tools.
33
+ *
34
+ * Usage:
35
+ * const server = new CodeBuddyMCPServer();
36
+ * await server.start(); // Blocks on stdio transport
37
+ * await server.stop(); // Clean shutdown
38
+ */
39
+ export class CodeBuddyMCPServer {
40
+ mcpServer;
41
+ transport = null;
42
+ running = false;
43
+ // Lazily initialized tool instances
44
+ textEditor = null;
45
+ searchTool = null;
46
+ gitTool = null;
47
+ bashTool = null;
48
+ constructor() {
49
+ this.mcpServer = new McpServer({
50
+ name: 'code-buddy',
51
+ version: packageVersion,
52
+ }, {
53
+ capabilities: {
54
+ tools: {},
55
+ },
56
+ });
57
+ this.registerTools();
58
+ }
59
+ /**
60
+ * Get the list of tools exposed by this MCP server.
61
+ */
62
+ static getToolDefinitions() {
63
+ return [
64
+ {
65
+ name: 'read_file',
66
+ description: 'Read the contents of a file. Returns the file content with line numbers.',
67
+ inputSchema: {
68
+ type: 'object',
69
+ properties: {
70
+ path: { type: 'string', description: 'Absolute or relative path to the file to read' },
71
+ start_line: { type: 'number', description: 'Optional start line (1-indexed)' },
72
+ end_line: { type: 'number', description: 'Optional end line (1-indexed)' },
73
+ },
74
+ required: ['path'],
75
+ },
76
+ },
77
+ {
78
+ name: 'write_file',
79
+ description: 'Write content to a file. Creates the file if it does not exist, or overwrites it if it does.',
80
+ inputSchema: {
81
+ type: 'object',
82
+ properties: {
83
+ path: { type: 'string', description: 'Absolute or relative path to the file to write' },
84
+ content: { type: 'string', description: 'The content to write to the file' },
85
+ },
86
+ required: ['path', 'content'],
87
+ },
88
+ },
89
+ {
90
+ name: 'edit_file',
91
+ description: 'Edit a file by replacing an exact string match with new content. The old_string must match exactly one location in the file.',
92
+ inputSchema: {
93
+ type: 'object',
94
+ properties: {
95
+ path: { type: 'string', description: 'Path to the file to edit' },
96
+ old_string: { type: 'string', description: 'The exact string to find and replace' },
97
+ new_string: { type: 'string', description: 'The replacement string' },
98
+ },
99
+ required: ['path', 'old_string', 'new_string'],
100
+ },
101
+ },
102
+ {
103
+ name: 'bash',
104
+ description: 'Execute a shell command and return its output. Use for running scripts, installing packages, or any terminal operation.',
105
+ inputSchema: {
106
+ type: 'object',
107
+ properties: {
108
+ command: { type: 'string', description: 'The shell command to execute' },
109
+ timeout: { type: 'number', description: 'Timeout in milliseconds (default: 30000)' },
110
+ },
111
+ required: ['command'],
112
+ },
113
+ },
114
+ {
115
+ name: 'search_files',
116
+ description: 'Search for text patterns in files using ripgrep. Supports regex patterns and file type filtering.',
117
+ inputSchema: {
118
+ type: 'object',
119
+ properties: {
120
+ query: { type: 'string', description: 'The search query (text or regex pattern)' },
121
+ path: { type: 'string', description: 'Directory to search in (defaults to cwd)' },
122
+ include_pattern: { type: 'string', description: 'Glob pattern for files to include (e.g., "*.ts")' },
123
+ case_sensitive: { type: 'boolean', description: 'Whether the search is case-sensitive (default: false)' },
124
+ max_results: { type: 'number', description: 'Maximum number of results to return (default: 50)' },
125
+ },
126
+ required: ['query'],
127
+ },
128
+ },
129
+ {
130
+ name: 'list_files',
131
+ description: 'List files and directories at a given path. Returns names with type indicators (/ for directories).',
132
+ inputSchema: {
133
+ type: 'object',
134
+ properties: {
135
+ path: { type: 'string', description: 'Directory path to list (defaults to cwd)' },
136
+ },
137
+ required: [],
138
+ },
139
+ },
140
+ {
141
+ name: 'git',
142
+ description: 'Execute git operations: status, diff, log, add, commit, branch, checkout, etc.',
143
+ inputSchema: {
144
+ type: 'object',
145
+ properties: {
146
+ subcommand: {
147
+ type: 'string',
148
+ description: 'Git subcommand to run',
149
+ enum: ['status', 'diff', 'log', 'add', 'commit', 'branch', 'checkout'],
150
+ },
151
+ args: {
152
+ type: 'object',
153
+ description: 'Arguments for the git subcommand',
154
+ properties: {
155
+ files: { type: 'array', items: { type: 'string' }, description: 'Files for add/diff' },
156
+ message: { type: 'string', description: 'Commit message' },
157
+ staged: { type: 'boolean', description: 'Show staged changes (for diff)' },
158
+ count: { type: 'number', description: 'Number of log entries' },
159
+ branch_name: { type: 'string', description: 'Branch name for branch/checkout' },
160
+ },
161
+ },
162
+ },
163
+ required: ['subcommand'],
164
+ },
165
+ },
166
+ ];
167
+ }
168
+ /**
169
+ * Lazily initialize tool instances on first use.
170
+ */
171
+ async ensureTools() {
172
+ if (this.textEditor)
173
+ return;
174
+ const [{ TextEditorTool }, { SearchTool }, { GitTool }, { BashTool },] = await Promise.all([
175
+ import('../tools/text-editor.js'),
176
+ import('../tools/search.js'),
177
+ import('../tools/git-tool.js'),
178
+ import('../tools/bash/index.js'),
179
+ ]);
180
+ // Enable auto-approve for MCP server mode (no interactive confirmation)
181
+ const { ConfirmationService } = await import('../utils/confirmation-service.js');
182
+ const confirmService = ConfirmationService.getInstance();
183
+ confirmService.setSessionFlag('allOperations', true);
184
+ this.textEditor = new TextEditorTool();
185
+ this.searchTool = new SearchTool();
186
+ this.gitTool = new GitTool();
187
+ this.bashTool = new BashTool();
188
+ }
189
+ /**
190
+ * Convert a ToolResult to MCP CallToolResult format.
191
+ */
192
+ formatResult(result) {
193
+ const text = result.success
194
+ ? (result.output || result.content || 'Done')
195
+ : (result.error || 'Unknown error');
196
+ return {
197
+ content: [{ type: 'text', text }],
198
+ isError: !result.success,
199
+ };
200
+ }
201
+ /**
202
+ * Register all Code Buddy tools with the MCP server.
203
+ */
204
+ registerTools() {
205
+ // read_file
206
+ this.mcpServer.tool('read_file', 'Read the contents of a file. Returns the file content with line numbers.', {
207
+ path: z.string().describe('Absolute or relative path to the file to read'),
208
+ start_line: z.number().optional().describe('Optional start line (1-indexed)'),
209
+ end_line: z.number().optional().describe('Optional end line (1-indexed)'),
210
+ }, async (args) => {
211
+ await this.ensureTools();
212
+ const viewRange = (args.start_line !== undefined && args.end_line !== undefined)
213
+ ? [args.start_line, args.end_line]
214
+ : undefined;
215
+ const result = await this.textEditor.view(args.path, viewRange);
216
+ return this.formatResult(result);
217
+ });
218
+ // write_file
219
+ this.mcpServer.tool('write_file', 'Write content to a file. Creates the file if it does not exist, or overwrites it.', {
220
+ path: z.string().describe('Absolute or relative path to the file to write'),
221
+ content: z.string().describe('The content to write to the file'),
222
+ }, async (args) => {
223
+ await this.ensureTools();
224
+ const result = await this.textEditor.create(args.path, args.content);
225
+ return this.formatResult(result);
226
+ });
227
+ // edit_file
228
+ this.mcpServer.tool('edit_file', 'Edit a file by replacing an exact string match with new content.', {
229
+ path: z.string().describe('Path to the file to edit'),
230
+ old_string: z.string().describe('The exact string to find and replace'),
231
+ new_string: z.string().describe('The replacement string'),
232
+ }, async (args) => {
233
+ await this.ensureTools();
234
+ const result = await this.textEditor.strReplace(args.path, args.old_string, args.new_string);
235
+ return this.formatResult(result);
236
+ });
237
+ // bash
238
+ this.mcpServer.tool('bash', 'Execute a shell command and return its output.', {
239
+ command: z.string().describe('The shell command to execute'),
240
+ timeout: z.number().optional().describe('Timeout in milliseconds (default: 30000)'),
241
+ }, async (args) => {
242
+ await this.ensureTools();
243
+ const result = await this.bashTool.execute(args.command, args.timeout ?? 30000);
244
+ return this.formatResult(result);
245
+ });
246
+ // search_files
247
+ this.mcpServer.tool('search_files', 'Search for text patterns in files using ripgrep.', {
248
+ query: z.string().describe('The search query (text or regex pattern)'),
249
+ path: z.string().optional().describe('Directory to search in (defaults to cwd)'),
250
+ include_pattern: z.string().optional().describe('Glob pattern for files to include (e.g., "*.ts")'),
251
+ case_sensitive: z.boolean().optional().describe('Whether the search is case-sensitive (default: false)'),
252
+ max_results: z.number().optional().describe('Maximum number of results to return (default: 50)'),
253
+ }, async (args) => {
254
+ await this.ensureTools();
255
+ const result = await this.searchTool.search(args.query, {
256
+ searchType: 'text',
257
+ includePattern: args.include_pattern,
258
+ caseSensitive: args.case_sensitive ?? false,
259
+ maxResults: args.max_results ?? 50,
260
+ });
261
+ return this.formatResult(result);
262
+ });
263
+ // list_files
264
+ this.mcpServer.tool('list_files', 'List files and directories at a given path.', {
265
+ path: z.string().optional().describe('Directory path to list (defaults to cwd)'),
266
+ }, async (args) => {
267
+ await this.ensureTools();
268
+ const targetPath = args.path || process.cwd();
269
+ const result = await this.textEditor.view(targetPath);
270
+ return this.formatResult(result);
271
+ });
272
+ // git
273
+ this.mcpServer.tool('git', 'Execute git operations: status, diff, log, add, commit, branch, checkout.', {
274
+ subcommand: z.enum(['status', 'diff', 'log', 'add', 'commit', 'branch', 'checkout'])
275
+ .describe('Git subcommand to run'),
276
+ args: z.object({
277
+ files: z.array(z.string()).optional().describe('Files for add/diff'),
278
+ message: z.string().optional().describe('Commit message'),
279
+ staged: z.boolean().optional().describe('Show staged changes (for diff)'),
280
+ count: z.number().optional().describe('Number of log entries'),
281
+ branch_name: z.string().optional().describe('Branch name for branch/checkout'),
282
+ }).optional().describe('Arguments for the git subcommand'),
283
+ }, async (args) => {
284
+ await this.ensureTools();
285
+ const git = this.gitTool;
286
+ const subArgs = args.args || {};
287
+ try {
288
+ switch (args.subcommand) {
289
+ case 'status': {
290
+ const status = await git.getStatus();
291
+ const lines = [
292
+ `Branch: ${status.branch}`,
293
+ `Ahead: ${status.ahead}, Behind: ${status.behind}`,
294
+ ];
295
+ if (status.staged.length > 0)
296
+ lines.push(`Staged:\n ${status.staged.join('\n ')}`);
297
+ if (status.unstaged.length > 0)
298
+ lines.push(`Unstaged:\n ${status.unstaged.join('\n ')}`);
299
+ if (status.untracked.length > 0)
300
+ lines.push(`Untracked:\n ${status.untracked.join('\n ')}`);
301
+ return { content: [{ type: 'text', text: lines.join('\n') }] };
302
+ }
303
+ case 'diff': {
304
+ const diff = await git.getDiff(subArgs.staged ?? false);
305
+ return { content: [{ type: 'text', text: diff || 'No changes' }] };
306
+ }
307
+ case 'log': {
308
+ const log = await git.getLog(subArgs.count ?? 10);
309
+ return { content: [{ type: 'text', text: log || 'No commits' }] };
310
+ }
311
+ case 'add': {
312
+ const files = subArgs.files;
313
+ const result = await git.add(files && files.length > 0 ? files : 'all');
314
+ return this.formatResult(result);
315
+ }
316
+ case 'commit': {
317
+ if (!subArgs.message) {
318
+ return { content: [{ type: 'text', text: 'Error: commit message is required' }], isError: true };
319
+ }
320
+ const result = await git.commit(subArgs.message);
321
+ return this.formatResult(result);
322
+ }
323
+ case 'branch': {
324
+ // List branches or create one
325
+ const result = await git.branch(subArgs.branch_name);
326
+ return this.formatResult(result);
327
+ }
328
+ case 'checkout': {
329
+ if (!subArgs.branch_name) {
330
+ return { content: [{ type: 'text', text: 'Error: branch_name is required for checkout' }], isError: true };
331
+ }
332
+ const result = await git.checkout(subArgs.branch_name);
333
+ return this.formatResult(result);
334
+ }
335
+ default:
336
+ return { content: [{ type: 'text', text: `Unknown git subcommand: ${args.subcommand}` }], isError: true };
337
+ }
338
+ }
339
+ catch (error) {
340
+ const message = error instanceof Error ? error.message : String(error);
341
+ return { content: [{ type: 'text', text: `Git error: ${message}` }], isError: true };
342
+ }
343
+ });
344
+ }
345
+ /**
346
+ * Start the MCP server over stdio transport.
347
+ * This method blocks until the transport is closed.
348
+ */
349
+ async start() {
350
+ if (this.running) {
351
+ throw new Error('MCP server is already running');
352
+ }
353
+ this.transport = new StdioServerTransport();
354
+ await this.mcpServer.connect(this.transport);
355
+ this.running = true;
356
+ }
357
+ /**
358
+ * Stop the MCP server and close the transport.
359
+ */
360
+ async stop() {
361
+ if (!this.running)
362
+ return;
363
+ await this.mcpServer.close();
364
+ this.transport = null;
365
+ this.running = false;
366
+ }
367
+ /**
368
+ * Whether the server is currently running.
369
+ */
370
+ isRunning() {
371
+ return this.running;
372
+ }
373
+ }
374
+ //# sourceMappingURL=mcp-server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/mcp/mcp-server.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
1
+ /**
2
+ * Auto-Memory System
3
+ *
4
+ * Automatically extracts and stores memories from agent interactions.
5
+ * Supports three scopes: user, project, and local.
6
+ * Memories are stored in MEMORY.md files at scope-appropriate paths.
7
+ */
8
+ export type MemoryScope = 'user' | 'project' | 'local';
9
+ export interface MemoryEntry {
10
+ key: string;
11
+ value: string;
12
+ scope: MemoryScope;
13
+ timestamp: number;
14
+ source: 'agent' | 'user';
15
+ }
16
+ export declare class AutoMemoryManager {
17
+ private projectDir;
18
+ private memories;
19
+ constructor(projectDir?: string);
20
+ /**
21
+ * Analyze context and response for potential memories to extract
22
+ */
23
+ analyzeForMemories(context: string, response: string): MemoryEntry[];
24
+ /**
25
+ * Write a memory entry to the appropriate MEMORY.md file
26
+ */
27
+ writeMemory(key: string, value: string, scope?: MemoryScope): void;
28
+ /**
29
+ * Search all scoped memory files for relevant entries
30
+ */
31
+ recallMemories(context: string): MemoryEntry[];
32
+ /**
33
+ * Get the file path for a given memory scope
34
+ */
35
+ getMemoryPath(scope: MemoryScope): string;
36
+ /**
37
+ * List all memories, optionally filtered by scope
38
+ */
39
+ listMemories(scope?: MemoryScope): MemoryEntry[];
40
+ /**
41
+ * Delete a memory entry by key and optional scope
42
+ */
43
+ deleteMemory(key: string, scope?: MemoryScope): boolean;
44
+ /**
45
+ * Get a summary of recalled memories count
46
+ */
47
+ getRecallSummary(): string;
48
+ private loadAllMemories;
49
+ private loadMemoryFile;
50
+ private saveMemoryFile;
51
+ }
52
+ export declare function getAutoMemoryManager(projectDir?: string): AutoMemoryManager;
53
+ export declare function resetAutoMemory(): void;