@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,154 @@
1
+ /**
2
+ * @-file Autocomplete
3
+ *
4
+ * Provides file path completion for @-references in user input,
5
+ * supporting line range syntax and .gitignore filtering.
6
+ */
7
+ import * as fs from 'fs';
8
+ import * as path from 'path';
9
+ import { logger } from '../utils/logger.js';
10
+ const MAX_RESULTS = 20;
11
+ /**
12
+ * FileAutocomplete provides completion suggestions for @-file references.
13
+ */
14
+ export class FileAutocomplete {
15
+ gitignorePatterns = [];
16
+ /**
17
+ * Parse a .gitignore file and extract patterns.
18
+ */
19
+ loadGitignore(workDir) {
20
+ this.gitignorePatterns = [];
21
+ const gitignorePath = path.join(workDir, '.gitignore');
22
+ try {
23
+ const content = fs.readFileSync(gitignorePath, 'utf-8');
24
+ this.gitignorePatterns = content
25
+ .split('\n')
26
+ .map((line) => line.trim())
27
+ .filter((line) => line && !line.startsWith('#'));
28
+ }
29
+ catch {
30
+ // No .gitignore or unreadable
31
+ }
32
+ }
33
+ /**
34
+ * Check if a relative path matches any gitignore pattern.
35
+ */
36
+ isIgnored(relativePath) {
37
+ for (const pattern of this.gitignorePatterns) {
38
+ const cleanPattern = pattern.replace(/\/$/, '');
39
+ // Simple matching: exact name match or directory prefix
40
+ const basename = path.basename(relativePath);
41
+ if (basename === cleanPattern)
42
+ return true;
43
+ if (relativePath.startsWith(cleanPattern + '/'))
44
+ return true;
45
+ if (relativePath === cleanPattern)
46
+ return true;
47
+ // Glob-style: pattern with * (simple wildcard)
48
+ if (cleanPattern.includes('*')) {
49
+ const regex = new RegExp('^' + cleanPattern.replace(/\./g, '\\.').replace(/\*/g, '.*') + '$');
50
+ if (regex.test(basename) || regex.test(relativePath))
51
+ return true;
52
+ }
53
+ }
54
+ return false;
55
+ }
56
+ /**
57
+ * Complete a partial path, returning matching files and directories.
58
+ */
59
+ complete(partial, workDir) {
60
+ this.loadGitignore(workDir);
61
+ // Strip line range suffix for path matching
62
+ const colonIdx = partial.indexOf(':');
63
+ let pathPart = partial;
64
+ let lineRange;
65
+ if (colonIdx !== -1) {
66
+ pathPart = partial.slice(0, colonIdx);
67
+ lineRange = partial.slice(colonIdx + 1);
68
+ }
69
+ const fullPath = path.resolve(workDir, pathPart);
70
+ const results = [];
71
+ // Determine directory to scan and prefix to match
72
+ let dirToScan;
73
+ let prefix;
74
+ try {
75
+ const stat = fs.statSync(fullPath);
76
+ if (stat.isDirectory()) {
77
+ dirToScan = fullPath;
78
+ prefix = '';
79
+ }
80
+ else {
81
+ dirToScan = path.dirname(fullPath);
82
+ prefix = path.basename(fullPath);
83
+ }
84
+ }
85
+ catch {
86
+ dirToScan = path.dirname(fullPath);
87
+ prefix = path.basename(fullPath);
88
+ }
89
+ try {
90
+ const entries = fs.readdirSync(dirToScan, { withFileTypes: true });
91
+ for (const entry of entries) {
92
+ if (results.length >= MAX_RESULTS)
93
+ break;
94
+ if (prefix && !entry.name.startsWith(prefix))
95
+ continue;
96
+ const entryRelative = path.relative(workDir, path.join(dirToScan, entry.name));
97
+ if (this.isIgnored(entryRelative))
98
+ continue;
99
+ const isDir = entry.isDirectory();
100
+ const displayPath = entryRelative + (isDir ? '/' : '');
101
+ results.push({
102
+ path: entryRelative,
103
+ display: displayPath + (lineRange ? ':' + lineRange : ''),
104
+ isDirectory: isDir,
105
+ lineRange,
106
+ });
107
+ }
108
+ }
109
+ catch {
110
+ logger.debug(`[FileAutocomplete] Cannot read directory: ${dirToScan}`);
111
+ }
112
+ return results;
113
+ }
114
+ /**
115
+ * Parse an @-reference string into a path and optional line range.
116
+ * Returns null if the input is not a valid @-reference.
117
+ */
118
+ parseAtReference(input) {
119
+ if (!input || !input.startsWith('@')) {
120
+ return null;
121
+ }
122
+ const ref = input.slice(1); // Remove @
123
+ if (!ref)
124
+ return null;
125
+ const colonIdx = ref.indexOf(':');
126
+ if (colonIdx === -1) {
127
+ return { path: ref };
128
+ }
129
+ const filePath = ref.slice(0, colonIdx);
130
+ const rangeStr = ref.slice(colonIdx + 1);
131
+ if (!filePath)
132
+ return null;
133
+ const rangeMatch = rangeStr.match(/^(\d+)(?:-(\d+))?$/);
134
+ if (!rangeMatch) {
135
+ // Colon but no valid range - still return path
136
+ return { path: filePath };
137
+ }
138
+ const lineStart = parseInt(rangeMatch[1], 10);
139
+ const lineEnd = rangeMatch[2] ? parseInt(rangeMatch[2], 10) : undefined;
140
+ return { path: filePath, lineStart, lineEnd };
141
+ }
142
+ }
143
+ // Singleton
144
+ let instance = null;
145
+ export function getFileAutocomplete() {
146
+ if (!instance) {
147
+ instance = new FileAutocomplete();
148
+ }
149
+ return instance;
150
+ }
151
+ export function resetFileAutocomplete() {
152
+ instance = null;
153
+ }
154
+ //# sourceMappingURL=file-autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-autocomplete.js","sourceRoot":"","sources":["../../src/input/file-autocomplete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Chrome Bridge
3
+ *
4
+ * Native Messaging API bridge for Chrome extension integration.
5
+ * Provides stubs for browser interaction (console, DOM, network, recording).
6
+ */
7
+ export interface ChromeBridgeConfig {
8
+ port: number;
9
+ extensionId?: string;
10
+ }
11
+ export interface DOMElementInfo {
12
+ tagName: string;
13
+ id?: string;
14
+ className?: string;
15
+ textContent?: string;
16
+ attributes: Record<string, string>;
17
+ children: number;
18
+ }
19
+ export interface NetworkRequest {
20
+ url: string;
21
+ method: string;
22
+ status: number;
23
+ type: string;
24
+ timestamp: number;
25
+ }
26
+ export interface RecordedAction {
27
+ type: 'click' | 'input' | 'navigation' | 'scroll';
28
+ target: string;
29
+ value?: string;
30
+ timestamp: number;
31
+ }
32
+ export declare class ChromeBridge {
33
+ private config;
34
+ private connected;
35
+ private recording;
36
+ private recordedActions;
37
+ private consoleErrors;
38
+ private networkRequests;
39
+ private constructor();
40
+ static getInstance(config?: Partial<ChromeBridgeConfig>): ChromeBridge;
41
+ static resetInstance(): void;
42
+ /**
43
+ * Establish connection to Chrome
44
+ */
45
+ connect(port?: number): Promise<boolean>;
46
+ /**
47
+ * Close connection
48
+ */
49
+ disconnect(): Promise<void>;
50
+ /**
51
+ * Check connection state
52
+ */
53
+ isConnected(): boolean;
54
+ /**
55
+ * Get captured console errors (stub)
56
+ */
57
+ getConsoleErrors(): Promise<string[]>;
58
+ /**
59
+ * Get DOM element info (stub)
60
+ */
61
+ getDOMState(selector: string): Promise<DOMElementInfo | null>;
62
+ /**
63
+ * Get captured network requests (stub)
64
+ */
65
+ getNetworkRequests(filter?: string): Promise<NetworkRequest[]>;
66
+ /**
67
+ * Execute JavaScript in browser (stub)
68
+ */
69
+ executeScript(script: string): Promise<unknown>;
70
+ /**
71
+ * Start recording user actions
72
+ */
73
+ startRecording(): Promise<void>;
74
+ /**
75
+ * Stop recording user actions
76
+ */
77
+ stopRecording(): Promise<void>;
78
+ /**
79
+ * Get recorded actions
80
+ */
81
+ getRecording(): RecordedAction[];
82
+ /**
83
+ * Check if currently recording
84
+ */
85
+ isRecording(): boolean;
86
+ /**
87
+ * Get config
88
+ */
89
+ getConfig(): ChromeBridgeConfig;
90
+ }
@@ -0,0 +1,151 @@
1
+ /**
2
+ * Chrome Bridge
3
+ *
4
+ * Native Messaging API bridge for Chrome extension integration.
5
+ * Provides stubs for browser interaction (console, DOM, network, recording).
6
+ */
7
+ import { logger } from '../utils/logger.js';
8
+ // ============================================================================
9
+ // ChromeBridge (Singleton)
10
+ // ============================================================================
11
+ let instance = null;
12
+ export class ChromeBridge {
13
+ config;
14
+ connected = false;
15
+ recording = false;
16
+ recordedActions = [];
17
+ consoleErrors = [];
18
+ networkRequests = [];
19
+ constructor(config) {
20
+ this.config = {
21
+ port: config?.port ?? 9222,
22
+ extensionId: config?.extensionId,
23
+ };
24
+ }
25
+ static getInstance(config) {
26
+ if (!instance) {
27
+ instance = new ChromeBridge(config);
28
+ }
29
+ return instance;
30
+ }
31
+ static resetInstance() {
32
+ if (instance) {
33
+ instance.connected = false;
34
+ instance.recording = false;
35
+ instance.recordedActions = [];
36
+ instance.consoleErrors = [];
37
+ instance.networkRequests = [];
38
+ }
39
+ instance = null;
40
+ }
41
+ /**
42
+ * Establish connection to Chrome
43
+ */
44
+ async connect(port) {
45
+ if (port !== undefined) {
46
+ this.config.port = port;
47
+ }
48
+ this.connected = true;
49
+ logger.debug(`Chrome bridge connected on port ${this.config.port}`);
50
+ return true;
51
+ }
52
+ /**
53
+ * Close connection
54
+ */
55
+ async disconnect() {
56
+ this.connected = false;
57
+ this.recording = false;
58
+ logger.debug('Chrome bridge disconnected');
59
+ }
60
+ /**
61
+ * Check connection state
62
+ */
63
+ isConnected() {
64
+ return this.connected;
65
+ }
66
+ /**
67
+ * Get captured console errors (stub)
68
+ */
69
+ async getConsoleErrors() {
70
+ if (!this.connected) {
71
+ throw new Error('Not connected to Chrome');
72
+ }
73
+ return [...this.consoleErrors];
74
+ }
75
+ /**
76
+ * Get DOM element info (stub)
77
+ */
78
+ async getDOMState(selector) {
79
+ if (!this.connected) {
80
+ throw new Error('Not connected to Chrome');
81
+ }
82
+ // Stub: return a mock element
83
+ return {
84
+ tagName: 'div',
85
+ id: selector.startsWith('#') ? selector.slice(1) : undefined,
86
+ className: selector.startsWith('.') ? selector.slice(1) : undefined,
87
+ textContent: '',
88
+ attributes: {},
89
+ children: 0,
90
+ };
91
+ }
92
+ /**
93
+ * Get captured network requests (stub)
94
+ */
95
+ async getNetworkRequests(filter) {
96
+ if (!this.connected) {
97
+ throw new Error('Not connected to Chrome');
98
+ }
99
+ if (filter) {
100
+ return this.networkRequests.filter(r => r.url.includes(filter));
101
+ }
102
+ return [...this.networkRequests];
103
+ }
104
+ /**
105
+ * Execute JavaScript in browser (stub)
106
+ */
107
+ async executeScript(script) {
108
+ if (!this.connected) {
109
+ throw new Error('Not connected to Chrome');
110
+ }
111
+ logger.debug(`Executing script: ${script.slice(0, 100)}`);
112
+ return undefined;
113
+ }
114
+ /**
115
+ * Start recording user actions
116
+ */
117
+ async startRecording() {
118
+ if (!this.connected) {
119
+ throw new Error('Not connected to Chrome');
120
+ }
121
+ this.recording = true;
122
+ this.recordedActions = [];
123
+ logger.debug('Started recording');
124
+ }
125
+ /**
126
+ * Stop recording user actions
127
+ */
128
+ async stopRecording() {
129
+ this.recording = false;
130
+ logger.debug('Stopped recording');
131
+ }
132
+ /**
133
+ * Get recorded actions
134
+ */
135
+ getRecording() {
136
+ return [...this.recordedActions];
137
+ }
138
+ /**
139
+ * Check if currently recording
140
+ */
141
+ isRecording() {
142
+ return this.recording;
143
+ }
144
+ /**
145
+ * Get config
146
+ */
147
+ getConfig() {
148
+ return { ...this.config };
149
+ }
150
+ }
151
+ //# sourceMappingURL=chrome-bridge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chrome-bridge.js","sourceRoot":"","sources":["../../src/integrations/chrome-bridge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * GitHub Action Runner
3
+ *
4
+ * Runs Code Buddy as a GitHub Action for PR review, issue triage, and implementation.
5
+ */
6
+ export interface GitHubActionConfig {
7
+ token: string;
8
+ event: 'pull_request' | 'issues' | 'push';
9
+ repo: string;
10
+ prNumber?: number;
11
+ issueNumber?: number;
12
+ mode: 'review' | 'triage' | 'implement';
13
+ }
14
+ export declare class GitHubActionRunner {
15
+ private config;
16
+ /**
17
+ * Parse GitHub event payload into config
18
+ */
19
+ parseEvent(eventPayload: Record<string, unknown>): GitHubActionConfig;
20
+ /**
21
+ * Generate a structured review comment for a PR diff
22
+ */
23
+ generateReviewComment(diff: string, files: string[]): string;
24
+ /**
25
+ * Generate suggested labels for issue triage
26
+ */
27
+ generateTriageLabel(title: string, body: string): string[];
28
+ /**
29
+ * Format result for GitHub Actions output ($GITHUB_OUTPUT)
30
+ */
31
+ formatActionOutput(result: Record<string, unknown>): string;
32
+ /**
33
+ * Generate the action.yml content
34
+ */
35
+ createActionYaml(): string;
36
+ /**
37
+ * Get current config
38
+ */
39
+ getConfig(): GitHubActionConfig | null;
40
+ }
@@ -0,0 +1,163 @@
1
+ /**
2
+ * GitHub Action Runner
3
+ *
4
+ * Runs Code Buddy as a GitHub Action for PR review, issue triage, and implementation.
5
+ */
6
+ import { logger } from '../utils/logger.js';
7
+ // ============================================================================
8
+ // GitHubActionRunner
9
+ // ============================================================================
10
+ export class GitHubActionRunner {
11
+ config = null;
12
+ /**
13
+ * Parse GitHub event payload into config
14
+ */
15
+ parseEvent(eventPayload) {
16
+ const action = eventPayload.action;
17
+ const repository = eventPayload.repository;
18
+ const pullRequest = eventPayload.pull_request;
19
+ const issue = eventPayload.issue;
20
+ const repo = repository?.full_name || '';
21
+ const token = process.env.GITHUB_TOKEN || process.env.INPUT_ANTHROPIC_API_KEY || '';
22
+ let event = 'push';
23
+ let mode = 'implement';
24
+ let prNumber;
25
+ let issueNumber;
26
+ if (pullRequest) {
27
+ event = 'pull_request';
28
+ prNumber = pullRequest.number;
29
+ mode = 'review';
30
+ }
31
+ else if (issue) {
32
+ event = 'issues';
33
+ issueNumber = issue.number;
34
+ mode = 'triage';
35
+ }
36
+ else {
37
+ event = 'push';
38
+ mode = 'implement';
39
+ }
40
+ // Override mode from env if set
41
+ const envMode = process.env.INPUT_MODE;
42
+ if (envMode && ['review', 'triage', 'implement'].includes(envMode)) {
43
+ mode = envMode;
44
+ }
45
+ this.config = { token, event, repo, prNumber, issueNumber, mode };
46
+ logger.debug(`Parsed GitHub event: ${event}, mode: ${mode}, repo: ${repo}`);
47
+ return this.config;
48
+ }
49
+ /**
50
+ * Generate a structured review comment for a PR diff
51
+ */
52
+ generateReviewComment(diff, files) {
53
+ const fileList = files.map(f => `- \`${f}\``).join('\n');
54
+ const diffLines = diff.split('\n');
55
+ const additions = diffLines.filter(l => l.startsWith('+')).length;
56
+ const deletions = diffLines.filter(l => l.startsWith('-')).length;
57
+ const comment = [
58
+ '## Code Buddy AI Review',
59
+ '',
60
+ `**Files changed (${files.length}):**`,
61
+ fileList,
62
+ '',
63
+ `**Changes:** +${additions} / -${deletions} lines`,
64
+ '',
65
+ '### Summary',
66
+ '',
67
+ 'AI review of the changes in this pull request.',
68
+ '',
69
+ '### Suggestions',
70
+ '',
71
+ 'No critical issues found.',
72
+ '',
73
+ '---',
74
+ '*Generated by Code Buddy GitHub Action*',
75
+ ].join('\n');
76
+ return comment;
77
+ }
78
+ /**
79
+ * Generate suggested labels for issue triage
80
+ */
81
+ generateTriageLabel(title, body) {
82
+ const text = `${title} ${body}`.toLowerCase();
83
+ const labels = [];
84
+ if (text.includes('bug') || text.includes('error') || text.includes('crash') || text.includes('fix')) {
85
+ labels.push('bug');
86
+ }
87
+ if (text.includes('feature') || text.includes('request') || text.includes('enhancement')) {
88
+ labels.push('enhancement');
89
+ }
90
+ if (text.includes('doc') || text.includes('documentation') || text.includes('readme')) {
91
+ labels.push('documentation');
92
+ }
93
+ if (text.includes('security') || text.includes('vulnerability') || text.includes('cve')) {
94
+ labels.push('security');
95
+ }
96
+ if (text.includes('performance') || text.includes('slow') || text.includes('optimize')) {
97
+ labels.push('performance');
98
+ }
99
+ if (text.includes('question') || text.includes('help') || text.includes('how to')) {
100
+ labels.push('question');
101
+ }
102
+ if (labels.length === 0) {
103
+ labels.push('needs-triage');
104
+ }
105
+ return labels;
106
+ }
107
+ /**
108
+ * Format result for GitHub Actions output ($GITHUB_OUTPUT)
109
+ */
110
+ formatActionOutput(result) {
111
+ const lines = [];
112
+ for (const [key, value] of Object.entries(result)) {
113
+ const stringValue = typeof value === 'string' ? value : JSON.stringify(value);
114
+ // Handle multiline values with delimiter
115
+ if (stringValue.includes('\n')) {
116
+ lines.push(`${key}<<EOF`);
117
+ lines.push(stringValue);
118
+ lines.push('EOF');
119
+ }
120
+ else {
121
+ lines.push(`${key}=${stringValue}`);
122
+ }
123
+ }
124
+ return lines.join('\n');
125
+ }
126
+ /**
127
+ * Generate the action.yml content
128
+ */
129
+ createActionYaml() {
130
+ return `name: 'Code Buddy AI'
131
+ description: 'AI-powered code review, issue triage, and implementation'
132
+ inputs:
133
+ anthropic_api_key:
134
+ description: 'API key for the AI provider'
135
+ required: true
136
+ model:
137
+ description: 'Model to use for AI tasks'
138
+ required: false
139
+ default: 'grok-3-mini'
140
+ max_turns:
141
+ description: 'Maximum number of agent turns'
142
+ required: false
143
+ default: '10'
144
+ mode:
145
+ description: 'Operation mode: review, triage, or implement'
146
+ required: false
147
+ default: 'review'
148
+ runs:
149
+ using: 'node20'
150
+ main: 'dist/action/index.js'
151
+ branding:
152
+ icon: 'cpu'
153
+ color: 'blue'
154
+ `;
155
+ }
156
+ /**
157
+ * Get current config
158
+ */
159
+ getConfig() {
160
+ return this.config;
161
+ }
162
+ }
163
+ //# sourceMappingURL=github-action-runner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"github-action-runner.js","sourceRoot":"","sources":["../../src/integrations/github-action-runner.ts"],"names":[],"mappings":"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"}
@@ -202,7 +202,7 @@ const WORKFLOW_TEMPLATES = {
202
202
  steps: [
203
203
  { uses: 'actions/checkout@v4', with: { 'fetch-depth': 0 } },
204
204
  {
205
- name: 'Install Grok CLI',
205
+ name: 'Install Code Buddy',
206
206
  run: 'npm install -g code-buddy',
207
207
  },
208
208
  {