@djibrilm/lazy-review 0.0.1

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 (264) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +95 -0
  3. package/dist/bin.d.ts +3 -0
  4. package/dist/bin.d.ts.map +1 -0
  5. package/dist/bin.js +17 -0
  6. package/dist/bin.js.map +1 -0
  7. package/dist/client/assets/geist-cyrillic-ext-wght-normal-DjL33-gN.woff2 +0 -0
  8. package/dist/client/assets/geist-cyrillic-wght-normal-BEAKL7Jp.woff2 +0 -0
  9. package/dist/client/assets/geist-latin-ext-wght-normal-DC-KSUi6.woff2 +0 -0
  10. package/dist/client/assets/geist-latin-wght-normal-BgDaEnEv.woff2 +0 -0
  11. package/dist/client/assets/geist-vietnamese-wght-normal-6IgcOCM7.woff2 +0 -0
  12. package/dist/client/assets/index-4oL_AGyI.css +1 -0
  13. package/dist/client/assets/index-CJtKCyBg.js +848 -0
  14. package/dist/client/favicon.png +0 -0
  15. package/dist/client/favicon.svg +1 -0
  16. package/dist/client/icons.svg +24 -0
  17. package/dist/client/index.html +17 -0
  18. package/dist/client/resources/images/logo.png +0 -0
  19. package/dist/client/resources/images/openai.png +0 -0
  20. package/dist/constants.d.ts +3 -0
  21. package/dist/constants.d.ts.map +1 -0
  22. package/dist/constants.js +3 -0
  23. package/dist/constants.js.map +1 -0
  24. package/dist/dev.d.ts +2 -0
  25. package/dist/dev.d.ts.map +1 -0
  26. package/dist/dev.js +10 -0
  27. package/dist/dev.js.map +1 -0
  28. package/dist/modules/ai-agent/agent-context-manager.d.ts +57 -0
  29. package/dist/modules/ai-agent/agent-context-manager.d.ts.map +1 -0
  30. package/dist/modules/ai-agent/agent-context-manager.js +159 -0
  31. package/dist/modules/ai-agent/agent-context-manager.js.map +1 -0
  32. package/dist/modules/ai-agent/ai-agent.module.d.ts +17 -0
  33. package/dist/modules/ai-agent/ai-agent.module.d.ts.map +1 -0
  34. package/dist/modules/ai-agent/ai-agent.module.js +24 -0
  35. package/dist/modules/ai-agent/ai-agent.module.js.map +1 -0
  36. package/dist/modules/ai-agent/ai-agent.utils.d.ts +10 -0
  37. package/dist/modules/ai-agent/ai-agent.utils.d.ts.map +1 -0
  38. package/dist/modules/ai-agent/ai-agent.utils.js +389 -0
  39. package/dist/modules/ai-agent/ai-agent.utils.js.map +1 -0
  40. package/dist/modules/ai-agent/base.agent.d.ts +26 -0
  41. package/dist/modules/ai-agent/base.agent.d.ts.map +1 -0
  42. package/dist/modules/ai-agent/base.agent.js +101 -0
  43. package/dist/modules/ai-agent/base.agent.js.map +1 -0
  44. package/dist/modules/ai-agent/chat.agent.d.ts +35 -0
  45. package/dist/modules/ai-agent/chat.agent.d.ts.map +1 -0
  46. package/dist/modules/ai-agent/chat.agent.js +590 -0
  47. package/dist/modules/ai-agent/chat.agent.js.map +1 -0
  48. package/dist/modules/ai-agent/code-base-indexer.agent.d.ts +13 -0
  49. package/dist/modules/ai-agent/code-base-indexer.agent.d.ts.map +1 -0
  50. package/dist/modules/ai-agent/code-base-indexer.agent.js +506 -0
  51. package/dist/modules/ai-agent/code-base-indexer.agent.js.map +1 -0
  52. package/dist/modules/ai-agent/codebase-scanner.d.ts +37 -0
  53. package/dist/modules/ai-agent/codebase-scanner.d.ts.map +1 -0
  54. package/dist/modules/ai-agent/codebase-scanner.js +260 -0
  55. package/dist/modules/ai-agent/codebase-scanner.js.map +1 -0
  56. package/dist/modules/ai-agent/model-loader.d.ts +7 -0
  57. package/dist/modules/ai-agent/model-loader.d.ts.map +1 -0
  58. package/dist/modules/ai-agent/model-loader.js +129 -0
  59. package/dist/modules/ai-agent/model-loader.js.map +1 -0
  60. package/dist/modules/ai-agent/orientation-loader.d.ts +2 -0
  61. package/dist/modules/ai-agent/orientation-loader.d.ts.map +1 -0
  62. package/dist/modules/ai-agent/orientation-loader.js +70 -0
  63. package/dist/modules/ai-agent/orientation-loader.js.map +1 -0
  64. package/dist/modules/ai-agent/pr-review-session.manager.d.ts +36 -0
  65. package/dist/modules/ai-agent/pr-review-session.manager.d.ts.map +1 -0
  66. package/dist/modules/ai-agent/pr-review-session.manager.js +106 -0
  67. package/dist/modules/ai-agent/pr-review-session.manager.js.map +1 -0
  68. package/dist/modules/ai-agent/pr-review.agent.d.ts +22 -0
  69. package/dist/modules/ai-agent/pr-review.agent.d.ts.map +1 -0
  70. package/dist/modules/ai-agent/pr-review.agent.js +269 -0
  71. package/dist/modules/ai-agent/pr-review.agent.js.map +1 -0
  72. package/dist/modules/ai-agent/research-loop.d.ts +3 -0
  73. package/dist/modules/ai-agent/research-loop.d.ts.map +1 -0
  74. package/dist/modules/ai-agent/research-loop.js +691 -0
  75. package/dist/modules/ai-agent/research-loop.js.map +1 -0
  76. package/dist/modules/ai-agent/review-pipeline/agent-loop.d.ts +36 -0
  77. package/dist/modules/ai-agent/review-pipeline/agent-loop.d.ts.map +1 -0
  78. package/dist/modules/ai-agent/review-pipeline/agent-loop.js +178 -0
  79. package/dist/modules/ai-agent/review-pipeline/agent-loop.js.map +1 -0
  80. package/dist/modules/ai-agent/review-pipeline/change-analyzer.d.ts +8 -0
  81. package/dist/modules/ai-agent/review-pipeline/change-analyzer.d.ts.map +1 -0
  82. package/dist/modules/ai-agent/review-pipeline/change-analyzer.js +93 -0
  83. package/dist/modules/ai-agent/review-pipeline/change-analyzer.js.map +1 -0
  84. package/dist/modules/ai-agent/review-pipeline/finding-ranker.d.ts +47 -0
  85. package/dist/modules/ai-agent/review-pipeline/finding-ranker.d.ts.map +1 -0
  86. package/dist/modules/ai-agent/review-pipeline/finding-ranker.js +91 -0
  87. package/dist/modules/ai-agent/review-pipeline/finding-ranker.js.map +1 -0
  88. package/dist/modules/ai-agent/review-pipeline/finding-verifier.d.ts +29 -0
  89. package/dist/modules/ai-agent/review-pipeline/finding-verifier.d.ts.map +1 -0
  90. package/dist/modules/ai-agent/review-pipeline/finding-verifier.js +130 -0
  91. package/dist/modules/ai-agent/review-pipeline/finding-verifier.js.map +1 -0
  92. package/dist/modules/ai-agent/review-pipeline/repository-explorer.d.ts +21 -0
  93. package/dist/modules/ai-agent/review-pipeline/repository-explorer.d.ts.map +1 -0
  94. package/dist/modules/ai-agent/review-pipeline/repository-explorer.js +247 -0
  95. package/dist/modules/ai-agent/review-pipeline/repository-explorer.js.map +1 -0
  96. package/dist/modules/ai-agent/review-pipeline/review-controller.d.ts +22 -0
  97. package/dist/modules/ai-agent/review-pipeline/review-controller.d.ts.map +1 -0
  98. package/dist/modules/ai-agent/review-pipeline/review-controller.js +102 -0
  99. package/dist/modules/ai-agent/review-pipeline/review-controller.js.map +1 -0
  100. package/dist/modules/ai-agent/review-pipeline/review-writer.d.ts +4 -0
  101. package/dist/modules/ai-agent/review-pipeline/review-writer.d.ts.map +1 -0
  102. package/dist/modules/ai-agent/review-pipeline/review-writer.js +52 -0
  103. package/dist/modules/ai-agent/review-pipeline/review-writer.js.map +1 -0
  104. package/dist/modules/ai-agent/review-pipeline/secret-scanner.d.ts +25 -0
  105. package/dist/modules/ai-agent/review-pipeline/secret-scanner.d.ts.map +1 -0
  106. package/dist/modules/ai-agent/review-pipeline/secret-scanner.js +159 -0
  107. package/dist/modules/ai-agent/review-pipeline/secret-scanner.js.map +1 -0
  108. package/dist/modules/ai-agent/review-pipeline/specialist-reviewer.d.ts +9 -0
  109. package/dist/modules/ai-agent/review-pipeline/specialist-reviewer.d.ts.map +1 -0
  110. package/dist/modules/ai-agent/review-pipeline/specialist-reviewer.js +114 -0
  111. package/dist/modules/ai-agent/review-pipeline/specialist-reviewer.js.map +1 -0
  112. package/dist/modules/ai-agent/review-pipeline/types.d.ts +53 -0
  113. package/dist/modules/ai-agent/review-pipeline/types.d.ts.map +1 -0
  114. package/dist/modules/ai-agent/review-pipeline/types.js +45 -0
  115. package/dist/modules/ai-agent/review-pipeline/types.js.map +1 -0
  116. package/dist/modules/ai-agent/tool-executor.d.ts +37 -0
  117. package/dist/modules/ai-agent/tool-executor.d.ts.map +1 -0
  118. package/dist/modules/ai-agent/tool-executor.js +199 -0
  119. package/dist/modules/ai-agent/tool-executor.js.map +1 -0
  120. package/dist/modules/ai-agent/tool-types.d.ts +72 -0
  121. package/dist/modules/ai-agent/tool-types.d.ts.map +1 -0
  122. package/dist/modules/ai-agent/tool-types.js +2 -0
  123. package/dist/modules/ai-agent/tool-types.js.map +1 -0
  124. package/dist/modules/ai-agent/tools/fs-tools.d.ts +54 -0
  125. package/dist/modules/ai-agent/tools/fs-tools.d.ts.map +1 -0
  126. package/dist/modules/ai-agent/tools/fs-tools.js +237 -0
  127. package/dist/modules/ai-agent/tools/fs-tools.js.map +1 -0
  128. package/dist/modules/ai-agent/tools/git-tools.d.ts +322 -0
  129. package/dist/modules/ai-agent/tools/git-tools.d.ts.map +1 -0
  130. package/dist/modules/ai-agent/tools/git-tools.js +557 -0
  131. package/dist/modules/ai-agent/tools/git-tools.js.map +1 -0
  132. package/dist/modules/ai-agent/tools/pr-chat-tools.d.ts +15 -0
  133. package/dist/modules/ai-agent/tools/pr-chat-tools.d.ts.map +1 -0
  134. package/dist/modules/ai-agent/tools/pr-chat-tools.js +232 -0
  135. package/dist/modules/ai-agent/tools/pr-chat-tools.js.map +1 -0
  136. package/dist/modules/database/database.module.d.ts +10 -0
  137. package/dist/modules/database/database.module.d.ts.map +1 -0
  138. package/dist/modules/database/database.module.js +36 -0
  139. package/dist/modules/database/database.module.js.map +1 -0
  140. package/dist/modules/database/vector-database.service.d.ts +27 -0
  141. package/dist/modules/database/vector-database.service.d.ts.map +1 -0
  142. package/dist/modules/database/vector-database.service.js +170 -0
  143. package/dist/modules/database/vector-database.service.js.map +1 -0
  144. package/dist/modules/github/github.module.d.ts +964 -0
  145. package/dist/modules/github/github.module.d.ts.map +1 -0
  146. package/dist/modules/github/github.module.js +316 -0
  147. package/dist/modules/github/github.module.js.map +1 -0
  148. package/dist/modules/main.module.d.ts +20 -0
  149. package/dist/modules/main.module.d.ts.map +1 -0
  150. package/dist/modules/main.module.js +59 -0
  151. package/dist/modules/main.module.js.map +1 -0
  152. package/dist/modules/qvac/qvac.module.d.ts +28 -0
  153. package/dist/modules/qvac/qvac.module.d.ts.map +1 -0
  154. package/dist/modules/qvac/qvac.module.js +146 -0
  155. package/dist/modules/qvac/qvac.module.js.map +1 -0
  156. package/dist/modules/server/dtos/create-project.dto.d.ts +9 -0
  157. package/dist/modules/server/dtos/create-project.dto.d.ts.map +1 -0
  158. package/dist/modules/server/dtos/create-project.dto.js +2 -0
  159. package/dist/modules/server/dtos/create-project.dto.js.map +1 -0
  160. package/dist/modules/server/entities/agent-task.entity.d.ts +16 -0
  161. package/dist/modules/server/entities/agent-task.entity.d.ts.map +1 -0
  162. package/dist/modules/server/entities/agent-task.entity.js +72 -0
  163. package/dist/modules/server/entities/agent-task.entity.js.map +1 -0
  164. package/dist/modules/server/entities/ai-provider.entity.d.ts +11 -0
  165. package/dist/modules/server/entities/ai-provider.entity.d.ts.map +1 -0
  166. package/dist/modules/server/entities/ai-provider.entity.js +47 -0
  167. package/dist/modules/server/entities/ai-provider.entity.js.map +1 -0
  168. package/dist/modules/server/entities/deployment-plan-approval.entity.d.ts +10 -0
  169. package/dist/modules/server/entities/deployment-plan-approval.entity.d.ts.map +1 -0
  170. package/dist/modules/server/entities/deployment-plan-approval.entity.js +42 -0
  171. package/dist/modules/server/entities/deployment-plan-approval.entity.js.map +1 -0
  172. package/dist/modules/server/entities/deployment-plan-artifact.entity.d.ts +10 -0
  173. package/dist/modules/server/entities/deployment-plan-artifact.entity.d.ts.map +1 -0
  174. package/dist/modules/server/entities/deployment-plan-artifact.entity.js +42 -0
  175. package/dist/modules/server/entities/deployment-plan-artifact.entity.js.map +1 -0
  176. package/dist/modules/server/entities/deployment-plan-feedback.entity.d.ts +9 -0
  177. package/dist/modules/server/entities/deployment-plan-feedback.entity.d.ts.map +1 -0
  178. package/dist/modules/server/entities/deployment-plan-feedback.entity.js +37 -0
  179. package/dist/modules/server/entities/deployment-plan-feedback.entity.js.map +1 -0
  180. package/dist/modules/server/entities/deployment-plan-revision.entity.d.ts +11 -0
  181. package/dist/modules/server/entities/deployment-plan-revision.entity.d.ts.map +1 -0
  182. package/dist/modules/server/entities/deployment-plan-revision.entity.js +47 -0
  183. package/dist/modules/server/entities/deployment-plan-revision.entity.js.map +1 -0
  184. package/dist/modules/server/entities/deployment-plan.entity.d.ts +13 -0
  185. package/dist/modules/server/entities/deployment-plan.entity.d.ts.map +1 -0
  186. package/dist/modules/server/entities/deployment-plan.entity.js +58 -0
  187. package/dist/modules/server/entities/deployment-plan.entity.js.map +1 -0
  188. package/dist/modules/server/entities/project.entity.d.ts +26 -0
  189. package/dist/modules/server/entities/project.entity.d.ts.map +1 -0
  190. package/dist/modules/server/entities/project.entity.js +122 -0
  191. package/dist/modules/server/entities/project.entity.js.map +1 -0
  192. package/dist/modules/server/entities/settings.entity.d.ts +12 -0
  193. package/dist/modules/server/entities/settings.entity.d.ts.map +1 -0
  194. package/dist/modules/server/entities/settings.entity.js +62 -0
  195. package/dist/modules/server/entities/settings.entity.js.map +1 -0
  196. package/dist/modules/server/entities/terminal-log.entity.d.ts +10 -0
  197. package/dist/modules/server/entities/terminal-log.entity.d.ts.map +1 -0
  198. package/dist/modules/server/entities/terminal-log.entity.js +42 -0
  199. package/dist/modules/server/entities/terminal-log.entity.js.map +1 -0
  200. package/dist/modules/server/middleware/auth.middleware.d.ts +8 -0
  201. package/dist/modules/server/middleware/auth.middleware.d.ts.map +1 -0
  202. package/dist/modules/server/middleware/auth.middleware.js +26 -0
  203. package/dist/modules/server/middleware/auth.middleware.js.map +1 -0
  204. package/dist/modules/server/routes/auth.routes.d.ts +13 -0
  205. package/dist/modules/server/routes/auth.routes.d.ts.map +1 -0
  206. package/dist/modules/server/routes/auth.routes.js +59 -0
  207. package/dist/modules/server/routes/auth.routes.js.map +1 -0
  208. package/dist/modules/server/routes/github.routes.d.ts +14 -0
  209. package/dist/modules/server/routes/github.routes.d.ts.map +1 -0
  210. package/dist/modules/server/routes/github.routes.js +124 -0
  211. package/dist/modules/server/routes/github.routes.js.map +1 -0
  212. package/dist/modules/server/routes/project.routes.d.ts +11 -0
  213. package/dist/modules/server/routes/project.routes.d.ts.map +1 -0
  214. package/dist/modules/server/routes/project.routes.js +78 -0
  215. package/dist/modules/server/routes/project.routes.js.map +1 -0
  216. package/dist/modules/server/routes/qvac.routes.d.ts +11 -0
  217. package/dist/modules/server/routes/qvac.routes.d.ts.map +1 -0
  218. package/dist/modules/server/routes/qvac.routes.js +24 -0
  219. package/dist/modules/server/routes/qvac.routes.js.map +1 -0
  220. package/dist/modules/server/routes/routes.d.ts +20 -0
  221. package/dist/modules/server/routes/routes.d.ts.map +1 -0
  222. package/dist/modules/server/routes/routes.js +35 -0
  223. package/dist/modules/server/routes/routes.js.map +1 -0
  224. package/dist/modules/server/routes/settings.controller.d.ts +14 -0
  225. package/dist/modules/server/routes/settings.controller.d.ts.map +1 -0
  226. package/dist/modules/server/routes/settings.controller.js +65 -0
  227. package/dist/modules/server/routes/settings.controller.js.map +1 -0
  228. package/dist/modules/server/server.module.d.ts +19 -0
  229. package/dist/modules/server/server.module.d.ts.map +1 -0
  230. package/dist/modules/server/server.module.js +63 -0
  231. package/dist/modules/server/server.module.js.map +1 -0
  232. package/dist/modules/server/services/auth.services.d.ts +19 -0
  233. package/dist/modules/server/services/auth.services.d.ts.map +1 -0
  234. package/dist/modules/server/services/auth.services.js +87 -0
  235. package/dist/modules/server/services/auth.services.js.map +1 -0
  236. package/dist/modules/server/services/deployment-plan.services.d.ts +6 -0
  237. package/dist/modules/server/services/deployment-plan.services.d.ts.map +1 -0
  238. package/dist/modules/server/services/deployment-plan.services.js +8 -0
  239. package/dist/modules/server/services/deployment-plan.services.js.map +1 -0
  240. package/dist/modules/server/services/github.services.d.ts +939 -0
  241. package/dist/modules/server/services/github.services.d.ts.map +1 -0
  242. package/dist/modules/server/services/github.services.js +46 -0
  243. package/dist/modules/server/services/github.services.js.map +1 -0
  244. package/dist/modules/server/services/project.services.d.ts +41 -0
  245. package/dist/modules/server/services/project.services.d.ts.map +1 -0
  246. package/dist/modules/server/services/project.services.js +360 -0
  247. package/dist/modules/server/services/project.services.js.map +1 -0
  248. package/dist/modules/server/services/qvac.services.d.ts +10 -0
  249. package/dist/modules/server/services/qvac.services.d.ts.map +1 -0
  250. package/dist/modules/server/services/qvac.services.js +58 -0
  251. package/dist/modules/server/services/qvac.services.js.map +1 -0
  252. package/dist/modules/server/services/settings.service.d.ts +60 -0
  253. package/dist/modules/server/services/settings.service.d.ts.map +1 -0
  254. package/dist/modules/server/services/settings.service.js +125 -0
  255. package/dist/modules/server/services/settings.service.js.map +1 -0
  256. package/dist/modules/socket-gateway/interfaces/project-creation-log.interface.d.ts +14 -0
  257. package/dist/modules/socket-gateway/interfaces/project-creation-log.interface.d.ts.map +1 -0
  258. package/dist/modules/socket-gateway/interfaces/project-creation-log.interface.js +2 -0
  259. package/dist/modules/socket-gateway/interfaces/project-creation-log.interface.js.map +1 -0
  260. package/dist/modules/socket-gateway/socket-gateway.module.d.ts +28 -0
  261. package/dist/modules/socket-gateway/socket-gateway.module.d.ts.map +1 -0
  262. package/dist/modules/socket-gateway/socket-gateway.module.js +92 -0
  263. package/dist/modules/socket-gateway/socket-gateway.module.js.map +1 -0
  264. package/package.json +95 -0
@@ -0,0 +1,557 @@
1
+ import { z } from 'zod';
2
+ import * as path from 'path';
3
+ import * as fs from 'fs/promises';
4
+ import { simpleGit } from 'simple-git';
5
+ /**
6
+ * These are LOCAL repository tools only.
7
+ *
8
+ * GitHub API mutations such as leave_pr_comment belong in ChatAgent because
9
+ * they depend on the current PR metadata and the confirmation/socket services.
10
+ */
11
+ export function createGitTools(projectRootPath) {
12
+ const absoluteRoot = path.resolve(projectRootPath);
13
+ const git = simpleGit(absoluteRoot);
14
+ const resolveInsideProject = (relativePath) => {
15
+ const resolved = path.resolve(absoluteRoot, relativePath);
16
+ const relative = path.relative(absoluteRoot, resolved);
17
+ if (relative.startsWith('..') || path.isAbsolute(relative)) {
18
+ throw new Error('Access denied: path is outside the project root.');
19
+ }
20
+ return resolved;
21
+ };
22
+ const getCurrentBranchTool = {
23
+ name: 'get_current_branch',
24
+ description: 'Returns the name of the currently checked-out git branch.',
25
+ parameters: z.object({}),
26
+ handler: async () => {
27
+ try {
28
+ const status = await git.status();
29
+ return { current_branch: status.current };
30
+ }
31
+ catch (error) {
32
+ return { error: `Error getting current branch: ${error.message}` };
33
+ }
34
+ },
35
+ };
36
+ const getCommitsTool = {
37
+ name: 'get_recent_commits',
38
+ description: "Retrieve the most recent git commit history to understand the project's development trajectory and purpose.",
39
+ parameters: z.object({
40
+ limit: z
41
+ .number()
42
+ .int()
43
+ .positive()
44
+ .max(100)
45
+ .optional()
46
+ .describe('Maximum number of commits to retrieve (default: 15)'),
47
+ }),
48
+ handler: async (args) => {
49
+ try {
50
+ const logResult = await git.log({ maxCount: args.limit ?? 15 });
51
+ return {
52
+ commits: logResult.all.map((commit) => ({
53
+ hash: commit.hash.substring(0, 7),
54
+ author: commit.author_name,
55
+ date: commit.date,
56
+ message: commit.message,
57
+ })),
58
+ };
59
+ }
60
+ catch (error) {
61
+ return { error: `Error retrieving commits: ${error.message}` };
62
+ }
63
+ },
64
+ };
65
+ const readFileTool = {
66
+ name: 'read_file',
67
+ description: 'Read the contents of a specific file in the repository. Large files are truncated to the first 80KB.',
68
+ parameters: z.object({
69
+ file_path: z
70
+ .string()
71
+ .min(1)
72
+ .describe('The path to the file relative to the project root (e.g. "src/main.ts" or "prisma/schema.prisma")'),
73
+ }),
74
+ handler: async (args) => {
75
+ try {
76
+ const resolved = resolveInsideProject(args.file_path);
77
+ const stat = await fs.stat(resolved);
78
+ if (!stat.isFile()) {
79
+ return { error: `"${args.file_path}" is not a file.` };
80
+ }
81
+ const maxBytes = 80 * 1024;
82
+ if (stat.size > maxBytes) {
83
+ const fd = await fs.open(resolved, 'r');
84
+ try {
85
+ const buffer = Buffer.alloc(maxBytes);
86
+ const { bytesRead } = await fd.read(buffer, 0, buffer.length, 0);
87
+ return {
88
+ content: buffer.subarray(0, bytesRead).toString('utf-8'),
89
+ truncated: true,
90
+ note: 'File was larger than 80KB; only the first portion is shown.',
91
+ };
92
+ }
93
+ finally {
94
+ await fd.close();
95
+ }
96
+ }
97
+ return { content: await fs.readFile(resolved, 'utf-8') };
98
+ }
99
+ catch (error) {
100
+ return { error: `Could not read file "${args.file_path}": ${error.message}` };
101
+ }
102
+ },
103
+ };
104
+ const searchInFilesTool = {
105
+ name: 'search_in_files',
106
+ description: 'Search for a keyword across source files in the repository. Returns at most 20 matches.',
107
+ parameters: z.object({
108
+ keyword: z.string().min(1).describe('The keyword or string to search for.'),
109
+ file_extension: z
110
+ .string()
111
+ .optional()
112
+ .describe('Optional extension filter such as ".ts" or ".py".'),
113
+ }),
114
+ handler: async (args) => {
115
+ const results = [];
116
+ const ignoredDirs = new Set([
117
+ 'node_modules',
118
+ '.git',
119
+ 'dist',
120
+ 'build',
121
+ '.next',
122
+ '.cache',
123
+ 'coverage',
124
+ ]);
125
+ const keyword = args.keyword.toLowerCase();
126
+ const walkDir = async (dir) => {
127
+ if (results.length >= 20)
128
+ return;
129
+ let entries;
130
+ try {
131
+ entries = await fs.readdir(dir, { withFileTypes: true });
132
+ }
133
+ catch {
134
+ return;
135
+ }
136
+ for (const entry of entries) {
137
+ if (results.length >= 20)
138
+ return;
139
+ const fullPath = path.join(dir, entry.name);
140
+ if (entry.isDirectory()) {
141
+ if (!ignoredDirs.has(entry.name)) {
142
+ await walkDir(fullPath);
143
+ }
144
+ continue;
145
+ }
146
+ if (!entry.isFile())
147
+ continue;
148
+ if (args.file_extension && !entry.name.endsWith(args.file_extension))
149
+ continue;
150
+ try {
151
+ const stat = await fs.stat(fullPath);
152
+ if (stat.size > 500 * 1024)
153
+ continue;
154
+ const content = await fs.readFile(fullPath, 'utf-8');
155
+ const lines = content.split('\n');
156
+ for (let index = 0; index < lines.length && results.length < 20; index++) {
157
+ const line = lines[index];
158
+ if (line?.toLowerCase().includes(keyword)) {
159
+ results.push({
160
+ file: path.relative(absoluteRoot, fullPath),
161
+ line: index + 1,
162
+ content: line.trim(),
163
+ });
164
+ }
165
+ }
166
+ }
167
+ catch {
168
+ // Ignore unreadable/binary files.
169
+ }
170
+ }
171
+ };
172
+ await walkDir(absoluteRoot);
173
+ return {
174
+ matches: results,
175
+ total: results.length,
176
+ capped: results.length >= 20,
177
+ };
178
+ },
179
+ };
180
+ const switchBranchTool = {
181
+ name: 'switch_branch',
182
+ description: 'Switch the current local git branch to a different branch.',
183
+ parameters: z.object({
184
+ branch: z.string().min(1).describe('The name of the branch to switch to.'),
185
+ }),
186
+ handler: async (args) => {
187
+ try {
188
+ await git.checkout(args.branch);
189
+ return { success: `Successfully switched to branch ${args.branch}` };
190
+ }
191
+ catch (error) {
192
+ return { error: `Failed to switch branch: ${error.message}` };
193
+ }
194
+ },
195
+ };
196
+ const getPrFilesTool = {
197
+ name: 'get_pr_files',
198
+ description: 'Get the files changed between the current HEAD and a base branch using a three-dot diff.',
199
+ parameters: z.object({
200
+ base_branch: z.string().min(1).describe('The base branch, e.g. "main" or "master".'),
201
+ }),
202
+ handler: async (args) => {
203
+ try {
204
+ const diffSummary = await git.diffSummary([`${args.base_branch}...HEAD`]);
205
+ return { files: diffSummary.files.map((file) => file.file) };
206
+ }
207
+ catch (error) {
208
+ return { error: `Failed to get PR files: ${error.message}` };
209
+ }
210
+ },
211
+ };
212
+ const getFileDiffTool = {
213
+ name: 'get_file_diff',
214
+ description: 'Get the git diff for one file relative to a base branch.',
215
+ parameters: z.object({
216
+ file_path: z.string().min(1).describe('The relative path of the file to diff.'),
217
+ base_branch: z.string().min(1).describe('The base branch, e.g. "main".'),
218
+ }),
219
+ handler: async (args) => {
220
+ try {
221
+ // Validate the path before passing it to git even though `--` prevents it
222
+ // from being interpreted as another git option.
223
+ resolveInsideProject(args.file_path);
224
+ const diff = await git.diff([`${args.base_branch}...HEAD`, '--', args.file_path]);
225
+ return { diff: diff || `No changes found for ${args.file_path}` };
226
+ }
227
+ catch (error) {
228
+ return { error: `Failed to get file diff: ${error.message}` };
229
+ }
230
+ },
231
+ };
232
+ // ===== NEW: Branch-aware tools =====
233
+ const listBranchesTool = {
234
+ name: 'list_branches',
235
+ description: 'List all local and remote git branches. Useful for understanding what branches exist and which one to compare against.',
236
+ parameters: z.object({
237
+ include_remote: z
238
+ .boolean()
239
+ .optional()
240
+ .describe('Whether to include remote branches (default: true)'),
241
+ }),
242
+ handler: async (args) => {
243
+ try {
244
+ const branches = await git.branch(['-a']);
245
+ const current = branches.current;
246
+ const localBranches = branches.all
247
+ .filter((b) => !b.startsWith('remotes/'))
248
+ .map((b) => (b === current ? `* ${b}` : b));
249
+ const remoteBranches = args.include_remote !== false
250
+ ? branches.all
251
+ .filter((b) => b.startsWith('remotes/'))
252
+ .map((b) => b.replace('remotes/', ''))
253
+ : [];
254
+ return {
255
+ current_branch: current,
256
+ local_branches: localBranches,
257
+ remote_branches: remoteBranches,
258
+ };
259
+ }
260
+ catch (error) {
261
+ return { error: `Failed to list branches: ${error.message}` };
262
+ }
263
+ },
264
+ };
265
+ const readFileFromBranchTool = {
266
+ name: 'read_file_from_branch',
267
+ description: 'Read the contents of a file from a specific branch WITHOUT switching branches. This is useful for comparing how a file looks on another branch (e.g. main vs feature branch) without disrupting the current working state.',
268
+ parameters: z.object({
269
+ file_path: z
270
+ .string()
271
+ .min(1)
272
+ .describe('The path to the file relative to the project root (e.g. "src/main.ts").'),
273
+ branch: z
274
+ .string()
275
+ .min(1)
276
+ .describe('The branch name or commit ref to read the file from (e.g. "main", "feature/x", or a commit hash).'),
277
+ max_bytes: z
278
+ .number()
279
+ .int()
280
+ .positive()
281
+ .max(200 * 1024)
282
+ .optional()
283
+ .describe('Maximum bytes to read (default: 80KB).'),
284
+ }),
285
+ handler: async (args) => {
286
+ try {
287
+ resolveInsideProject(args.file_path);
288
+ const maxBytes = args.max_bytes ?? 80 * 1024;
289
+ const content = await git.show([`${args.branch}:${args.file_path}`]);
290
+ if (content.length > maxBytes) {
291
+ return {
292
+ content: content.substring(0, maxBytes),
293
+ truncated: true,
294
+ note: `File was larger than ${Math.round(maxBytes / 1024)}KB; only the first portion is shown.`,
295
+ branch: args.branch,
296
+ file_path: args.file_path,
297
+ };
298
+ }
299
+ return {
300
+ content,
301
+ branch: args.branch,
302
+ file_path: args.file_path,
303
+ };
304
+ }
305
+ catch (error) {
306
+ return {
307
+ error: `Could not read "${args.file_path}" from branch "${args.branch}": ${error.message}`,
308
+ };
309
+ }
310
+ },
311
+ };
312
+ const compareFileBetweenBranchesTool = {
313
+ name: 'compare_file_between_branches',
314
+ description: 'Compare a specific file between two branches. Returns the diff showing what changed. Useful for understanding how a file evolved between branches (e.g. main vs feature branch).',
315
+ parameters: z.object({
316
+ file_path: z
317
+ .string()
318
+ .min(1)
319
+ .describe('The path to the file relative to the project root (e.g. "src/main.ts").'),
320
+ branch_a: z.string().min(1).describe('The first branch/ref to compare (e.g. "main").'),
321
+ branch_b: z
322
+ .string()
323
+ .min(1)
324
+ .describe('The second branch/ref to compare (e.g. "feature/my-change").'),
325
+ }),
326
+ handler: async (args) => {
327
+ try {
328
+ resolveInsideProject(args.file_path);
329
+ const diff = await git.diff([args.branch_a, args.branch_b, '--', args.file_path]);
330
+ if (!diff || diff.trim().length === 0) {
331
+ return {
332
+ file_path: args.file_path,
333
+ branch_a: args.branch_a,
334
+ branch_b: args.branch_b,
335
+ diff: `No differences found for "${args.file_path}" between ${args.branch_a} and ${args.branch_b}.`,
336
+ };
337
+ }
338
+ return {
339
+ file_path: args.file_path,
340
+ branch_a: args.branch_a,
341
+ branch_b: args.branch_b,
342
+ diff,
343
+ };
344
+ }
345
+ catch (error) {
346
+ return {
347
+ error: `Failed to compare "${args.file_path}" between ${args.branch_a} and ${args.branch_b}: ${error.message}`,
348
+ };
349
+ }
350
+ },
351
+ };
352
+ const getBranchDiffTool = {
353
+ name: 'get_branch_diff',
354
+ description: 'Get the full diff between two branches. Useful for understanding all changes in a feature branch compared to main.',
355
+ parameters: z.object({
356
+ branch_a: z.string().min(1).describe('The base branch/ref (e.g. "main").'),
357
+ branch_b: z
358
+ .string()
359
+ .min(1)
360
+ .describe('The target branch/ref to compare (e.g. "feature/my-change").'),
361
+ max_files: z
362
+ .number()
363
+ .int()
364
+ .positive()
365
+ .max(50)
366
+ .optional()
367
+ .describe('Maximum number of files to include in the diff (default: 20).'),
368
+ }),
369
+ handler: async (args) => {
370
+ try {
371
+ const maxFiles = args.max_files ?? 20;
372
+ const diffSummary = await git.diffSummary([args.branch_a, args.branch_b]);
373
+ const allFiles = diffSummary.files.map((f) => f.file);
374
+ const filesToShow = allFiles.slice(0, maxFiles);
375
+ const diffs = [];
376
+ for (const file of filesToShow) {
377
+ try {
378
+ const diff = await git.diff([args.branch_a, args.branch_b, '--', file]);
379
+ diffs.push({ file, diff: diff.substring(0, 8000) });
380
+ }
381
+ catch {
382
+ // Skip files that fail to diff
383
+ }
384
+ }
385
+ return {
386
+ branch_a: args.branch_a,
387
+ branch_b: args.branch_b,
388
+ total_changed_files: allFiles.length,
389
+ files_shown: filesToShow.length,
390
+ truncated: allFiles.length > filesToShow.length,
391
+ diffs,
392
+ };
393
+ }
394
+ catch (error) {
395
+ return {
396
+ error: `Failed to get diff between ${args.branch_a} and ${args.branch_b}: ${error.message}`,
397
+ };
398
+ }
399
+ },
400
+ };
401
+ const getFileHistoryTool = {
402
+ name: 'get_file_history',
403
+ description: 'Get the commit history for a specific file. Useful for understanding how a file evolved over time and why certain changes were made.',
404
+ parameters: z.object({
405
+ file_path: z
406
+ .string()
407
+ .min(1)
408
+ .describe('The path to the file relative to the project root (e.g. "src/main.ts").'),
409
+ limit: z
410
+ .number()
411
+ .int()
412
+ .positive()
413
+ .max(50)
414
+ .optional()
415
+ .describe('Maximum number of commits to retrieve (default: 10).'),
416
+ }),
417
+ handler: async (args) => {
418
+ try {
419
+ resolveInsideProject(args.file_path);
420
+ const logResult = await git.log({
421
+ maxCount: args.limit ?? 10,
422
+ file: args.file_path,
423
+ });
424
+ return {
425
+ file_path: args.file_path,
426
+ commits: logResult.all.map((commit) => ({
427
+ hash: commit.hash.substring(0, 7),
428
+ author: commit.author_name,
429
+ date: commit.date,
430
+ message: commit.message,
431
+ })),
432
+ };
433
+ }
434
+ catch (error) {
435
+ return { error: `Failed to get history for "${args.file_path}": ${error.message}` };
436
+ }
437
+ },
438
+ };
439
+ const getFileAtCommitTool = {
440
+ name: 'get_file_at_commit',
441
+ description: 'Read a file as it existed at a specific commit. Useful for understanding what the code looked like at a particular point in time.',
442
+ parameters: z.object({
443
+ file_path: z
444
+ .string()
445
+ .min(1)
446
+ .describe('The path to the file relative to the project root (e.g. "src/main.ts").'),
447
+ commit: z
448
+ .string()
449
+ .min(1)
450
+ .describe('The commit hash or ref to read the file from (e.g. "abc1234" or "HEAD~3").'),
451
+ max_bytes: z
452
+ .number()
453
+ .int()
454
+ .positive()
455
+ .max(200 * 1024)
456
+ .optional()
457
+ .describe('Maximum bytes to read (default: 80KB).'),
458
+ }),
459
+ handler: async (args) => {
460
+ try {
461
+ resolveInsideProject(args.file_path);
462
+ const maxBytes = args.max_bytes ?? 80 * 1024;
463
+ const content = await git.show([`${args.commit}:${args.file_path}`]);
464
+ if (content.length > maxBytes) {
465
+ return {
466
+ content: content.substring(0, maxBytes),
467
+ truncated: true,
468
+ note: `File was larger than ${Math.round(maxBytes / 1024)}KB; only the first portion is shown.`,
469
+ commit: args.commit,
470
+ file_path: args.file_path,
471
+ };
472
+ }
473
+ return {
474
+ content,
475
+ commit: args.commit,
476
+ file_path: args.file_path,
477
+ };
478
+ }
479
+ catch (error) {
480
+ return {
481
+ error: `Could not read "${args.file_path}" at commit "${args.commit}": ${error.message}`,
482
+ };
483
+ }
484
+ },
485
+ };
486
+ const getBranchStatusTool = {
487
+ name: 'get_branch_status',
488
+ description: 'Get the ahead/behind status of the current branch relative to another branch. Useful for understanding how far a feature branch has diverged from main.',
489
+ parameters: z.object({
490
+ compare_branch: z.string().min(1).describe('The branch to compare against (e.g. "main").'),
491
+ }),
492
+ handler: async (args) => {
493
+ try {
494
+ const status = await git.status();
495
+ const current = status.current || '';
496
+ const ahead = await git
497
+ .revparse([`--abbrev-ref`, `${current}@{upstream}`])
498
+ .catch(() => null);
499
+ // Get ahead/behind counts
500
+ const mergeBase = await git
501
+ .raw(['merge-base', current, args.compare_branch])
502
+ .catch(() => null);
503
+ if (!mergeBase) {
504
+ return {
505
+ error: `Could not find merge base between ${current} and ${args.compare_branch}`,
506
+ };
507
+ }
508
+ const aheadCount = await git
509
+ .raw(['rev-list', '--count', `${args.compare_branch}..${current}`])
510
+ .catch(() => '0');
511
+ const behindCount = await git
512
+ .raw(['rev-list', '--count', `${current}..${args.compare_branch}`])
513
+ .catch(() => '0');
514
+ return {
515
+ current_branch: current,
516
+ compare_branch: args.compare_branch,
517
+ ahead: parseInt(aheadCount.trim() || '0', 10),
518
+ behind: parseInt(behindCount.trim() || '0', 10),
519
+ has_upstream: !!ahead,
520
+ };
521
+ }
522
+ catch (error) {
523
+ return { error: `Failed to get branch status: ${error.message}` };
524
+ }
525
+ },
526
+ };
527
+ return [
528
+ getCurrentBranchTool,
529
+ getCommitsTool,
530
+ readFileTool,
531
+ searchInFilesTool,
532
+ switchBranchTool,
533
+ getPrFilesTool,
534
+ getFileDiffTool,
535
+ // New branch-aware tools
536
+ listBranchesTool,
537
+ readFileFromBranchTool,
538
+ compareFileBetweenBranchesTool,
539
+ getBranchDiffTool,
540
+ getFileHistoryTool,
541
+ getFileAtCommitTool,
542
+ getBranchStatusTool,
543
+ ];
544
+ }
545
+ export async function executeGitPull(absoluteRoot, progress) {
546
+ try {
547
+ const { simpleGit } = await import('simple-git');
548
+ const git = simpleGit(absoluteRoot);
549
+ progress('🔄 Pulling latest changes from git...');
550
+ await git.pull();
551
+ progress('✅ Successfully pulled latest changes');
552
+ }
553
+ catch (error) {
554
+ progress(`⚠️ Could not pull latest changes: ${error.message}`);
555
+ }
556
+ }
557
+ //# sourceMappingURL=git-tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-tools.js","sourceRoot":"","sources":["../../../../src/modules/ai-agent/tools/git-tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import type { MainModule } from '../../main.module.js';
2
+ import type { GitHubMeta, RuntimeTool } from '../tool-types.js';
3
+ /**
4
+ * Creates PR-specific chat tools. These require GitHub metadata and access
5
+ * to the GitHub API services.
6
+ *
7
+ * Confirmation is handled inside the tool handlers. Each mutation tool sends
8
+ * a structured confirmation request bound to the initiating socket, waits for
9
+ * the user's reply, then executes the GitHub request only if approved.
10
+ */
11
+ export declare function createPrChatTools(parsedDiffFiles: {
12
+ file: string;
13
+ diff: string;
14
+ }[], githubMeta: GitHubMeta | undefined, mainModule: MainModule, getRelevantContext: (projectId: string, query: string) => Promise<string>, projectId: string): RuntimeTool[];
15
+ //# sourceMappingURL=pr-chat-tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pr-chat-tools.d.ts","sourceRoot":"","sources":["../../../../src/modules/ai-agent/tools/pr-chat-tools.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,KAAK,EAGV,UAAU,EACV,WAAW,EAEZ,MAAM,kBAAkB,CAAC;AA4D1B;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,eAAe,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,EAAE,EACjD,UAAU,EAAE,UAAU,GAAG,SAAS,EAClC,UAAU,EAAE,UAAU,EACtB,kBAAkB,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,EACzE,SAAS,EAAE,MAAM,GAChB,WAAW,EAAE,CA+Mf"}