@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,264 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.ConversationCompactorProcessor = void 0;
7
+ const processorTypes_1 = require("../types/processorTypes");
8
+ const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
9
+ const { chatSummary } = codeboltjs_1.default;
10
+ /**
11
+ * Processor that compacts long conversations to keep them within manageable limits
12
+ * while preserving important context and recent interactions.
13
+ */
14
+ class ConversationCompactorProcessor extends processorTypes_1.BaseProcessor {
15
+ constructor(options = {}) {
16
+ super(options);
17
+ this.maxConversationLength = options.maxConversationLength || 50;
18
+ this.compactionThreshold = options.compactionThreshold || 0.8; // Compact when 80% of max length
19
+ this.preserveRecentMessages = options.preserveRecentMessages || 10;
20
+ this.preserveSystemMessages = options.preserveSystemMessages !== false;
21
+ this.preserveToolMessages = options.preserveToolMessages !== false;
22
+ this.enableSummarization = options.enableSummarization !== false;
23
+ this.enableSmartRemoval = options.enableSmartRemoval !== false;
24
+ this.compressionRatio = options.compressionRatio || 0.6; // Target 60% of original size
25
+ }
26
+ async processInput(input) {
27
+ try {
28
+ const { message, context } = input;
29
+ const messages = message.messages;
30
+ // Check if compaction is needed
31
+ const needsCompaction = this.shouldCompactConversation(messages);
32
+ if (!needsCompaction) {
33
+ return [this.createEvent('ConversationCompactionSkipped', {
34
+ reason: 'Conversation length within limits',
35
+ messageCount: messages.length,
36
+ maxLength: this.maxConversationLength
37
+ })];
38
+ }
39
+ // Perform compaction
40
+ const compactionResult = await this.compactConversation(messages, context);
41
+ // Update the message with compacted conversation
42
+ const compactedMessage = {
43
+ messages: compactionResult.compactedMessages,
44
+ metadata: {
45
+ ...message.metadata,
46
+ compactionInfo: compactionResult.info
47
+ }
48
+ };
49
+ return [
50
+ this.createEvent('ConversationCompacted', compactionResult.info),
51
+ this.createEvent('MessageModified', {
52
+ originalMessageCount: messages.length,
53
+ newMessageCount: compactionResult.compactedMessages.length,
54
+ compactedMessage
55
+ })
56
+ ];
57
+ }
58
+ catch (error) {
59
+ console.error('Error in ConversationCompactorProcessor:', error);
60
+ return [this.createEvent('ConversationCompactionError', {
61
+ error: error instanceof Error ? error.message : String(error)
62
+ })];
63
+ }
64
+ }
65
+ shouldCompactConversation(messages) {
66
+ const threshold = Math.floor(this.maxConversationLength * this.compactionThreshold);
67
+ return messages.length >= threshold;
68
+ }
69
+ async compactConversation(messages, context) {
70
+ const originalCount = messages.length;
71
+ let compactedMessages;
72
+ let compactionMethod;
73
+ // Determine the best compaction method
74
+ if (this.enableSummarization && originalCount > this.preserveRecentMessages * 2) {
75
+ compactionMethod = 'summarization';
76
+ compactedMessages = await this.compactWithSummarization(messages);
77
+ }
78
+ else if (this.enableSmartRemoval) {
79
+ compactionMethod = 'smart_removal';
80
+ compactedMessages = this.compactWithSmartRemoval(messages);
81
+ }
82
+ else {
83
+ compactionMethod = 'truncation';
84
+ compactedMessages = this.compactWithTruncation(messages);
85
+ }
86
+ const compactedCount = compactedMessages.length;
87
+ const info = {
88
+ originalMessageCount: originalCount,
89
+ compactedMessageCount: compactedCount,
90
+ compressionRatio: compactedCount / originalCount,
91
+ compactionMethod,
92
+ preservedMessages: compactedCount,
93
+ removedMessages: originalCount - compactedCount
94
+ };
95
+ return { compactedMessages, info };
96
+ }
97
+ async compactWithSummarization(messages) {
98
+ // Separate messages into categories
99
+ const systemMessages = messages.filter(m => m.role === 'system');
100
+ const recentMessages = messages.slice(-this.preserveRecentMessages);
101
+ const middleMessages = messages.slice(systemMessages.length, messages.length - this.preserveRecentMessages);
102
+ if (middleMessages.length === 0) {
103
+ return messages;
104
+ }
105
+ try {
106
+ // Create conversation text for summarization
107
+ const conversationText = middleMessages
108
+ .map(m => `${m.role}: ${typeof m.content === 'string' ? m.content : JSON.stringify(m.content)}`)
109
+ .join('\n');
110
+ // Use codeboltjs chat summary
111
+ const summary = await chatSummary.summarizeConversation(conversationText, {
112
+ maxLength: Math.floor(middleMessages.length * this.compressionRatio),
113
+ preserveImportantDetails: true
114
+ });
115
+ // Create summary message
116
+ const summaryMessage = {
117
+ role: 'system',
118
+ content: `[Conversation Summary]: ${summary}`
119
+ };
120
+ // Combine preserved messages with summary
121
+ return [
122
+ ...systemMessages,
123
+ summaryMessage,
124
+ ...recentMessages
125
+ ];
126
+ }
127
+ catch (error) {
128
+ console.warn('Summarization failed, falling back to smart removal:', error);
129
+ return this.compactWithSmartRemoval(messages);
130
+ }
131
+ }
132
+ compactWithSmartRemoval(messages) {
133
+ // Always preserve system messages
134
+ const systemMessages = messages.filter(m => m.role === 'system');
135
+ const nonSystemMessages = messages.filter(m => m.role !== 'system');
136
+ // Always preserve recent messages
137
+ const recentMessages = nonSystemMessages.slice(-this.preserveRecentMessages);
138
+ const olderMessages = nonSystemMessages.slice(0, -this.preserveRecentMessages);
139
+ if (olderMessages.length === 0) {
140
+ return messages;
141
+ }
142
+ // Calculate target count for older messages
143
+ const targetTotal = Math.floor(this.maxConversationLength * this.compressionRatio);
144
+ const preservedCount = systemMessages.length + recentMessages.length;
145
+ const targetOlderCount = Math.max(0, targetTotal - preservedCount);
146
+ if (targetOlderCount >= olderMessages.length) {
147
+ return messages;
148
+ }
149
+ // Score messages by importance
150
+ const scoredMessages = olderMessages.map((message, index) => ({
151
+ message,
152
+ score: this.calculateMessageImportance(message, index, olderMessages.length)
153
+ }));
154
+ // Sort by score (descending) and take top messages
155
+ scoredMessages.sort((a, b) => b.score - a.score);
156
+ const selectedOlderMessages = scoredMessages
157
+ .slice(0, targetOlderCount)
158
+ .map(item => item.message);
159
+ // Maintain chronological order
160
+ const selectedIndices = new Set(selectedOlderMessages.map(msg => olderMessages.indexOf(msg)));
161
+ const chronologicalOlderMessages = olderMessages.filter((_, index) => selectedIndices.has(index));
162
+ return [
163
+ ...systemMessages,
164
+ ...chronologicalOlderMessages,
165
+ ...recentMessages
166
+ ];
167
+ }
168
+ compactWithTruncation(messages) {
169
+ const targetCount = Math.floor(this.maxConversationLength * this.compressionRatio);
170
+ if (messages.length <= targetCount) {
171
+ return messages;
172
+ }
173
+ // Preserve system messages and recent messages
174
+ const systemMessages = messages.filter(m => m.role === 'system');
175
+ const nonSystemMessages = messages.filter(m => m.role !== 'system');
176
+ const recentCount = Math.min(this.preserveRecentMessages, nonSystemMessages.length);
177
+ const recentMessages = nonSystemMessages.slice(-recentCount);
178
+ const availableForOlder = targetCount - systemMessages.length - recentMessages.length;
179
+ if (availableForOlder <= 0) {
180
+ return [...systemMessages, ...recentMessages];
181
+ }
182
+ const olderMessages = nonSystemMessages.slice(0, -recentCount);
183
+ const selectedOlderMessages = olderMessages.slice(-availableForOlder);
184
+ return [
185
+ ...systemMessages,
186
+ ...selectedOlderMessages,
187
+ ...recentMessages
188
+ ];
189
+ }
190
+ calculateMessageImportance(message, index, totalCount) {
191
+ let score = 0;
192
+ // Base score for message type
193
+ switch (message.role) {
194
+ case 'system':
195
+ score += 100; // Highest priority
196
+ break;
197
+ case 'assistant':
198
+ score += 50;
199
+ break;
200
+ case 'user':
201
+ score += 40;
202
+ break;
203
+ case 'tool':
204
+ score += this.preserveToolMessages ? 60 : 20;
205
+ break;
206
+ }
207
+ // Boost score for messages with tool calls
208
+ if (message.tool_calls && message.tool_calls.length > 0) {
209
+ score += 30;
210
+ }
211
+ // Boost score for longer messages (more content)
212
+ const contentLength = typeof message.content === 'string'
213
+ ? message.content.length
214
+ : JSON.stringify(message.content).length;
215
+ score += Math.min(contentLength / 100, 20); // Max 20 points for length
216
+ // Recency bonus (more recent = higher score)
217
+ const recencyBonus = (index / totalCount) * 10;
218
+ score += recencyBonus;
219
+ // Boost for messages that contain important keywords
220
+ const importantKeywords = [
221
+ 'error', 'exception', 'failed', 'success', 'completed',
222
+ 'important', 'critical', 'warning', 'note'
223
+ ];
224
+ const contentStr = typeof message.content === 'string'
225
+ ? message.content.toLowerCase()
226
+ : JSON.stringify(message.content).toLowerCase();
227
+ const keywordMatches = importantKeywords.filter(keyword => contentStr.includes(keyword)).length;
228
+ score += keywordMatches * 5;
229
+ return score;
230
+ }
231
+ // Public methods for configuration
232
+ getMaxConversationLength() {
233
+ return this.maxConversationLength;
234
+ }
235
+ getCompactionThreshold() {
236
+ return this.compactionThreshold;
237
+ }
238
+ isCompactionNeeded(messageCount) {
239
+ return messageCount >= Math.floor(this.maxConversationLength * this.compactionThreshold);
240
+ }
241
+ getCompressionRatio() {
242
+ return this.compressionRatio;
243
+ }
244
+ // Statistics and monitoring
245
+ getProcessorStats() {
246
+ const enabledFeatures = [];
247
+ if (this.enableSummarization)
248
+ enabledFeatures.push('summarization');
249
+ if (this.enableSmartRemoval)
250
+ enabledFeatures.push('smart_removal');
251
+ if (this.preserveSystemMessages)
252
+ enabledFeatures.push('preserve_system');
253
+ if (this.preserveToolMessages)
254
+ enabledFeatures.push('preserve_tools');
255
+ return {
256
+ maxLength: this.maxConversationLength,
257
+ threshold: this.compactionThreshold,
258
+ preserveRecent: this.preserveRecentMessages,
259
+ compressionRatio: this.compressionRatio,
260
+ enabledFeatures
261
+ };
262
+ }
263
+ }
264
+ exports.ConversationCompactorProcessor = ConversationCompactorProcessor;
@@ -0,0 +1,49 @@
1
+ import { BaseProcessor, ProcessorInput, ProcessorOutput } from '../types/processorTypes';
2
+ export interface ConversationContinuityInfo {
3
+ contextLinksAdded: number;
4
+ referenceResolutionsAdded: number;
5
+ continuityEnhanced: boolean;
6
+ missingContextDetected: boolean;
7
+ conversationGapsFound: number;
8
+ }
9
+ export interface ConversationContinuityProcessorOptions {
10
+ enableContextLinking?: boolean;
11
+ enableReferenceResolution?: boolean;
12
+ enableGapDetection?: boolean;
13
+ maxContextLinks?: number;
14
+ contextLookbackWindow?: number;
15
+ enableProactiveContext?: boolean;
16
+ }
17
+ /**
18
+ * Processor that maintains conversation continuity by linking related messages,
19
+ * resolving references, and detecting context gaps in follow-up conversations.
20
+ */
21
+ export declare class ConversationContinuityProcessor extends BaseProcessor {
22
+ private readonly enableContextLinking;
23
+ private readonly enableReferenceResolution;
24
+ private readonly enableGapDetection;
25
+ private readonly maxContextLinks;
26
+ private readonly contextLookbackWindow;
27
+ private readonly enableProactiveContext;
28
+ constructor(options?: ConversationContinuityProcessorOptions);
29
+ processInput(input: ProcessorInput): Promise<ProcessorOutput[]>;
30
+ private enhanceConversationContinuity;
31
+ private addContextLinks;
32
+ private findReferencingMessages;
33
+ private generateContextLinkMessage;
34
+ private resolveReferences;
35
+ private resolveMessageReferences;
36
+ private detectAndFillGaps;
37
+ private detectConversationGaps;
38
+ private generateGapFillerMessage;
39
+ private addProactiveContext;
40
+ private calculateContinuityInfo;
41
+ setContextLookbackWindow(window: number): void;
42
+ setMaxContextLinks(max: number): void;
43
+ enableContextLinkingForSession(): void;
44
+ disableContextLinkingForSession(): void;
45
+ enableReferenceResolutionForSession(): void;
46
+ disableReferenceResolutionForSession(): void;
47
+ enableGapDetectionForSession(): void;
48
+ disableGapDetectionForSession(): void;
49
+ }
@@ -0,0 +1,293 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.ConversationContinuityProcessor = void 0;
4
+ const processorTypes_1 = require("../types/processorTypes");
5
+ /**
6
+ * Processor that maintains conversation continuity by linking related messages,
7
+ * resolving references, and detecting context gaps in follow-up conversations.
8
+ */
9
+ class ConversationContinuityProcessor extends processorTypes_1.BaseProcessor {
10
+ constructor(options = {}) {
11
+ super(options);
12
+ this.enableContextLinking = options.enableContextLinking !== false;
13
+ this.enableReferenceResolution = options.enableReferenceResolution !== false;
14
+ this.enableGapDetection = options.enableGapDetection !== false;
15
+ this.maxContextLinks = options.maxContextLinks || 5;
16
+ this.contextLookbackWindow = options.contextLookbackWindow || 20;
17
+ this.enableProactiveContext = options.enableProactiveContext !== false;
18
+ }
19
+ async processInput(input) {
20
+ try {
21
+ const { message, context } = input;
22
+ // Only process follow-up conversations
23
+ if (!(context === null || context === void 0 ? void 0 : context.followUpProcessing)) {
24
+ return [this.createEvent('ContinuityProcessingSkipped', {
25
+ reason: 'Not a follow-up conversation processing context'
26
+ })];
27
+ }
28
+ const enhancedMessage = await this.enhanceConversationContinuity(message, context);
29
+ const continuityInfo = this.calculateContinuityInfo(message, enhancedMessage, context);
30
+ return [
31
+ this.createEvent('ConversationContinuityProcessed', continuityInfo),
32
+ this.createEvent('ConversationProcessed', enhancedMessage)
33
+ ];
34
+ }
35
+ catch (error) {
36
+ console.error('Error in ConversationContinuityProcessor:', error);
37
+ return [this.createEvent('ConversationContinuityError', {
38
+ error: error instanceof Error ? error.message : String(error),
39
+ originalLength: input.message.messages.length
40
+ })];
41
+ }
42
+ }
43
+ async enhanceConversationContinuity(message, context) {
44
+ let enhancedMessages = [...message.messages];
45
+ let enhancementsAdded = 0;
46
+ // Add context links if enabled
47
+ if (this.enableContextLinking) {
48
+ const contextLinks = this.addContextLinks(enhancedMessages, context);
49
+ enhancedMessages.push(...contextLinks);
50
+ enhancementsAdded += contextLinks.length;
51
+ }
52
+ // Resolve references if enabled
53
+ if (this.enableReferenceResolution) {
54
+ enhancedMessages = this.resolveReferences(enhancedMessages, context);
55
+ }
56
+ // Detect and fill conversation gaps if enabled
57
+ if (this.enableGapDetection) {
58
+ const gapFillers = this.detectAndFillGaps(enhancedMessages, context);
59
+ enhancedMessages.push(...gapFillers);
60
+ enhancementsAdded += gapFillers.length;
61
+ }
62
+ // Add proactive context if enabled
63
+ if (this.enableProactiveContext) {
64
+ const proactiveContext = this.addProactiveContext(enhancedMessages, context);
65
+ enhancedMessages.push(...proactiveContext);
66
+ enhancementsAdded += proactiveContext.length;
67
+ }
68
+ return {
69
+ ...message,
70
+ messages: enhancedMessages,
71
+ metadata: {
72
+ ...message.metadata,
73
+ continuityEnhanced: true,
74
+ enhancementsAdded,
75
+ timestamp: new Date().toISOString()
76
+ }
77
+ };
78
+ }
79
+ addContextLinks(messages, context) {
80
+ const contextLinks = [];
81
+ const recentMessages = messages.slice(-this.contextLookbackWindow);
82
+ // Find messages that reference previous interactions
83
+ const referencingMessages = this.findReferencingMessages(recentMessages);
84
+ if (referencingMessages.length > 0) {
85
+ const linkMessage = {
86
+ role: 'system',
87
+ content: this.generateContextLinkMessage(referencingMessages, context),
88
+ name: 'context-link'
89
+ };
90
+ contextLinks.push(linkMessage);
91
+ }
92
+ return contextLinks.slice(0, this.maxContextLinks);
93
+ }
94
+ findReferencingMessages(messages) {
95
+ const referencePatterns = [
96
+ /\b(this|that|it|they|them)\b/i,
97
+ /\b(the (above|previous|last|earlier))\b/i,
98
+ /\b(as (mentioned|discussed|shown))\b/i,
99
+ /\b(from (before|earlier))\b/i,
100
+ /\b(the (file|code|result|output))\b/i
101
+ ];
102
+ return messages.filter(message => {
103
+ const content = typeof message.content === 'string'
104
+ ? message.content
105
+ : JSON.stringify(message.content);
106
+ return referencePatterns.some(pattern => pattern.test(content));
107
+ });
108
+ }
109
+ generateContextLinkMessage(referencingMessages, context) {
110
+ const messageCount = referencingMessages.length;
111
+ const toolResults = context.toolResults || [];
112
+ let linkMessage = `**Context Links:** Found ${messageCount} message${messageCount > 1 ? 's' : ''} with references to previous interactions.`;
113
+ if (toolResults.length > 0) {
114
+ linkMessage += ` Recent tool executions: ${toolResults.length} tool${toolResults.length > 1 ? 's' : ''} executed.`;
115
+ }
116
+ if (context.originalHistory && context.originalHistory.length > 0) {
117
+ linkMessage += ` Conversation history: ${context.originalHistory.length} previous messages available for reference.`;
118
+ }
119
+ return linkMessage;
120
+ }
121
+ resolveReferences(messages, context) {
122
+ return messages.map(message => {
123
+ if (message.role === 'system' || message.name === 'reference-resolution') {
124
+ return message;
125
+ }
126
+ const resolvedContent = this.resolveMessageReferences(message.content, context);
127
+ if (resolvedContent !== message.content) {
128
+ return {
129
+ ...message,
130
+ content: resolvedContent,
131
+ name: message.name || 'reference-resolved'
132
+ };
133
+ }
134
+ return message;
135
+ });
136
+ }
137
+ resolveMessageReferences(content, context) {
138
+ if (typeof content !== 'string') {
139
+ return content;
140
+ }
141
+ let resolvedContent = content;
142
+ const toolResults = context.toolResults || [];
143
+ // Resolve "the file" references
144
+ if (/\bthe file\b/i.test(resolvedContent) && toolResults.length > 0) {
145
+ const fileOperations = toolResults.filter((result) => result.tool_call_id && result.tool_call_id.includes('file'));
146
+ if (fileOperations.length === 1) {
147
+ resolvedContent = resolvedContent.replace(/\bthe file\b/gi, `the file (from recent tool execution)`);
148
+ }
149
+ }
150
+ // Resolve "the result" references
151
+ if (/\bthe result\b/i.test(resolvedContent) && toolResults.length > 0) {
152
+ resolvedContent = resolvedContent.replace(/\bthe result\b/gi, `the result (from ${toolResults.length} recent tool execution${toolResults.length > 1 ? 's' : ''})`);
153
+ }
154
+ // Resolve "it" references in context of tool operations
155
+ if (/\bit\b/i.test(resolvedContent) && toolResults.length === 1) {
156
+ const toolResult = toolResults[0];
157
+ if (toolResult.tool_call_id) {
158
+ resolvedContent = resolvedContent.replace(/\bit\b/gi, `it (referring to the tool execution result)`);
159
+ }
160
+ }
161
+ return resolvedContent;
162
+ }
163
+ detectAndFillGaps(messages, context) {
164
+ const gapFillers = [];
165
+ const gaps = this.detectConversationGaps(messages, context);
166
+ gaps.forEach(gap => {
167
+ const fillerMessage = {
168
+ role: 'system',
169
+ content: this.generateGapFillerMessage(gap, context),
170
+ name: 'gap-filler'
171
+ };
172
+ gapFillers.push(fillerMessage);
173
+ });
174
+ return gapFillers;
175
+ }
176
+ detectConversationGaps(messages, context) {
177
+ const gaps = [];
178
+ const toolResults = context.toolResults || [];
179
+ // Gap: Tool results without explanation
180
+ const unexplainedToolResults = toolResults.filter((result) => {
181
+ const hasExplanation = messages.some(msg => msg.role === 'assistant' &&
182
+ typeof msg.content === 'string' &&
183
+ msg.content.includes('result'));
184
+ return !hasExplanation;
185
+ });
186
+ if (unexplainedToolResults.length > 0) {
187
+ gaps.push({
188
+ type: 'unexplained-tool-results',
189
+ description: `${unexplainedToolResults.length} tool result(s) without explanation`,
190
+ severity: 'medium'
191
+ });
192
+ }
193
+ // Gap: Missing context for references
194
+ const unresolvedReferences = messages.filter(msg => {
195
+ const content = typeof msg.content === 'string' ? msg.content : JSON.stringify(msg.content);
196
+ return /\b(this|that|it)\b/i.test(content) && msg.role === 'user';
197
+ });
198
+ if (unresolvedReferences.length > 2) {
199
+ gaps.push({
200
+ type: 'unresolved-references',
201
+ description: `${unresolvedReferences.length} messages with unclear references`,
202
+ severity: 'low'
203
+ });
204
+ }
205
+ // Gap: Long silence after tool execution
206
+ const lastToolIndex = messages.findLastIndex(msg => msg.role === 'tool');
207
+ const lastAssistantIndex = messages.findLastIndex(msg => msg.role === 'assistant');
208
+ if (lastToolIndex > lastAssistantIndex && lastToolIndex < messages.length - 1) {
209
+ gaps.push({
210
+ type: 'missing-tool-response',
211
+ description: 'Tool execution without assistant response',
212
+ severity: 'high'
213
+ });
214
+ }
215
+ return gaps;
216
+ }
217
+ generateGapFillerMessage(gap, context) {
218
+ switch (gap.type) {
219
+ case 'unexplained-tool-results':
220
+ return `**Context Note:** There are tool execution results that may need explanation or analysis. Consider reviewing the tool outputs and their implications.`;
221
+ case 'unresolved-references':
222
+ return `**Context Note:** Some messages contain references that might be unclear. Consider providing more specific context when referring to previous interactions.`;
223
+ case 'missing-tool-response':
224
+ return `**Context Note:** Recent tool execution completed but may need assistant analysis or response to continue the conversation effectively.`;
225
+ default:
226
+ return `**Context Note:** Potential conversation gap detected: ${gap.description}`;
227
+ }
228
+ }
229
+ addProactiveContext(messages, context) {
230
+ const proactiveMessages = [];
231
+ const toolResults = context.toolResults || [];
232
+ const conversationLength = messages.length;
233
+ // Add proactive context for complex tool interactions
234
+ if (toolResults.length > 3) {
235
+ proactiveMessages.push({
236
+ role: 'system',
237
+ content: `**Proactive Context:** Multiple tools have been executed (${toolResults.length} total). This suggests a complex task that may benefit from step-by-step progress tracking.`,
238
+ name: 'proactive-context'
239
+ });
240
+ }
241
+ // Add proactive context for long conversations
242
+ if (conversationLength > 25) {
243
+ proactiveMessages.push({
244
+ role: 'system',
245
+ content: `**Proactive Context:** This is an extended conversation (${conversationLength} messages). Consider summarizing progress or breaking down remaining objectives.`,
246
+ name: 'proactive-context'
247
+ });
248
+ }
249
+ return proactiveMessages.slice(0, 2); // Limit proactive messages
250
+ }
251
+ calculateContinuityInfo(original, enhanced, context) {
252
+ const originalCount = original.messages.length;
253
+ const enhancedCount = enhanced.messages.length;
254
+ const addedMessages = enhancedCount - originalCount;
255
+ // Count different types of enhancements
256
+ const contextLinks = enhanced.messages.filter(m => m.name === 'context-link').length;
257
+ const referenceResolutions = enhanced.messages.filter(m => m.name === 'reference-resolved').length;
258
+ const gapFillers = enhanced.messages.filter(m => m.name === 'gap-filler').length;
259
+ return {
260
+ contextLinksAdded: contextLinks,
261
+ referenceResolutionsAdded: referenceResolutions,
262
+ continuityEnhanced: addedMessages > 0,
263
+ missingContextDetected: gapFillers > 0,
264
+ conversationGapsFound: gapFillers
265
+ };
266
+ }
267
+ // Public methods for configuration
268
+ setContextLookbackWindow(window) {
269
+ this.contextLookbackWindow = Math.max(5, Math.min(50, window));
270
+ }
271
+ setMaxContextLinks(max) {
272
+ this.maxContextLinks = Math.max(1, Math.min(10, max));
273
+ }
274
+ enableContextLinkingForSession() {
275
+ this.enableContextLinking = true;
276
+ }
277
+ disableContextLinkingForSession() {
278
+ this.enableContextLinking = false;
279
+ }
280
+ enableReferenceResolutionForSession() {
281
+ this.enableReferenceResolution = true;
282
+ }
283
+ disableReferenceResolutionForSession() {
284
+ this.enableReferenceResolution = false;
285
+ }
286
+ enableGapDetectionForSession() {
287
+ this.enableGapDetection = true;
288
+ }
289
+ disableGapDetectionForSession() {
290
+ this.enableGapDetection = false;
291
+ }
292
+ }
293
+ exports.ConversationContinuityProcessor = ConversationContinuityProcessor;
@@ -0,0 +1,35 @@
1
+ import { ProcessedMessage } from "@codebolt/types/agent";
2
+ import { BasePreInferenceProcessor } from "../base";
3
+ import { FlatUserMessage, MessageObject } from "@codebolt/types/sdk";
4
+ export declare enum CompressionStatus {
5
+ /** The compression was successful */
6
+ COMPRESSED = 1,
7
+ /** The compression failed due to the compression inflating the token count */
8
+ COMPRESSION_FAILED_INFLATED_TOKEN_COUNT = 2,
9
+ /** The compression failed due to an error counting tokens */
10
+ COMPRESSION_FAILED_TOKEN_COUNT_ERROR = 3,
11
+ /** The compression was not necessary and no action was taken */
12
+ NOOP = 4
13
+ }
14
+ export interface ChatCompressionInfo {
15
+ originalTokenCount: number;
16
+ newTokenCount: number;
17
+ compressionStatus: CompressionStatus;
18
+ }
19
+ export interface ChatCompressionOptions {
20
+ contextPercentageThreshold?: number;
21
+ enableCompression?: boolean;
22
+ force?: boolean;
23
+ }
24
+ export declare class ChatCompressionModifier extends BasePreInferenceProcessor {
25
+ private readonly options;
26
+ private hasFailedCompressionAttempt;
27
+ constructor(options?: ChatCompressionOptions);
28
+ modify(originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
29
+ tryCompressChat(messages: MessageObject[], force?: boolean): Promise<ChatCompressionInfo & {
30
+ compressedMessages?: MessageObject[];
31
+ }>;
32
+ private countTokens;
33
+ private generateCompressionSummary;
34
+ resetCompressionState(): void;
35
+ }