@codebolt/agent 1.2.1 → 2.2.3

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 (285) hide show
  1. package/README.md +157 -66
  2. package/dist/{agent.js → builderpattern/agent.js} +2 -2
  3. package/dist/{followupquestionbuilder.d.ts → builderpattern/followupquestionbuilder.d.ts} +1 -1
  4. package/dist/{followupquestionbuilder.js → builderpattern/followupquestionbuilder.js} +1 -1
  5. package/dist/{index.d.ts → builderpattern/index.d.ts} +3 -3
  6. package/dist/{llmoutputhandler.d.ts → builderpattern/llmoutputhandler.d.ts} +1 -1
  7. package/dist/{llmoutputhandler.js → builderpattern/llmoutputhandler.js} +7 -7
  8. package/dist/{promptbuilder.d.ts → builderpattern/promptbuilder.d.ts} +3 -3
  9. package/dist/{taskInstruction.d.ts → builderpattern/taskInstruction.d.ts} +2 -2
  10. package/dist/{usermessage.d.ts → builderpattern/usermessage.d.ts} +9 -4
  11. package/dist/composablepattern/agent.d.ts +169 -0
  12. package/dist/composablepattern/agent.js +598 -0
  13. package/dist/composablepattern/codebolt-storage.d.ts +67 -0
  14. package/dist/composablepattern/codebolt-storage.js +320 -0
  15. package/dist/composablepattern/document.d.ts +149 -0
  16. package/dist/composablepattern/document.js +372 -0
  17. package/dist/composablepattern/examples/codebolt-integration-example.d.ts +12 -0
  18. package/dist/composablepattern/examples/codebolt-integration-example.js +218 -0
  19. package/dist/composablepattern/examples/codebolt-storage-example.d.ts +40 -0
  20. package/dist/composablepattern/examples/codebolt-storage-example.js +223 -0
  21. package/dist/composablepattern/examples/custom-steps-example.d.ts +20 -0
  22. package/dist/composablepattern/examples/custom-steps-example.js +455 -0
  23. package/dist/composablepattern/examples/document-agent.d.ts +17 -0
  24. package/dist/composablepattern/examples/document-agent.js +107 -0
  25. package/dist/composablepattern/examples/simple-codebolt-integration.d.ts +8 -0
  26. package/dist/composablepattern/examples/simple-codebolt-integration.js +164 -0
  27. package/dist/composablepattern/examples/weather-agent.d.ts +18 -0
  28. package/dist/composablepattern/examples/weather-agent.js +86 -0
  29. package/dist/composablepattern/examples/workflow-example.d.ts +12 -0
  30. package/dist/composablepattern/examples/workflow-example.js +463 -0
  31. package/dist/composablepattern/index.d.ts +63 -0
  32. package/dist/composablepattern/index.js +115 -0
  33. package/dist/composablepattern/memory.d.ts +89 -0
  34. package/dist/composablepattern/memory.js +141 -0
  35. package/dist/composablepattern/tool.d.ts +84 -0
  36. package/dist/composablepattern/tool.js +260 -0
  37. package/dist/composablepattern/types.d.ts +194 -0
  38. package/dist/composablepattern/types.js +6 -0
  39. package/dist/composablepattern/user-context.d.ts +214 -0
  40. package/dist/composablepattern/user-context.js +275 -0
  41. package/dist/composablepattern/workflow.d.ts +388 -0
  42. package/dist/composablepattern/workflow.js +562 -0
  43. package/dist/local-tools/fileTools.d.ts +26 -0
  44. package/dist/local-tools/fileTools.js +162 -0
  45. package/dist/processor/agent/agentStep.d.ts +49 -0
  46. package/dist/processor/agent/agentStep.js +241 -0
  47. package/dist/processor/agent/toolExecutor.d.ts +19 -0
  48. package/dist/processor/agent/toolExecutor.js +90 -0
  49. package/dist/processor/index.d.ts +7 -0
  50. package/dist/processor/index.js +36 -0
  51. package/dist/processor/messageModifiers/baseMessageModifier.d.ts +20 -0
  52. package/dist/processor/messageModifiers/baseMessageModifier.js +55 -0
  53. package/dist/processor/processors/baseProcessor.d.ts +14 -0
  54. package/dist/processor/processors/baseProcessor.js +29 -0
  55. package/dist/processor/tools/baseTool.d.ts +10 -0
  56. package/dist/processor/tools/baseTool.js +20 -0
  57. package/dist/processor/tools/toolList.d.ts +9 -0
  58. package/dist/processor/tools/toolList.js +22 -0
  59. package/dist/processor/types/interfaces.d.ts +117 -0
  60. package/dist/processor/types/interfaces.js +2 -0
  61. package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.d.ts +13 -0
  62. package/dist/processor-pieces/additionalModifiers/argumentProcessorModifier.js +68 -0
  63. package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.d.ts +15 -0
  64. package/dist/processor-pieces/additionalModifiers/atFileProcessorModifier.js +212 -0
  65. package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.d.ts +19 -0
  66. package/dist/processor-pieces/additionalModifiers/chatCompressionModifier.js +110 -0
  67. package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.d.ts +23 -0
  68. package/dist/processor-pieces/additionalModifiers/chatRecordingModifier.js +173 -0
  69. package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.d.ts +14 -0
  70. package/dist/processor-pieces/additionalModifiers/coreSystemPromptModifier.js +93 -0
  71. package/dist/processor-pieces/additionalModifiers/directoryContextModifier.d.ts +30 -0
  72. package/dist/processor-pieces/additionalModifiers/directoryContextModifier.js +330 -0
  73. package/dist/processor-pieces/additionalModifiers/environmentContextModifier.d.ts +26 -0
  74. package/dist/processor-pieces/additionalModifiers/environmentContextModifier.js +269 -0
  75. package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.d.ts +38 -0
  76. package/dist/processor-pieces/additionalModifiers/fallbackHandlerModifier.js +217 -0
  77. package/dist/processor-pieces/additionalModifiers/ideContextModifier.d.ts +34 -0
  78. package/dist/processor-pieces/additionalModifiers/ideContextModifier.js +147 -0
  79. package/dist/processor-pieces/additionalModifiers/index.d.ts +12 -0
  80. package/dist/processor-pieces/additionalModifiers/index.js +28 -0
  81. package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.d.ts +29 -0
  82. package/dist/processor-pieces/additionalModifiers/loopDetectionModifier.js +155 -0
  83. package/dist/processor-pieces/additionalModifiers/memoryImportModifier.d.ts +15 -0
  84. package/dist/processor-pieces/additionalModifiers/memoryImportModifier.js +129 -0
  85. package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.d.ts +25 -0
  86. package/dist/processor-pieces/additionalModifiers/shellProcessorModifier.js +169 -0
  87. package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.d.ts +20 -0
  88. package/dist/processor-pieces/additionalModifiers/toolInjectionModifier.js +152 -0
  89. package/dist/processor-pieces/base/baseMessageModifier.d.ts +12 -0
  90. package/dist/processor-pieces/base/baseMessageModifier.js +15 -0
  91. package/dist/processor-pieces/base/basePostInferenceProcessor.d.ts +13 -0
  92. package/dist/processor-pieces/base/basePostInferenceProcessor.js +18 -0
  93. package/dist/processor-pieces/base/basePostToolCallProcessor.d.ts +15 -0
  94. package/dist/processor-pieces/base/basePostToolCallProcessor.js +25 -0
  95. package/dist/processor-pieces/base/basePreInferenceProcessor.d.ts +12 -0
  96. package/dist/processor-pieces/base/basePreInferenceProcessor.js +17 -0
  97. package/dist/processor-pieces/base/basePreToolCallProcessor.d.ts +18 -0
  98. package/dist/processor-pieces/base/basePreToolCallProcessor.js +66 -0
  99. package/dist/processor-pieces/base/index.d.ts +9 -0
  100. package/dist/processor-pieces/base/index.js +18 -0
  101. package/dist/processor-pieces/index.d.ts +1 -0
  102. package/dist/processor-pieces/index.js +59 -0
  103. package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.d.ts +7 -0
  104. package/dist/processor-pieces/messageModifiers/addCurrentDirectoryRootFilesModifier.js +93 -0
  105. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.d.ts +31 -0
  106. package/dist/processor-pieces/messageModifiers/addToolsListMessageModifier.js +145 -0
  107. package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.d.ts +9 -0
  108. package/dist/processor-pieces/messageModifiers/advancedSystemInstructionMessageModifier.js +77 -0
  109. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.d.ts +13 -0
  110. package/dist/processor-pieces/messageModifiers/argumentProcessorModifier.js +68 -0
  111. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.d.ts +25 -0
  112. package/dist/processor-pieces/messageModifiers/atFileProcessorModifier.js +453 -0
  113. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.d.ts +7 -0
  114. package/dist/processor-pieces/messageModifiers/baseContextMessageModifier.js +67 -0
  115. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.d.ts +9 -0
  116. package/dist/processor-pieces/messageModifiers/baseSystemInstructionMessageModifier.js +90 -0
  117. package/dist/processor-pieces/messageModifiers/chatCompressionModifier.d.ts +19 -0
  118. package/dist/processor-pieces/messageModifiers/chatCompressionModifier.js +110 -0
  119. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.d.ts +18 -0
  120. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.d.ts +20 -0
  121. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.example.js +124 -0
  122. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +104 -0
  123. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.d.ts +23 -0
  124. package/dist/processor-pieces/messageModifiers/chatRecordingModifier.js +173 -0
  125. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.d.ts +14 -0
  126. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +130 -0
  127. package/dist/processor-pieces/messageModifiers/directoryContextModifier.d.ts +36 -0
  128. package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +418 -0
  129. package/dist/processor-pieces/messageModifiers/environmentContext.d.ts +41 -0
  130. package/dist/processor-pieces/messageModifiers/environmentContext.js +355 -0
  131. package/dist/processor-pieces/messageModifiers/environmentContextModifier.d.ts +26 -0
  132. package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +260 -0
  133. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.d.ts +13 -0
  134. package/dist/processor-pieces/messageModifiers/handleUrlMessageModifier.js +59 -0
  135. package/dist/processor-pieces/messageModifiers/ideContextModifier.d.ts +34 -0
  136. package/dist/processor-pieces/messageModifiers/ideContextModifier.js +157 -0
  137. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.d.ts +19 -0
  138. package/dist/processor-pieces/messageModifiers/imageAttachmentMessageModifier.js +221 -0
  139. package/dist/processor-pieces/messageModifiers/index.d.ts +11 -0
  140. package/dist/processor-pieces/messageModifiers/index.js +26 -0
  141. package/dist/processor-pieces/messageModifiers/memoryImportModifier.d.ts +15 -0
  142. package/dist/processor-pieces/messageModifiers/memoryImportModifier.js +129 -0
  143. package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.d.ts +23 -0
  144. package/dist/processor-pieces/messageModifiers/mentionedFilesModifier.js +207 -0
  145. package/dist/processor-pieces/messageModifiers/simpleMessageModifier.d.ts +7 -0
  146. package/dist/processor-pieces/messageModifiers/simpleMessageModifier.js +26 -0
  147. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.d.ts +20 -0
  148. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +152 -0
  149. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.d.ts +38 -0
  150. package/dist/processor-pieces/messageModifiers/workingDirectoryMessageModifier.js +392 -0
  151. package/dist/processor-pieces/postInference/llmOutputValidityProcessor.d.ts +1 -0
  152. package/dist/processor-pieces/postInference/llmOutputValidityProcessor.js +2 -0
  153. package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.d.ts +7 -0
  154. package/dist/processor-pieces/postInferenceProcessors/checkForNoToolCall.js +24 -0
  155. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.d.ts +29 -0
  156. package/dist/processor-pieces/postInferenceProcessors/loopDetectionModifier.js +174 -0
  157. package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.d.ts +41 -0
  158. package/dist/processor-pieces/postToolCall/advancedLoopDetectionProcessor.js +197 -0
  159. package/dist/processor-pieces/postToolCall/chatCompressionProcessor.d.ts +26 -0
  160. package/dist/processor-pieces/postToolCall/chatCompressionProcessor.js +90 -0
  161. package/dist/processor-pieces/postToolCall/chatRecordingProcessor.d.ts +81 -0
  162. package/dist/processor-pieces/postToolCall/chatRecordingProcessor.js +329 -0
  163. package/dist/processor-pieces/postToolCall/contextManagementProcessor.d.ts +40 -0
  164. package/dist/processor-pieces/postToolCall/contextManagementProcessor.js +272 -0
  165. package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.d.ts +49 -0
  166. package/dist/processor-pieces/postToolCall/conversationCompactorProcessor.js +291 -0
  167. package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.d.ts +49 -0
  168. package/dist/processor-pieces/postToolCall/conversationContinuityProcessor.js +293 -0
  169. package/dist/processor-pieces/postToolCall/followUpConversationProcessor.d.ts +47 -0
  170. package/dist/processor-pieces/postToolCall/followUpConversationProcessor.js +249 -0
  171. package/dist/processor-pieces/postToolCall/loopDetectionProcessor.d.ts +30 -0
  172. package/dist/processor-pieces/postToolCall/loopDetectionProcessor.js +137 -0
  173. package/dist/processor-pieces/postToolCall/responseValidationProcessor.d.ts +30 -0
  174. package/dist/processor-pieces/postToolCall/responseValidationProcessor.js +228 -0
  175. package/dist/processor-pieces/postToolCall/telemetryProcessor.d.ts +99 -0
  176. package/dist/processor-pieces/postToolCall/telemetryProcessor.js +278 -0
  177. package/dist/processor-pieces/postToolCall/tokenManagementProcessor.d.ts +37 -0
  178. package/dist/processor-pieces/postToolCall/tokenManagementProcessor.js +178 -0
  179. package/dist/processor-pieces/postToolCall/toolExecutionProcessor.d.ts +43 -0
  180. package/dist/processor-pieces/postToolCall/toolExecutionProcessor.js +207 -0
  181. package/dist/processor-pieces/postToolCallProcessors/index.d.ts +1 -0
  182. package/dist/processor-pieces/postToolCallProcessors/index.js +2 -0
  183. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.d.ts +25 -0
  184. package/dist/processor-pieces/postToolCallProcessors/shellProcessorModifier.js +225 -0
  185. package/dist/processor-pieces/preInference/conversationCompactorProcessor.d.ts +52 -0
  186. package/dist/processor-pieces/preInference/conversationCompactorProcessor.js +264 -0
  187. package/dist/processor-pieces/preInference/conversationContinuityProcessor.d.ts +49 -0
  188. package/dist/processor-pieces/preInference/conversationContinuityProcessor.js +293 -0
  189. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +35 -0
  190. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +255 -0
  191. package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.d.ts +7 -0
  192. package/dist/processor-pieces/preInferenceProcessors/conversationCompaction.js +31 -0
  193. package/dist/processor-pieces/preInferenceProcessors/index.d.ts +1 -0
  194. package/dist/processor-pieces/preInferenceProcessors/index.js +2 -0
  195. package/dist/processor-pieces/preToolCall/index.d.ts +9 -0
  196. package/dist/processor-pieces/preToolCall/index.js +18 -0
  197. package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.d.ts +58 -0
  198. package/dist/processor-pieces/preToolCall/localToolInterceptorProcessor.js +444 -0
  199. package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.d.ts +44 -0
  200. package/dist/processor-pieces/preToolCall/toolParameterModifierProcessor.js +367 -0
  201. package/dist/processor-pieces/preToolCall/toolValidationProcessor.d.ts +58 -0
  202. package/dist/processor-pieces/preToolCall/toolValidationProcessor.js +391 -0
  203. package/dist/processor-pieces/pretoolCallProcessors/index.d.ts +1 -0
  204. package/dist/processor-pieces/pretoolCallProcessors/index.js +2 -0
  205. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.d.ts +41 -0
  206. package/dist/processor-pieces/processors/advancedLoopDetectionProcessor.js +197 -0
  207. package/dist/processor-pieces/processors/chatCompressionProcessor.d.ts +26 -0
  208. package/dist/processor-pieces/processors/chatCompressionProcessor.js +90 -0
  209. package/dist/processor-pieces/processors/chatRecordingProcessor.d.ts +81 -0
  210. package/dist/processor-pieces/processors/chatRecordingProcessor.js +329 -0
  211. package/dist/processor-pieces/processors/contextManagementProcessor.d.ts +40 -0
  212. package/dist/processor-pieces/processors/contextManagementProcessor.js +305 -0
  213. package/dist/processor-pieces/processors/loopDetectionProcessor.d.ts +30 -0
  214. package/dist/processor-pieces/processors/loopDetectionProcessor.js +137 -0
  215. package/dist/processor-pieces/processors/responseValidationProcessor.d.ts +30 -0
  216. package/dist/processor-pieces/processors/responseValidationProcessor.js +228 -0
  217. package/dist/processor-pieces/processors/telemetryProcessor.d.ts +99 -0
  218. package/dist/processor-pieces/processors/telemetryProcessor.js +311 -0
  219. package/dist/processor-pieces/processors/tokenManagementProcessor.d.ts +37 -0
  220. package/dist/processor-pieces/processors/tokenManagementProcessor.js +178 -0
  221. package/dist/processor-pieces/processors/toolExecutionProcessor.d.ts +43 -0
  222. package/dist/processor-pieces/processors/toolExecutionProcessor.js +207 -0
  223. package/dist/processor-pieces/tools/fileTools.d.ts +26 -0
  224. package/dist/processor-pieces/tools/fileTools.js +162 -0
  225. package/dist/processor-pieces/utils/messageModifierHelper.d.ts +4 -0
  226. package/dist/processor-pieces/utils/messageModifierHelper.js +58 -0
  227. package/dist/types/commonTypes.d.ts +4 -0
  228. package/dist/types/processorTypes.d.ts +67 -0
  229. package/dist/types/processorTypes.js +58 -0
  230. package/dist/unified/agent/agent.d.ts +17 -0
  231. package/dist/unified/agent/agent.js +79 -0
  232. package/dist/unified/agent/team.d.ts +2 -0
  233. package/dist/unified/agent/team.js +6 -0
  234. package/dist/unified/agent/tool.d.ts +99 -0
  235. package/dist/unified/agent/tool.js +440 -0
  236. package/dist/unified/agent/tools.d.ts +44 -0
  237. package/dist/unified/agent/tools.js +487 -0
  238. package/dist/unified/agent/workflow.d.ts +24 -0
  239. package/dist/unified/agent/workflow.js +275 -0
  240. package/dist/unified/agent/workflowControls.d.ts +11 -0
  241. package/dist/unified/agent/workflowControls.js +20 -0
  242. package/dist/unified/agent/workflowSteps.d.ts +63 -0
  243. package/dist/unified/agent/workflowSteps.js +284 -0
  244. package/dist/unified/base/agentStep.d.ts +32 -0
  245. package/dist/unified/base/agentStep.js +96 -0
  246. package/dist/unified/base/create/createInitialPromptGenerators.d.ts +5 -0
  247. package/dist/unified/base/create/createInitialPromptGenerators.js +17 -0
  248. package/dist/unified/base/index.d.ts +5 -0
  249. package/dist/unified/base/index.js +13 -0
  250. package/dist/unified/base/initialPromptGenerator.d.ts +48 -0
  251. package/dist/unified/base/initialPromptGenerator.js +118 -0
  252. package/dist/unified/base/responseExecutor.d.ts +36 -0
  253. package/dist/unified/base/responseExecutor.js +283 -0
  254. package/dist/unified/examples/agentExample.d.ts +46 -0
  255. package/dist/unified/examples/agentExample.js +464 -0
  256. package/dist/unified/examples/documentationPatternExample.d.ts +10 -0
  257. package/dist/unified/examples/documentationPatternExample.js +385 -0
  258. package/dist/unified/examples/followUpProcessorsExample.d.ts +45 -0
  259. package/dist/unified/examples/followUpProcessorsExample.js +311 -0
  260. package/dist/unified/examples/orchestratorExample.d.ts +16 -0
  261. package/dist/unified/examples/orchestratorExample.js +415 -0
  262. package/dist/unified/examples/preToolCallProcessorsExample.d.ts +36 -0
  263. package/dist/unified/examples/preToolCallProcessorsExample.js +458 -0
  264. package/dist/unified/examples/workflowExample.d.ts +12 -0
  265. package/dist/unified/examples/workflowExample.js +497 -0
  266. package/dist/unified/index.d.ts +18 -0
  267. package/dist/unified/index.js +42 -0
  268. package/dist/unified/orchestrator/orchestrator.d.ts +260 -0
  269. package/dist/unified/orchestrator/orchestrator.js +519 -0
  270. package/dist/unified/team/team.d.ts +1 -0
  271. package/dist/unified/team/team.js +2 -0
  272. package/dist/unified/types/libTypes.d.ts +378 -0
  273. package/dist/unified/types/libTypes.js +6 -0
  274. package/dist/unified/types/types.d.ts +212 -0
  275. package/dist/unified/types/types.js +43 -0
  276. package/dist/unified/utils/utils.d.ts +40 -0
  277. package/dist/unified/utils/utils.js +219 -0
  278. package/package.json +35 -13
  279. /package/dist/{agent.d.ts → builderpattern/agent.d.ts} +0 -0
  280. /package/dist/{index.js → builderpattern/index.js} +0 -0
  281. /package/dist/{promptbuilder.js → builderpattern/promptbuilder.js} +0 -0
  282. /package/dist/{systemprompt.d.ts → builderpattern/systemprompt.d.ts} +0 -0
  283. /package/dist/{systemprompt.js → builderpattern/systemprompt.js} +0 -0
  284. /package/dist/{taskInstruction.js → builderpattern/taskInstruction.js} +0 -0
  285. /package/dist/{usermessage.js → builderpattern/usermessage.js} +0 -0
@@ -0,0 +1,355 @@
1
+ "use strict";
2
+ /**
3
+ * @license
4
+ * Copyright 2025 Google LLC
5
+ * SPDX-License-Identifier: Apache-2.0
6
+ */
7
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
8
+ if (k2 === undefined) k2 = k;
9
+ var desc = Object.getOwnPropertyDescriptor(m, k);
10
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
11
+ desc = { enumerable: true, get: function() { return m[k]; } };
12
+ }
13
+ Object.defineProperty(o, k2, desc);
14
+ }) : (function(o, m, k, k2) {
15
+ if (k2 === undefined) k2 = k;
16
+ o[k2] = m[k];
17
+ }));
18
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
19
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
20
+ }) : function(o, v) {
21
+ o["default"] = v;
22
+ });
23
+ var __importStar = (this && this.__importStar) || (function () {
24
+ var ownKeys = function(o) {
25
+ ownKeys = Object.getOwnPropertyNames || function (o) {
26
+ var ar = [];
27
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
28
+ return ar;
29
+ };
30
+ return ownKeys(o);
31
+ };
32
+ return function (mod) {
33
+ if (mod && mod.__esModule) return mod;
34
+ var result = {};
35
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
36
+ __setModuleDefault(result, mod);
37
+ return result;
38
+ };
39
+ })();
40
+ Object.defineProperty(exports, "__esModule", { value: true });
41
+ exports.getFolderStructure = getFolderStructure;
42
+ exports.getDirectoryContextString = getDirectoryContextString;
43
+ exports.getEnvironmentContext = getEnvironmentContext;
44
+ exports.readMultipleFiles = readMultipleFiles;
45
+ const fs = __importStar(require("fs/promises"));
46
+ const path = __importStar(require("path"));
47
+ const MAX_ITEMS = 200;
48
+ const DEFAULT_IGNORED_FOLDERS = new Set(['node_modules', '.git', 'dist']);
49
+ /**
50
+ * Simple gitignore pattern matcher (basic implementation)
51
+ * For production use, consider using a dedicated gitignore library
52
+ */
53
+ function shouldIgnoreFile(filePath, options) {
54
+ if (!options.respectGitIgnore && !options.respectGeminiIgnore) {
55
+ return false;
56
+ }
57
+ // Basic ignore patterns - in production, you'd want to read actual .gitignore/.geminiignore files
58
+ const commonIgnorePatterns = [
59
+ /node_modules/,
60
+ /\.git/,
61
+ /dist/,
62
+ /build/,
63
+ /\.DS_Store/,
64
+ /\.env/,
65
+ /\.log$/,
66
+ /\.tmp$/,
67
+ /\.cache/
68
+ ];
69
+ return commonIgnorePatterns.some(pattern => pattern.test(filePath));
70
+ }
71
+ /**
72
+ * Reads the full folder structure recursively
73
+ */
74
+ async function readFullStructure(rootPath, options) {
75
+ const rootName = path.basename(rootPath);
76
+ const rootNode = {
77
+ name: rootName,
78
+ path: rootPath,
79
+ files: [],
80
+ subFolders: [],
81
+ totalChildren: 0,
82
+ totalFiles: 0,
83
+ };
84
+ const queue = [
85
+ { folderInfo: rootNode, currentPath: rootPath },
86
+ ];
87
+ let currentItemCount = 0;
88
+ const processedPaths = new Set();
89
+ while (queue.length > 0) {
90
+ const { folderInfo, currentPath } = queue.shift();
91
+ if (processedPaths.has(currentPath)) {
92
+ continue;
93
+ }
94
+ processedPaths.add(currentPath);
95
+ if (currentItemCount >= options.maxItems) {
96
+ continue;
97
+ }
98
+ let entries;
99
+ try {
100
+ const rawEntries = await fs.readdir(currentPath, { withFileTypes: true });
101
+ entries = rawEntries.sort((a, b) => a.name.localeCompare(b.name));
102
+ }
103
+ catch (error) {
104
+ if (error.code === 'EACCES' || error.code === 'ENOENT') {
105
+ console.warn(`Warning: Could not read directory ${currentPath}: ${error.message}`);
106
+ if (currentPath === rootPath && error.code === 'ENOENT') {
107
+ return null;
108
+ }
109
+ continue;
110
+ }
111
+ throw error;
112
+ }
113
+ const filesInCurrentDir = [];
114
+ const subFoldersInCurrentDir = [];
115
+ // Process files first
116
+ for (const entry of entries) {
117
+ if (entry.isFile()) {
118
+ if (currentItemCount >= options.maxItems) {
119
+ folderInfo.hasMoreFiles = true;
120
+ break;
121
+ }
122
+ const fileName = entry.name;
123
+ const filePath = path.join(currentPath, fileName);
124
+ if (shouldIgnoreFile(filePath, options)) {
125
+ continue;
126
+ }
127
+ if (!options.fileIncludePattern || options.fileIncludePattern.test(fileName)) {
128
+ filesInCurrentDir.push(fileName);
129
+ currentItemCount++;
130
+ folderInfo.totalFiles++;
131
+ folderInfo.totalChildren++;
132
+ }
133
+ }
134
+ }
135
+ folderInfo.files = filesInCurrentDir;
136
+ // Process directories
137
+ for (const entry of entries) {
138
+ if (entry.isDirectory()) {
139
+ if (currentItemCount >= options.maxItems) {
140
+ folderInfo.hasMoreSubfolders = true;
141
+ break;
142
+ }
143
+ const subFolderName = entry.name;
144
+ const subFolderPath = path.join(currentPath, subFolderName);
145
+ if (options.ignoredFolders.has(subFolderName) || shouldIgnoreFile(subFolderPath, options)) {
146
+ const ignoredSubFolder = {
147
+ name: subFolderName,
148
+ path: subFolderPath,
149
+ files: [],
150
+ subFolders: [],
151
+ totalChildren: 0,
152
+ totalFiles: 0,
153
+ isIgnored: true,
154
+ };
155
+ subFoldersInCurrentDir.push(ignoredSubFolder);
156
+ currentItemCount++;
157
+ folderInfo.totalChildren++;
158
+ continue;
159
+ }
160
+ const subFolderNode = {
161
+ name: subFolderName,
162
+ path: subFolderPath,
163
+ files: [],
164
+ subFolders: [],
165
+ totalChildren: 0,
166
+ totalFiles: 0,
167
+ };
168
+ subFoldersInCurrentDir.push(subFolderNode);
169
+ currentItemCount++;
170
+ folderInfo.totalChildren++;
171
+ queue.push({ folderInfo: subFolderNode, currentPath: subFolderPath });
172
+ }
173
+ }
174
+ folderInfo.subFolders = subFoldersInCurrentDir;
175
+ }
176
+ return rootNode;
177
+ }
178
+ /**
179
+ * Formats a folder structure into a readable string representation
180
+ */
181
+ function formatFolderStructure(folderInfo, prefix = '', isLast = true) {
182
+ const connector = isLast ? '└── ' : '├── ';
183
+ const extension = isLast ? ' ' : '│ ';
184
+ let result = `${prefix}${connector}${folderInfo.name}`;
185
+ if (folderInfo.isIgnored) {
186
+ result += ' (ignored)';
187
+ }
188
+ result += '\n';
189
+ // Add files
190
+ const allFiles = [...folderInfo.files];
191
+ if (folderInfo.hasMoreFiles) {
192
+ allFiles.push('...');
193
+ }
194
+ allFiles.forEach((file, index) => {
195
+ const isLastFile = index === allFiles.length - 1 && folderInfo.subFolders.length === 0;
196
+ const fileConnector = isLastFile ? '└── ' : '├── ';
197
+ result += `${prefix}${extension}${fileConnector}${file}\n`;
198
+ });
199
+ // Add subfolders
200
+ folderInfo.subFolders.forEach((subFolder, index) => {
201
+ const isLastSubFolder = index === folderInfo.subFolders.length - 1;
202
+ result += formatFolderStructure(subFolder, prefix + extension, isLastSubFolder);
203
+ });
204
+ if (folderInfo.hasMoreSubfolders) {
205
+ const moreConnector = '└── ';
206
+ result += `${prefix}${extension}${moreConnector}...\n`;
207
+ }
208
+ return result;
209
+ }
210
+ /**
211
+ * Standalone version of getFolderStructure
212
+ */
213
+ async function getFolderStructure(targetPath, options = {}) {
214
+ var _a, _b, _c, _d, _e;
215
+ const mergedOptions = {
216
+ maxItems: (_a = options.maxItems) !== null && _a !== void 0 ? _a : MAX_ITEMS,
217
+ ignoredFolders: (_b = options.ignoredFolders) !== null && _b !== void 0 ? _b : DEFAULT_IGNORED_FOLDERS,
218
+ fileIncludePattern: (_c = options.fileIncludePattern) !== null && _c !== void 0 ? _c : /.*/,
219
+ respectGitIgnore: (_d = options.respectGitIgnore) !== null && _d !== void 0 ? _d : true,
220
+ respectGeminiIgnore: (_e = options.respectGeminiIgnore) !== null && _e !== void 0 ? _e : true,
221
+ };
222
+ try {
223
+ const folderInfo = await readFullStructure(targetPath, mergedOptions);
224
+ if (!folderInfo) {
225
+ return `Error: Directory not found or inaccessible: ${targetPath}`;
226
+ }
227
+ return formatFolderStructure(folderInfo).trim();
228
+ }
229
+ catch (error) {
230
+ return `Error reading folder structure: ${error.message}`;
231
+ }
232
+ }
233
+ /**
234
+ * Standalone version of getDirectoryContextString
235
+ */
236
+ async function getDirectoryContextString(workspaceDirectories, options = {}) {
237
+ const folderStructures = await Promise.all(workspaceDirectories.map((dir) => getFolderStructure(dir, options)));
238
+ const folderStructure = folderStructures.join('\n');
239
+ let workingDirPreamble;
240
+ if (workspaceDirectories.length === 1) {
241
+ workingDirPreamble = `I'm currently working in the directory: ${workspaceDirectories[0]}`;
242
+ }
243
+ else {
244
+ const dirList = workspaceDirectories.map((dir) => ` - ${dir}`).join('\n');
245
+ workingDirPreamble = `I'm currently working in the following directories:\n${dirList}`;
246
+ }
247
+ return `${workingDirPreamble}
248
+ Here is the folder structure of the current working directories:
249
+
250
+ ${folderStructure}`;
251
+ }
252
+ /**
253
+ * Standalone version of getEnvironmentContext
254
+ */
255
+ async function getEnvironmentContext(options) {
256
+ const today = new Date().toLocaleDateString(undefined, {
257
+ weekday: 'long',
258
+ year: 'numeric',
259
+ month: 'long',
260
+ day: 'numeric',
261
+ });
262
+ const platform = process.platform;
263
+ const directoryContext = await getDirectoryContextString(options.workspaceDirectories, {
264
+ maxItems: options.maxItems,
265
+ ignoredFolders: options.ignoredFolders,
266
+ fileIncludePattern: options.fileIncludePattern,
267
+ respectGitIgnore: options.respectGitIgnore,
268
+ respectGeminiIgnore: options.respectGeminiIgnore,
269
+ });
270
+ const context = `
271
+ This is the Gemini CLI. We are setting up the context for our chat.
272
+ Today's date is ${today}.
273
+ My operating system is: ${platform}
274
+ ${directoryContext}
275
+ `.trim();
276
+ const initialParts = [{ text: context }];
277
+ // Add full file context if requested
278
+ if (options.includeFullContext) {
279
+ try {
280
+ // This is a simplified version - in the original, this would use read_many_files tool
281
+ // For standalone use, you might want to implement your own file reading logic
282
+ const fullContextNote = `
283
+ --- Full File Context (Standalone Version) ---
284
+ Note: Full file context reading would require implementing file reading logic
285
+ based on your specific needs. The original implementation uses the read_many_files tool
286
+ from the Gemini CLI tool registry.
287
+ `;
288
+ initialParts.push({ text: fullContextNote });
289
+ }
290
+ catch (error) {
291
+ console.error('Error reading full file context:', error);
292
+ initialParts.push({
293
+ text: '\n--- Error reading full file context ---',
294
+ });
295
+ }
296
+ }
297
+ return initialParts;
298
+ }
299
+ /**
300
+ * Utility function to read multiple files (basic implementation for full context)
301
+ * This is a simplified version - extend as needed for your use case
302
+ */
303
+ async function readMultipleFiles(basePath, patterns = ['**/*'], options = {}) {
304
+ // This is a basic implementation - for production use, consider using a glob library
305
+ // like 'glob' or 'fast-glob' for pattern matching
306
+ try {
307
+ const files = [];
308
+ async function collectFiles(dirPath, currentDepth = 0) {
309
+ var _a;
310
+ if (currentDepth > 10)
311
+ return; // Prevent infinite recursion
312
+ try {
313
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
314
+ for (const entry of entries) {
315
+ const fullPath = path.join(dirPath, entry.name);
316
+ if (shouldIgnoreFile(fullPath, options)) {
317
+ continue;
318
+ }
319
+ if (entry.isFile()) {
320
+ files.push(fullPath);
321
+ }
322
+ else if (entry.isDirectory() && !((_a = options.ignoredFolders) === null || _a === void 0 ? void 0 : _a.has(entry.name))) {
323
+ await collectFiles(fullPath, currentDepth + 1);
324
+ }
325
+ }
326
+ }
327
+ catch (error) {
328
+ // Skip directories we can't read
329
+ console.warn(`Warning: Could not read directory ${dirPath}: ${error.message}`);
330
+ }
331
+ }
332
+ await collectFiles(basePath);
333
+ // Read file contents (limit to reasonable size)
334
+ const fileContents = [];
335
+ for (const filePath of files.slice(0, 100)) { // Limit to first 100 files
336
+ try {
337
+ const stats = await fs.stat(filePath);
338
+ if (stats.size > 100 * 1024) { // Skip files larger than 100KB
339
+ fileContents.push(`${filePath}: [File too large, skipped]`);
340
+ continue;
341
+ }
342
+ const content = await fs.readFile(filePath, 'utf-8');
343
+ const relativePath = path.relative(basePath, filePath);
344
+ fileContents.push(`--- ${relativePath} ---\n${content}\n`);
345
+ }
346
+ catch (error) {
347
+ fileContents.push(`${filePath}: [Error reading file: ${error.message}]`);
348
+ }
349
+ }
350
+ return fileContents.join('\n');
351
+ }
352
+ catch (error) {
353
+ return `Error reading multiple files: ${error.message}`;
354
+ }
355
+ }
@@ -0,0 +1,26 @@
1
+ import { ProcessedMessage } from "@codebolt/types/agent";
2
+ import { BaseMessageModifier } from "../base";
3
+ import { FlatUserMessage } from "@codebolt/types/sdk";
4
+ export interface EnvironmentContextOptions {
5
+ enableFullContext?: boolean;
6
+ maxFiles?: number;
7
+ maxFileSize?: number;
8
+ includePatterns?: string[];
9
+ excludePatterns?: string[];
10
+ }
11
+ export declare class EnvironmentContextModifier extends BaseMessageModifier {
12
+ private readonly options;
13
+ private readonly defaultExcludePatterns;
14
+ constructor(options?: EnvironmentContextOptions);
15
+ modify(originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
16
+ private generateFullContext;
17
+ private findRelevantFiles;
18
+ private walkDirectory;
19
+ private isExcluded;
20
+ private isIncluded;
21
+ private matchesPattern;
22
+ private countContextFiles;
23
+ enableFullContext(): void;
24
+ disableFullContext(): void;
25
+ isFullContextEnabled(): boolean;
26
+ }
@@ -0,0 +1,260 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ var __importDefault = (this && this.__importDefault) || function (mod) {
36
+ return (mod && mod.__esModule) ? mod : { "default": mod };
37
+ };
38
+ Object.defineProperty(exports, "__esModule", { value: true });
39
+ exports.EnvironmentContextModifier = void 0;
40
+ const base_1 = require("../base");
41
+ const path = __importStar(require("path"));
42
+ const fs = __importStar(require("fs"));
43
+ const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
44
+ class EnvironmentContextModifier extends base_1.BaseMessageModifier {
45
+ constructor(options = {}) {
46
+ super();
47
+ this.defaultExcludePatterns = [
48
+ 'node_modules/**',
49
+ '.git/**',
50
+ 'dist/**',
51
+ 'build/**',
52
+ '*.log',
53
+ '*.tmp',
54
+ '.DS_Store',
55
+ 'coverage/**',
56
+ '.next/**',
57
+ '.nuxt/**',
58
+ '.codebolt',
59
+ '.codebolt/**',
60
+ ];
61
+ this.options = {
62
+ enableFullContext: options.enableFullContext || false,
63
+ maxFiles: options.maxFiles || 100,
64
+ maxFileSize: options.maxFileSize || 100 * 1024, // 100KB per file
65
+ includePatterns: options.includePatterns || ['**/*.ts', '**/*.js', '**/*.json', '**/*.md', '**/*.txt', '**/*.yml', '**/*.yaml'],
66
+ excludePatterns: [...this.defaultExcludePatterns, ...(options.excludePatterns || [])]
67
+ };
68
+ }
69
+ async modify(originalRequest, createdMessage) {
70
+ try {
71
+ // Get current date formatted to user's locale
72
+ const today = new Date().toLocaleDateString(undefined, {
73
+ weekday: 'long',
74
+ year: 'numeric',
75
+ month: 'long',
76
+ day: 'numeric',
77
+ });
78
+ const platform = process.platform;
79
+ const { projectPath } = await codeboltjs_1.default.project.getProjectPath();
80
+ if (!projectPath) {
81
+ return createdMessage;
82
+ }
83
+ const currentDir = projectPath;
84
+ // Get basic directory listing
85
+ let directoryListing = '';
86
+ try {
87
+ const files = await fs.promises.readdir(currentDir);
88
+ const fileList = files.slice(0, 20).join(', '); // Limit to first 20 files
89
+ const moreFiles = files.length > 20 ? ` ... and ${files.length - 20} more files` : '';
90
+ directoryListing = `Files in current directory: ${fileList}${moreFiles}`;
91
+ }
92
+ catch (error) {
93
+ directoryListing = 'Unable to read current directory';
94
+ }
95
+ const environmentContext = `
96
+ This is the CodeBolt AI Agent. Setting up context for our chat.
97
+ Today's date is ${today} (formatted according to the user's locale).
98
+ Operating system: ${platform}
99
+ Current working directory: ${currentDir}
100
+ ${directoryListing}
101
+ `.trim();
102
+ // Prepare context parts (same as gemini-cli)
103
+ const contextParts = [environmentContext];
104
+ // Add full file context if enabled (just like gemini-cli does)
105
+ if (this.options.enableFullContext) {
106
+ try {
107
+ const fullContextContent = await this.generateFullContext(currentDir);
108
+ if (fullContextContent) {
109
+ contextParts.push(`\n--- Full File Context ---\n${fullContextContent}`);
110
+ }
111
+ }
112
+ catch (error) {
113
+ console.error('Error reading full file context:', error);
114
+ contextParts.push('\n--- Error reading full file context ---');
115
+ }
116
+ }
117
+ const finalContent = contextParts.join('\n\n');
118
+ const contextMessage = {
119
+ role: 'user',
120
+ content: finalContent
121
+ };
122
+ // Push the context message to the messages array
123
+ const messages = [...createdMessage.message.messages];
124
+ messages.push(contextMessage);
125
+ return Promise.resolve({
126
+ message: {
127
+ ...createdMessage.message,
128
+ messages
129
+ },
130
+ metadata: {
131
+ ...createdMessage.metadata,
132
+ environmentContextAdded: true,
133
+ fullContextAdded: this.options.enableFullContext,
134
+ contextFilesCount: this.options.enableFullContext ? await this.countContextFiles(currentDir) : 0,
135
+ environmentInfo: {
136
+ date: today,
137
+ platform,
138
+ currentDir
139
+ }
140
+ }
141
+ });
142
+ }
143
+ catch (error) {
144
+ console.error('Error in EnvironmentContextModifier:', error);
145
+ return createdMessage;
146
+ }
147
+ }
148
+ // Full context methods (integrated like gemini-cli)
149
+ async generateFullContext(basePath) {
150
+ try {
151
+ const files = await this.findRelevantFiles(basePath);
152
+ const contextParts = [];
153
+ let processedFiles = 0;
154
+ for (const filePath of files) {
155
+ if (processedFiles >= this.options.maxFiles) {
156
+ contextParts.push(`\n... (${files.length - processedFiles} more files not shown due to limit)\n`);
157
+ break;
158
+ }
159
+ try {
160
+ const relativePath = path.relative(basePath, filePath);
161
+ const stats = await fs.promises.stat(filePath);
162
+ // Skip files that are too large
163
+ if (stats.size > this.options.maxFileSize) {
164
+ contextParts.push(`--- ${relativePath} ---\n[File too large: ${stats.size} bytes]\n`);
165
+ processedFiles++;
166
+ continue;
167
+ }
168
+ const content = await fs.promises.readFile(filePath, 'utf-8');
169
+ contextParts.push(`--- ${relativePath} ---\n${content}\n`);
170
+ processedFiles++;
171
+ }
172
+ catch (error) {
173
+ const relativePath = path.relative(basePath, filePath);
174
+ contextParts.push(`--- ${relativePath} ---\n[Error reading file: ${error instanceof Error ? error.message : 'Unknown error'}]\n`);
175
+ processedFiles++;
176
+ }
177
+ }
178
+ return contextParts.join('\n');
179
+ }
180
+ catch (error) {
181
+ console.error('Error generating full context:', error);
182
+ return '';
183
+ }
184
+ }
185
+ async findRelevantFiles(basePath) {
186
+ const files = [];
187
+ try {
188
+ await this.walkDirectory(basePath, files, basePath);
189
+ return files.sort();
190
+ }
191
+ catch (error) {
192
+ console.error('Error finding relevant files:', error);
193
+ return [];
194
+ }
195
+ }
196
+ async walkDirectory(dir, files, basePath) {
197
+ try {
198
+ const entries = await fs.promises.readdir(dir, { withFileTypes: true });
199
+ for (const entry of entries) {
200
+ const fullPath = path.join(dir, entry.name);
201
+ const relativePath = path.relative(basePath, fullPath);
202
+ // Check exclusion patterns
203
+ if (this.isExcluded(relativePath)) {
204
+ continue;
205
+ }
206
+ if (entry.isDirectory()) {
207
+ await this.walkDirectory(fullPath, files, basePath);
208
+ }
209
+ else if (entry.isFile()) {
210
+ // Check inclusion patterns
211
+ if (this.isIncluded(relativePath)) {
212
+ files.push(fullPath);
213
+ }
214
+ }
215
+ }
216
+ }
217
+ catch (error) {
218
+ // Skip directories we can't read
219
+ }
220
+ }
221
+ isExcluded(relativePath) {
222
+ return this.options.excludePatterns.some(pattern => {
223
+ return this.matchesPattern(relativePath, pattern);
224
+ });
225
+ }
226
+ isIncluded(relativePath) {
227
+ return this.options.includePatterns.some(pattern => {
228
+ return this.matchesPattern(relativePath, pattern);
229
+ });
230
+ }
231
+ matchesPattern(filePath, pattern) {
232
+ // Simple glob pattern matching - in production, use a proper glob library
233
+ const regexPattern = pattern
234
+ .replace(/\*\*/g, '.*')
235
+ .replace(/\*/g, '[^/]*')
236
+ .replace(/\?/g, '.');
237
+ const regex = new RegExp(`^${regexPattern}$`);
238
+ return regex.test(filePath);
239
+ }
240
+ async countContextFiles(basePath) {
241
+ try {
242
+ const files = await this.findRelevantFiles(basePath);
243
+ return Math.min(files.length, this.options.maxFiles);
244
+ }
245
+ catch (error) {
246
+ return 0;
247
+ }
248
+ }
249
+ // Public methods to control full context
250
+ enableFullContext() {
251
+ this.options.enableFullContext = true;
252
+ }
253
+ disableFullContext() {
254
+ this.options.enableFullContext = false;
255
+ }
256
+ isFullContextEnabled() {
257
+ return this.options.enableFullContext || false;
258
+ }
259
+ }
260
+ exports.EnvironmentContextModifier = EnvironmentContextModifier;
@@ -0,0 +1,13 @@
1
+ import { FlatUserMessage } from '@codebolt/types/sdk';
2
+ import { BaseMessageModifier, ProcessedMessage } from '../../processor';
3
+ export interface HandleUrlMessageModifierOptions {
4
+ googleSearchEnabled?: boolean;
5
+ fetchUrlContent?: boolean;
6
+ }
7
+ export declare class HandleUrlMessageModifier extends BaseMessageModifier {
8
+ private readonly googleSearchEnabled;
9
+ private readonly fetchUrlContent;
10
+ constructor(options?: HandleUrlMessageModifierOptions);
11
+ modify(originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
12
+ private extractUrls;
13
+ }