@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,590 @@
1
+ import { completion } from '@qvac/sdk';
2
+ import { BaseAgent } from './base.agent.js';
3
+ import ProjectEntity from '../server/entities/project.entity.js';
4
+ import { parseDiff, createProjectManifestSummary } from './ai-agent.utils.js';
5
+ import { createGitTools } from './tools/git-tools.js';
6
+ import { createFsTools } from './tools/fs-tools.js';
7
+ import { createPrChatTools } from './tools/pr-chat-tools.js';
8
+ import { ToolExecutor, serializeToolResult, resolveToolName } from './tool-executor.js';
9
+ import { AgentContextManager } from './agent-context-manager.js';
10
+ /**
11
+ * Scans raw model text and finds offsets of balanced top-level JSON objects
12
+ * using character-wise brace matching (honoring string literals). Regex-based
13
+ * extraction truncates at the first `}` it sees, which corrupts tool calls
14
+ * whose comment bodies contain nested braces (e.g. code snippets like
15
+ * `catch {}` or object literals inside a review comment).
16
+ */
17
+ function getBalancedJsonObjectSpans(rawText, predicate = () => true) {
18
+ const spans = [];
19
+ const stack = [];
20
+ let inString = false;
21
+ let escaped = false;
22
+ for (let i = 0; i < rawText.length; i++) {
23
+ const ch = rawText[i];
24
+ if (escaped) {
25
+ escaped = false;
26
+ continue;
27
+ }
28
+ if (ch === '\\' && inString) {
29
+ escaped = true;
30
+ continue;
31
+ }
32
+ if (ch === '"') {
33
+ inString = !inString;
34
+ continue;
35
+ }
36
+ if (inString)
37
+ continue;
38
+ if (ch === '{') {
39
+ if (stack.length === 0 && !predicate(rawText.slice(i))) {
40
+ continue; // Ignore top-level objects that don't look like tool calls.
41
+ }
42
+ stack.push(i);
43
+ }
44
+ else if (ch === '}') {
45
+ if (stack.length > 0) {
46
+ const start = stack.pop();
47
+ if (stack.length === 0) {
48
+ spans.push([start, i + 1]);
49
+ }
50
+ }
51
+ }
52
+ }
53
+ return spans;
54
+ }
55
+ /**
56
+ * Parses JSON tool calls embedded in raw model text output. Local models
57
+ * frequently emit tool calls as JSON text in content deltas rather than as
58
+ * structured toolCall events.
59
+ *
60
+ * The extraction is brace-aware (string-literal safe) so nested braces inside
61
+ * comment bodies (e.g. code snippets like `catch {}` or object literals in a
62
+ * review comment) do NOT truncate the JSON object prematurely. The old regex
63
+ * approach only handled 3 levels of nesting and silently dropped any comment
64
+ * that contained a brace pair.
65
+ */
66
+ function parseFallbackToolCalls(rawText) {
67
+ const calls = [];
68
+ try {
69
+ // Character-wise scan that tracks string literals and brace depth so we can
70
+ // extract complete top-level JSON objects regardless of nested braces.
71
+ // The predicate receives text starting at the '{' character, so the regex
72
+ // must account for the opening brace followed by the "name" key.
73
+ const matches = getBalancedJsonObjectSpans(rawText, (start) => /^[\s\n]*\{[\s\n]*"name"\s*:/.test(start));
74
+ for (const [start, end] of matches) {
75
+ try {
76
+ const parsed = JSON.parse(rawText.slice(start, end));
77
+ if (parsed && typeof parsed.name === 'string') {
78
+ const args = parsed.arguments !== undefined ? parsed.arguments : parsed.args;
79
+ if (args !== undefined) {
80
+ calls.push({ name: parsed.name, arguments: args });
81
+ }
82
+ }
83
+ }
84
+ catch {
85
+ // Ignore malformed JSON fragments.
86
+ }
87
+ }
88
+ // Lenient regex: handles `<|tool_call|>call:name{}`, `<|tool_call>call: name{}`,
89
+ // `<|tool_call|>name{}`, and whitespace variants. Local models are inconsistent
90
+ // about the exact dialect so we accept any of these forms.
91
+ const toolCallRegex = /<\|tool_call\|?>?\s*:?\s*(?:call\s*:\s*)?([a-zA-Z0-9_-]+)\{(.*?)\}/g;
92
+ // eslint-disable-next-line no-constant-condition
93
+ let toolMatch;
94
+ // eslint-disable-next-line no-constant-condition
95
+ while ((toolMatch = toolCallRegex.exec(rawText)) !== null) {
96
+ try {
97
+ const body = toolMatch[2]?.trim();
98
+ const args = body ? JSON.parse(`{${body}}`) : {};
99
+ calls.push({
100
+ name: toolMatch[1] || '',
101
+ arguments: args,
102
+ });
103
+ }
104
+ catch {
105
+ try {
106
+ calls.push({
107
+ name: toolMatch[1] || '',
108
+ arguments: JSON.parse(toolMatch[2] || '{}'),
109
+ });
110
+ }
111
+ catch {
112
+ // Ignore malformed tool-call syntax.
113
+ }
114
+ }
115
+ }
116
+ }
117
+ catch {
118
+ // Fall back to no tool calls.
119
+ }
120
+ return calls;
121
+ }
122
+ /**
123
+ * Removes raw tool-call syntax from assistant text so markers never leak into
124
+ * the client UI or into context history. The model emits tool calls in content
125
+ * deltas (e.g. `<|tool_call|>call:get_directory_tree{}`) when it uses a dialect
126
+ * the SDK's structured parser doesn't recognize. Leaving that raw text in
127
+ * history causes the model to see (and repeat) its own tool-call markers on the
128
+ * next turn, resulting in duplicate executions.
129
+ *
130
+ * This is brace-aware so tool calls with nested braces in their arguments
131
+ * (e.g. comment bodies containing code snippets) are removed completely
132
+ * rather than truncated by a naive regex.
133
+ */
134
+ export function stripToolCallMarkers(text) {
135
+ if (!text)
136
+ return '';
137
+ const spansToRemove = [];
138
+ // JSON tool calls emitted as raw text: {"name": "...", "arguments": {...}, ...}
139
+ // Predicate receives text starting at the '{' character.
140
+ const jsonSpans = getBalancedJsonObjectSpans(text, (start) => /^[\s\n]*\{[\s\n]*"name"\s*:/.test(start));
141
+ spansToRemove.push(...jsonSpans);
142
+ // Tool-call dialect: <|tool_call|>call:name{...} (or whitespace variants).
143
+ const dialectRegex = /<\|tool_call\|?>?\s*:?\s*(?:call\s*:\s*)?[a-zA-Z0-9_-]+\{/g;
144
+ let toolMatch;
145
+ while ((toolMatch = dialectRegex.exec(text)) !== null) {
146
+ const start = toolMatch.index;
147
+ // Scan for the matching closing brace, honoring string literals.
148
+ let depth = 0;
149
+ let inString = false;
150
+ let escaped = false;
151
+ for (let j = start; j < text.length; j++) {
152
+ const ch = text[j];
153
+ if (escaped) {
154
+ escaped = false;
155
+ continue;
156
+ }
157
+ if (ch === '\\' && inString) {
158
+ escaped = true;
159
+ continue;
160
+ }
161
+ if (ch === '"') {
162
+ inString = !inString;
163
+ continue;
164
+ }
165
+ if (inString)
166
+ continue;
167
+ if (ch === '{') {
168
+ depth++;
169
+ }
170
+ else if (ch === '}') {
171
+ depth--;
172
+ if (depth === 0) {
173
+ spansToRemove.push([start, j + 1]);
174
+ break;
175
+ }
176
+ }
177
+ }
178
+ }
179
+ // Sort spans by start offset and merge overlapping ranges.
180
+ const sorted = spansToRemove.sort((a, b) => a[0] - b[0]);
181
+ const merged = [];
182
+ for (const [start, end] of sorted) {
183
+ const last = merged[merged.length - 1];
184
+ if (last && start <= last[1]) {
185
+ last[1] = Math.max(last[1], end);
186
+ }
187
+ else {
188
+ merged.push([start, end]);
189
+ }
190
+ }
191
+ // Rebuild the text without removed tool-call spans.
192
+ let clean = '';
193
+ let cursor = 0;
194
+ for (const [start, end] of merged) {
195
+ clean += text.slice(cursor, start);
196
+ cursor = end;
197
+ }
198
+ clean += text.slice(cursor);
199
+ return clean.trim();
200
+ }
201
+ /**
202
+ * Selects the tool subset exposed to the model for this turn.
203
+ *
204
+ * All read-only codebase exploration, branch inspection, and PR investigation
205
+ * tools are ALWAYS available so the agent can confidently navigate the cloned
206
+ * repository, read files, list branches, and compare implementations without
207
+ * the user needing to use specific keywords.
208
+ *
209
+ * Mutation tools (leave_pr_comment, request_pr_changes) are also ALWAYS
210
+ * exposed. They do not execute on their own: the runtime gates every mutation
211
+ * behind a socket confirmation dialog bound to the initiating client, so the
212
+ * user explicitly approves each write. Keyword-based gating is harmful here
213
+ * because follow-up turns like "yes I approve" or "please post it" do not
214
+ * contain the original intent keyword and the model is then unable to emit the
215
+ * tool call it already drafted.
216
+ */
217
+ function selectTools(_userMessage, allTools) {
218
+ // Always available: full codebase exploration + branch inspection + PR tools.
219
+ // The agent should be able to navigate the cloned repository, read files,
220
+ // list branches, and compare implementations without keyword gating.
221
+ const alwaysAvailable = new Set([
222
+ // PR investigation
223
+ 'read_pr_file_diff',
224
+ 'semantic_search',
225
+ // Codebase exploration (fs-tools)
226
+ 'read_file',
227
+ 'read_file_lines',
228
+ 'read_directory',
229
+ 'get_directory_tree',
230
+ 'get_file_outline',
231
+ 'read_symbol',
232
+ 'search_in_files',
233
+ // Git / branch inspection (git-tools)
234
+ 'get_current_branch',
235
+ 'get_recent_commits',
236
+ 'get_pr_files',
237
+ 'get_file_diff',
238
+ 'list_branches',
239
+ 'read_file_from_branch',
240
+ 'compare_file_between_branches',
241
+ 'get_branch_diff',
242
+ 'get_file_history',
243
+ 'get_file_at_commit',
244
+ 'get_branch_status',
245
+ // Mutation tools (always exposed; execution requires user confirmation)
246
+ 'leave_pr_comment',
247
+ 'request_pr_changes',
248
+ ]);
249
+ return allTools.filter((tool) => alwaysAvailable.has(tool.name));
250
+ }
251
+ export class ChatAgent extends BaseAgent {
252
+ /**
253
+ * Stream a chat response grounded in project context and PR diff.
254
+ *
255
+ * The socketId is used to bind structured confirmations to the initiating
256
+ * client so no other connected client can respond.
257
+ */
258
+ async *chatStream(projectId, history, userMessage, prDiff, githubMeta, socketId) {
259
+ const session = githubMeta?.pull_number !== undefined
260
+ ? this.mainModule.aiAgent.sessionManager.getSession(projectId, githubMeta.pull_number)
261
+ : undefined;
262
+ let llmId;
263
+ let embeddingId;
264
+ let parsedDiffFiles;
265
+ let gitTools;
266
+ let fsTools;
267
+ let projectOverview;
268
+ if (session) {
269
+ llmId = session.llmId;
270
+ embeddingId = session.embeddingId;
271
+ parsedDiffFiles = session.parsedDiffFiles;
272
+ gitTools = session.gitTools;
273
+ fsTools = session.fsTools;
274
+ projectOverview = session.projectOverview;
275
+ }
276
+ else {
277
+ const models = await this.ensureModelsLoaded();
278
+ llmId = models.llmId;
279
+ embeddingId = models.embeddingId;
280
+ const project = await ProjectEntity.findOneBy({ id: projectId });
281
+ gitTools = project?.repository_path
282
+ ? createGitTools(project.repository_path)
283
+ : [];
284
+ fsTools = project?.repository_path
285
+ ? createFsTools(project.repository_path)
286
+ : [];
287
+ parsedDiffFiles = prDiff ? parseDiff(prDiff) : [];
288
+ projectOverview = project?.analysis
289
+ ? createProjectManifestSummary(project.analysis)
290
+ : 'No project overview available.';
291
+ }
292
+ const context = await this.getRelevantContext(projectId, embeddingId, userMessage);
293
+ const changedFiles = parsedDiffFiles.map((file) => file.file);
294
+ const diffContext = changedFiles.length > 0
295
+ ? `\n\n## Changed Files in PR:\n${changedFiles
296
+ .map((file) => `- ${file}`)
297
+ .join('\n')}\n\nUse the \`read_pr_file_diff\` tool to view the exact changes for any of these files.`
298
+ : '';
299
+ let metaContext = '';
300
+ if (githubMeta) {
301
+ metaContext = `\n\n## GitHub PR Metadata\nOwner: ${githubMeta.owner}\nRepo: ${githubMeta.repo}\nPull Number: ${githubMeta.pull_number}`;
302
+ if (githubMeta.creator)
303
+ metaContext += `\nCreator: ${githubMeta.creator}`;
304
+ let additions = githubMeta.additions;
305
+ let deletions = githubMeta.deletions;
306
+ let changedFilesCount = githubMeta.changed_files;
307
+ if (additions === undefined || deletions === undefined) {
308
+ additions = 0;
309
+ deletions = 0;
310
+ const lines = (prDiff || '').split('\n');
311
+ for (const line of lines) {
312
+ if (line.startsWith('+') && !line.startsWith('+++'))
313
+ additions++;
314
+ else if (line.startsWith('-') && !line.startsWith('---'))
315
+ deletions++;
316
+ }
317
+ }
318
+ if (changedFilesCount === undefined) {
319
+ changedFilesCount = parsedDiffFiles.length;
320
+ }
321
+ // Explicit line count context for the PR
322
+ const totalLines = additions + deletions;
323
+ metaContext += `\n\n## PR Size Summary\n- **Lines Added:** ${additions}`;
324
+ metaContext += `\n- **Lines Removed:** ${deletions}`;
325
+ metaContext += `\n- **Total Lines Changed:** ${totalLines}`;
326
+ if (changedFilesCount !== undefined) {
327
+ metaContext += `\n- **Files Modified:** ${changedFilesCount}`;
328
+ }
329
+ metaContext += `\n\nUse this context to gauge the scope of the PR. A small PR (under 100 lines) is likely a focused change, while a large PR (500+ lines) may need more careful review.`;
330
+ }
331
+ // PR-specific tools are now in their own module: tools/pr-chat-tools.ts
332
+ // This keeps chat.agent.ts focused on the orchestration logic.
333
+ const prTools = createPrChatTools(parsedDiffFiles, githubMeta, this.mainModule, async (pid, query) => await this.getRelevantContext(pid, embeddingId, query), projectId);
334
+ // Remove switch_branch from ordinary chat. It changes the physical working
335
+ // tree and the model almost never needs it when read-only branch inspection
336
+ // tools are available.
337
+ const safeGitTools = gitTools.filter((tool) => tool.name !== 'switch_branch');
338
+ // Remove duplicate read_file. Both git-tools and fs-tools define one.
339
+ const gitToolsWithoutReadFile = safeGitTools.filter((tool) => tool.name !== 'read_file');
340
+ // All tools available for this session.
341
+ const allTools = [...gitToolsWithoutReadFile, ...fsTools, ...prTools];
342
+ // Dynamically select a smaller tool subset based on user intent.
343
+ const runtimeTools = selectTools(userMessage, allTools);
344
+ const systemPrompt = `You are Lazy Review, a code-review assistant embedded in a PR review tool.
345
+
346
+ ## CRITICAL: You MUST use tools to gather information. Never describe or plan to use a tool — actually call it.
347
+
348
+ You have access to the full cloned repository on disk. When the user asks about
349
+ code, files, branches, diffs, or history, you MUST call the appropriate tool to
350
+ get the actual data. Do NOT say "I would use X" or "Let me check X" — just call
351
+ the tool and use its result.
352
+
353
+ ### Tool Usage Rules
354
+ 1. If the user asks about a file → call read_file immediately.
355
+ 2. If the user asks about branches → call list_branches immediately.
356
+ 3. If the user asks about a diff → call get_branch_diff or read_pr_file_diff immediately.
357
+ 4. If the user asks about file history → call get_file_history immediately.
358
+ 5. If the user asks to compare branches → call compare_file_between_branches or get_branch_diff immediately.
359
+ 6. If the user asks about the codebase structure → call get_directory_tree or read_directory immediately.
360
+ 7. If the user asks about a symbol → call read_symbol or search_in_files immediately.
361
+ 8. If the user asks about previous implementations → call get_file_history or read_file_from_branch immediately.
362
+
363
+ Never respond with "I would need to check" or "Let me look at" — just call the tool.
364
+ Never summarize what a tool would do — call it and report the actual result.
365
+
366
+ ### Available Tools
367
+ - read_file / read_file_lines / read_directory / get_directory_tree: navigate the repository
368
+ - get_file_outline / read_symbol: understand file structure without reading everything
369
+ - search_in_files: find where symbols are used
370
+ - list_branches: see all local and remote branches
371
+ - read_file_from_branch / compare_file_between_branches: compare implementations
372
+ - get_branch_diff / get_file_history / get_file_at_commit: understand evolution
373
+ - get_current_branch / get_recent_commits / get_pr_files / get_file_diff: PR context
374
+ - leave_pr_comment: post a general comment to the current PR (requires user approval)
375
+ - request_pr_changes: submit a REQUEST_CHANGES review on the current PR (requires user approval)
376
+
377
+ GitHub and workspace mutations are executed by the runtime and always require
378
+ user approval through a confirmation dialog. NEVER claim a mutation succeeded
379
+ until its tool result reports success. If the tool result says the action was
380
+ rejected or failed, say so honestly.
381
+
382
+ Prefer read-only investigation before proposing changes.
383
+
384
+ When reviewing code:
385
+ - identify concrete correctness, security, maintainability, or performance issues;
386
+ - distinguish confirmed issues from uncertain concerns;
387
+ - cite relevant files and lines when available;
388
+ - avoid unnecessary repository exploration.
389
+
390
+ ## Codebase Overview (Project Manifest)
391
+ ${projectOverview}
392
+
393
+ ## Relevant Semantic Context
394
+ ${context || 'No relevant semantic context found.'}${diffContext}${metaContext}`;
395
+ const contextManager = new AgentContextManager(systemPrompt, llmId, 128000, 2500, projectId.toString());
396
+ for (const message of history) {
397
+ contextManager.addRecent({ role: message.role, content: message.content });
398
+ }
399
+ contextManager.addRecent({ role: 'user', content: userMessage });
400
+ const executor = new ToolExecutor(runtimeTools, this.mainModule);
401
+ const toolContext = {
402
+ projectId,
403
+ sessionId: projectId.toString(),
404
+ conversation: history,
405
+ };
406
+ if (githubMeta) {
407
+ toolContext.githubMeta = githubMeta;
408
+ }
409
+ if (socketId) {
410
+ toolContext.socketId = socketId;
411
+ }
412
+ const maxToolTurns = 5;
413
+ for (let turn = 0; turn < maxToolTurns; turn++) {
414
+ if (contextManager.needsCompaction()) {
415
+ console.log('🗜️ [ChatAgent] Compacting context before completion');
416
+ await contextManager.compactWithLLM();
417
+ }
418
+ const run = completion({
419
+ modelId: llmId,
420
+ history: contextManager.buildHistory(),
421
+ tools: runtimeTools,
422
+ toolDialect: 'json',
423
+ stream: true,
424
+ captureThinking: true,
425
+ kvCache: projectId.toString(),
426
+ });
427
+ let streamedContent = '';
428
+ let thinkingOpen = false;
429
+ // QVAC already separates normal content, thinking, and tool calls.
430
+ // Never try to infer a tool call from whether a text chat starts with "{".
431
+ // Yield content deltas incrementally so the frontend can stream tokens
432
+ // to the user in real time instead of waiting for the full response.
433
+ //
434
+ // Thinking and content are wrapped in explicit markers so the frontend
435
+ // can separate reasoning (collapsed "Reasoning" panel) from the actual
436
+ // answer. Without these markers, raw thinking text mixed in with normal
437
+ // content corrupts markdown parsing (e.g. unclosed code fences pack
438
+ // the explanation and snippets into a single code block).
439
+ for await (const event of run.events) {
440
+ switch (event.type) {
441
+ case 'thinkingDelta': {
442
+ if (event.text) {
443
+ // Emit an opening marker before the first thinking chunk.
444
+ if (!thinkingOpen) {
445
+ thinkingOpen = true;
446
+ yield '<thinking>';
447
+ }
448
+ streamedContent += event.text;
449
+ yield event.text;
450
+ }
451
+ break;
452
+ }
453
+ case 'contentDelta': {
454
+ // Close the thinking section when real content begins.
455
+ if (thinkingOpen) {
456
+ thinkingOpen = false;
457
+ yield '</thinking>';
458
+ }
459
+ if (event.text) {
460
+ streamedContent += event.text;
461
+ yield event.text;
462
+ }
463
+ break;
464
+ }
465
+ case 'toolCall': {
466
+ console.log(`🧰 [ChatAgent] Tool requested: ${event.call?.name}`, event.call?.arguments);
467
+ break;
468
+ }
469
+ case 'toolError': {
470
+ // The model emitted a tool call the SDK couldn't parse natively
471
+ // (e.g. the <|tool_call|>call:name{} dialect). The fallback parser
472
+ // below recovers these, so this is informational, not fatal.
473
+ console.warn('⚠️ [ChatAgent] SDK tool parse issue, fallback parser will attempt:', event.error ?? event);
474
+ break;
475
+ }
476
+ case 'completionDone': {
477
+ break;
478
+ }
479
+ default:
480
+ break;
481
+ }
482
+ }
483
+ // If the stream ends while a thinking block is still open, close it.
484
+ if (thinkingOpen) {
485
+ thinkingOpen = false;
486
+ yield '</thinking>';
487
+ }
488
+ const result = await run.final;
489
+ // IMPORTANT: toolCalls may be exposed asynchronously. Always await it.
490
+ const structuredToolCalls = (await result.toolCalls) ?? [];
491
+ const rawText = result.cacheableAssistantContent ?? result.contentText ?? result.raw?.fullText ?? '';
492
+ // Check if the streamed/raw content is actually a JSON tool call the SDK
493
+ // didn't parse into structured toolCall events. Local models frequently
494
+ // emit tool calls as JSON text.
495
+ let toolCalls = structuredToolCalls;
496
+ let isFallback = false;
497
+ if (toolCalls.length === 0) {
498
+ const parsedFallback = parseFallbackToolCalls(rawText || streamedContent);
499
+ if (parsedFallback.length > 0) {
500
+ isFallback = true;
501
+ console.log(`🧰 [ChatAgent] Parsed ${parsedFallback.length} tool call(s) from raw text fallback`);
502
+ toolCalls = parsedFallback.map((call) => ({
503
+ name: call.name,
504
+ arguments: call.arguments,
505
+ }));
506
+ }
507
+ }
508
+ // No tool requested: the streamed content is the final answer.
509
+ // Content was already yielded incrementally above, so just return.
510
+ if (toolCalls.length === 0) {
511
+ return;
512
+ }
513
+ // This turn contains tool calls. Discard the preliminary prose and
514
+ // preserve the assistant's structured tool-call turn in history so the
515
+ // follow-up completion can reason from the tool results correctly.
516
+ // Strip raw <|tool_call|> markers from history so the model does NOT
517
+ // see (and re-emit) its own tool-call dialect on the next turn.
518
+ contextManager.addRecent({
519
+ role: 'assistant',
520
+ content: stripToolCallMarkers(rawText || streamedContent),
521
+ ...(isFallback ? {} : { toolCalls }),
522
+ });
523
+ // Tools that mutate state or require user confirmation must run serially.
524
+ // Read-only tools can run in parallel for much faster multi-tool turns.
525
+ //
526
+ // Use resolveToolName to map hallucinated aliases (e.g.
527
+ // "anonymous.submitPRReview") to the real registered tool name so
528
+ // mutation calls always go through the confirmation-gated serial path.
529
+ const mutationTools = new Set(runtimeTools.filter((tool) => (tool.effect ?? 'read') !== 'read').map((tool) => tool.name));
530
+ // Resolve alias names before classifying parallel vs serial calls.
531
+ const resolvedCalls = toolCalls.map((tc) => ({
532
+ ...tc,
533
+ name: resolveToolName(tc.name),
534
+ }));
535
+ const parallelCalls = resolvedCalls.filter((tc) => !mutationTools.has(tc.name));
536
+ const serialCalls = resolvedCalls.filter((tc) => mutationTools.has(tc.name));
537
+ // Execute read-only tools in parallel
538
+ const parallelResults = await Promise.all(parallelCalls.map(async (toolCall) => ({
539
+ toolCall,
540
+ result: await executor.execute(toolCall, toolContext),
541
+ })));
542
+ // Add parallel results to context
543
+ for (const { toolCall, result } of parallelResults) {
544
+ const estimatedTokens = contextManager.estimateTokens(result);
545
+ if (contextManager.needsCompaction(estimatedTokens)) {
546
+ console.log('🗝️ [ChatAgent] Compacting context after tool result');
547
+ await contextManager.compactWithLLM();
548
+ }
549
+ contextManager.addRecent({
550
+ role: isFallback ? 'user' : 'tool',
551
+ ...(isFallback ? {} : { toolCallId: toolCall.id }),
552
+ content: isFallback
553
+ ? `[Tool Result for ${toolCall.name}]:\n\n${serializeToolResult(result)}`
554
+ : serializeToolResult(result),
555
+ });
556
+ }
557
+ // Execute mutation tools serially (they may require confirmation)
558
+ for (const toolCall of serialCalls) {
559
+ const result = await executor.execute(toolCall, toolContext);
560
+ const estimatedTokens = contextManager.estimateTokens(result);
561
+ if (contextManager.needsCompaction(estimatedTokens)) {
562
+ console.log('🗝️ [ChatAgent] Compacting context after tool result');
563
+ await contextManager.compactWithLLM();
564
+ }
565
+ contextManager.addRecent({
566
+ role: isFallback ? 'user' : 'tool',
567
+ ...(isFallback ? {} : { toolCallId: toolCall.id }),
568
+ content: isFallback
569
+ ? `[Tool Result for ${toolCall.name}]:\n\n${serializeToolResult(result)}`
570
+ : serializeToolResult(result),
571
+ });
572
+ }
573
+ // Loop again. The next completion sees the tool result and produces the
574
+ // final user-facing response.
575
+ }
576
+ yield '\n\nI reached the maximum number of tool turns before the request completed.';
577
+ }
578
+ /**
579
+ * Single-turn helper. The caller is responsible for preserving history.
580
+ */
581
+ async chat(projectId, history, userMessage, prDiff, githubMeta, socketId) {
582
+ const stream = this.chatStream(projectId, history, userMessage, prDiff, githubMeta, socketId);
583
+ let full = '';
584
+ for await (const chunk of stream) {
585
+ full += chunk;
586
+ }
587
+ return full;
588
+ }
589
+ }
590
+ //# sourceMappingURL=chat.agent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"chat.agent.js","sourceRoot":"","sources":["../../../src/modules/ai-agent/chat.agent.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ import type { MainModule } from '../main.module.js';
2
+ export declare class CodeBaseIndexerAgent {
3
+ mainModule: MainModule;
4
+ /**
5
+ * Active indexing jobs keyed by project id.
6
+ */
7
+ private indexingControllers;
8
+ constructor(mainModule: MainModule);
9
+ cancelIndexing(projectId: string): boolean;
10
+ analyzeAndIndexProject(projectId: string): Promise<void>;
11
+ private initializeProject;
12
+ }
13
+ //# sourceMappingURL=code-base-indexer.agent.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"code-base-indexer.agent.d.ts","sourceRoot":"","sources":["../../../src/modules/ai-agent/code-base-indexer.agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AA0EpD,qBAAa,oBAAoB;IAC/B,UAAU,EAAE,UAAU,CAAC;IAEvB;;OAEG;IACH,OAAO,CAAC,mBAAmB,CAAsC;gBAErD,UAAU,EAAE,UAAU;IAIlC,cAAc,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAYpC,sBAAsB,CAAC,SAAS,EAAE,MAAM;YA4kBhC,iBAAiB;CAwChC"}