@codebolt/agent 6.0.0 → 6.1.2

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 (48) hide show
  1. package/README.md +118 -153
  2. package/dist/index.d.ts +2 -0
  3. package/dist/index.js +41 -0
  4. package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +2 -4
  5. package/dist/processor-pieces/messageModifiers/contextAssemblyModifier.d.ts +81 -0
  6. package/dist/processor-pieces/messageModifiers/contextAssemblyModifier.js +316 -0
  7. package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +2 -19
  8. package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +2 -6
  9. package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +2 -7
  10. package/dist/processor-pieces/messageModifiers/ideContextModifier.js +2 -21
  11. package/dist/processor-pieces/messageModifiers/index.d.ts +3 -0
  12. package/dist/processor-pieces/messageModifiers/index.js +7 -1
  13. package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +2 -1
  14. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +34 -5
  15. package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +374 -89
  16. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +3 -0
  17. package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +50 -27
  18. package/dist/unified/agent/agent.d.ts +10 -0
  19. package/dist/unified/agent/agent.js +198 -10
  20. package/dist/unified/agent/codeboltAgent.d.ts +19 -100
  21. package/dist/unified/agent/codeboltAgent.js +209 -109
  22. package/dist/unified/base/agentStep.js +17 -17
  23. package/dist/unified/base/initialPromptGenerator.js +13 -31
  24. package/dist/unified/base/promptContext.d.ts +13 -0
  25. package/dist/unified/base/promptContext.js +213 -0
  26. package/dist/unified/base/responseExecutor.d.ts +7 -19
  27. package/dist/unified/base/responseExecutor.js +280 -259
  28. package/dist/unified/index.d.ts +9 -0
  29. package/dist/unified/index.js +20 -13
  30. package/dist/unified/services/CompressionCoordinator.d.ts +67 -0
  31. package/dist/unified/services/CompressionCoordinator.js +214 -0
  32. package/dist/unified/services/compaction/autoCompact.d.ts +52 -0
  33. package/dist/unified/services/compaction/autoCompact.js +294 -0
  34. package/dist/unified/services/compaction/compactionOrchestrator.d.ts +78 -0
  35. package/dist/unified/services/compaction/compactionOrchestrator.js +230 -0
  36. package/dist/unified/services/compaction/contextCollapse.d.ts +63 -0
  37. package/dist/unified/services/compaction/contextCollapse.js +291 -0
  38. package/dist/unified/services/compaction/microCompact.d.ts +34 -0
  39. package/dist/unified/services/compaction/microCompact.js +195 -0
  40. package/dist/unified/services/compaction/postCompactCleanup.d.ts +15 -0
  41. package/dist/unified/services/compaction/postCompactCleanup.js +37 -0
  42. package/dist/unified/services/compaction/reactiveCompact.d.ts +65 -0
  43. package/dist/unified/services/compaction/reactiveCompact.js +301 -0
  44. package/dist/unified/services/compaction/snipCompact.d.ts +31 -0
  45. package/dist/unified/services/compaction/snipCompact.js +124 -0
  46. package/dist/unified/services/compaction/types.d.ts +66 -0
  47. package/dist/unified/services/compaction/types.js +39 -0
  48. package/package.json +25 -29
@@ -0,0 +1,316 @@
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.MemoryTypeContextModifier = exports.RuleBasedContextModifier = exports.ContextAssemblyModifier = void 0;
7
+ const base_1 = require("../base");
8
+ const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
9
+ const promptContext_1 = require("../../unified/base/promptContext");
10
+ class ContextAssemblyModifier extends base_1.BaseMessageModifier {
11
+ constructor(options = {}) {
12
+ super();
13
+ this.options = {
14
+ scopeVariables: options.scopeVariables || {},
15
+ additionalVariables: options.additionalVariables,
16
+ explicitMemory: options.explicitMemory,
17
+ ruleEngineIds: options.ruleEngineIds,
18
+ constraints: options.constraints,
19
+ includeUserInput: options.includeUserInput !== false,
20
+ messageRole: options.messageRole || 'system',
21
+ validateBeforeAssembly: options.validateBeforeAssembly || false,
22
+ formatContribution: options.formatContribution,
23
+ };
24
+ }
25
+ async modify(_originalRequest, createdMessage) {
26
+ var _a, _b, _c, _d;
27
+ try {
28
+ const request = this.buildRequest(createdMessage);
29
+ // Optionally validate first
30
+ if (this.options.validateBeforeAssembly) {
31
+ const validation = await codeboltjs_1.default.contextAssembly.validate(request);
32
+ if (!validation.success || (((_a = validation.data) === null || _a === void 0 ? void 0 : _a.validation) && !validation.data.validation.valid)) {
33
+ console.warn('Context assembly validation failed:', (_c = (_b = validation.data) === null || _b === void 0 ? void 0 : _b.validation) === null || _c === void 0 ? void 0 : _c.errors);
34
+ return createdMessage;
35
+ }
36
+ }
37
+ const response = await codeboltjs_1.default.contextAssembly.getContext(request);
38
+ if (!response.success || !((_d = response.data) === null || _d === void 0 ? void 0 : _d.context)) {
39
+ console.warn('Context assembly failed:', response.error || response.message);
40
+ return createdMessage;
41
+ }
42
+ const { context } = response.data;
43
+ const contextContent = this.formatContext(context.contributions);
44
+ if (!contextContent.trim()) {
45
+ return createdMessage;
46
+ }
47
+ const contextMessage = {
48
+ role: this.options.messageRole,
49
+ content: contextContent,
50
+ };
51
+ const updatedMessage = this.options.messageRole === 'user'
52
+ ? (0, promptContext_1.appendUserContextMessage)(createdMessage, contextMessage)
53
+ : (0, promptContext_1.appendSystemContextMessage)(createdMessage, contextMessage);
54
+ return {
55
+ ...updatedMessage,
56
+ metadata: {
57
+ ...createdMessage.metadata,
58
+ contextAssemblyAdded: true,
59
+ contextAssemblyStats: {
60
+ totalTokens: context.total_tokens,
61
+ assemblyTimeMs: context.assembly_time_ms,
62
+ contributionCount: context.contributions.length,
63
+ appliedRules: context.applied_rules,
64
+ warnings: context.warnings,
65
+ },
66
+ },
67
+ };
68
+ }
69
+ catch (error) {
70
+ console.error('Error in ContextAssemblyModifier:', error);
71
+ return createdMessage;
72
+ }
73
+ }
74
+ buildRequest(createdMessage) {
75
+ const request = {
76
+ scope_variables: { ...this.options.scopeVariables },
77
+ };
78
+ if (this.options.includeUserInput) {
79
+ const userMessage = createdMessage.message.messages.find(msg => msg.role === 'user');
80
+ if (userMessage && typeof userMessage.content === 'string') {
81
+ request.input = userMessage.content;
82
+ }
83
+ }
84
+ if (this.options.additionalVariables) {
85
+ request.additional_variables = this.options.additionalVariables;
86
+ }
87
+ if (this.options.explicitMemory) {
88
+ request.explicit_memory = this.options.explicitMemory;
89
+ }
90
+ if (this.options.constraints) {
91
+ request.constraints = this.options.constraints;
92
+ }
93
+ if (this.options.ruleEngineIds) {
94
+ request.rule_engine_ids = this.options.ruleEngineIds;
95
+ }
96
+ return request;
97
+ }
98
+ formatContext(contributions) {
99
+ if (contributions.length === 0)
100
+ return '';
101
+ const formatter = this.options.formatContribution || this.defaultFormatContribution;
102
+ const parts = contributions.map(formatter);
103
+ return `## Assembled Context\n\n${parts.join('\n\n')}`;
104
+ }
105
+ defaultFormatContribution(contribution) {
106
+ return `### ${contribution.memory_label}\n${contribution.content}`;
107
+ }
108
+ /** Update scope variables at runtime */
109
+ setScopeVariables(variables) {
110
+ this.options.scopeVariables = { ...this.options.scopeVariables, ...variables };
111
+ }
112
+ /** Update additional variables at runtime */
113
+ setAdditionalVariables(variables) {
114
+ this.options.additionalVariables = { ...this.options.additionalVariables, ...variables };
115
+ }
116
+ /** Set explicit memory IDs to include */
117
+ setExplicitMemory(memoryIds) {
118
+ this.options.explicitMemory = memoryIds;
119
+ }
120
+ /** Set constraints for context assembly */
121
+ setConstraints(constraints) {
122
+ this.options.constraints = constraints;
123
+ }
124
+ }
125
+ exports.ContextAssemblyModifier = ContextAssemblyModifier;
126
+ class RuleBasedContextModifier extends base_1.BaseMessageModifier {
127
+ constructor(options = {}) {
128
+ super();
129
+ this.options = {
130
+ scopeVariables: options.scopeVariables || {},
131
+ ruleEngineIds: options.ruleEngineIds,
132
+ messageRole: options.messageRole || 'system',
133
+ constraints: options.constraints,
134
+ };
135
+ }
136
+ async modify(_originalRequest, createdMessage) {
137
+ var _a;
138
+ try {
139
+ // First evaluate rules to determine which memories to include
140
+ const userMessage = createdMessage.message.messages.find(msg => msg.role === 'user');
141
+ const input = userMessage && typeof userMessage.content === 'string' ? userMessage.content : undefined;
142
+ const request = {
143
+ scope_variables: { ...this.options.scopeVariables },
144
+ };
145
+ if (input) {
146
+ request.input = input;
147
+ }
148
+ const ruleResult = await codeboltjs_1.default.contextAssembly.evaluateRules(request, this.options.ruleEngineIds);
149
+ if (!ruleResult.success || !ruleResult.data) {
150
+ console.warn('Rule evaluation failed:', ruleResult.error || ruleResult.message);
151
+ return createdMessage;
152
+ }
153
+ const { included_memories, forced_memories } = ruleResult.data;
154
+ const memoriesToFetch = [...new Set([...included_memories, ...forced_memories])];
155
+ if (memoriesToFetch.length === 0) {
156
+ return createdMessage;
157
+ }
158
+ // Now assemble context with only the rule-determined memories
159
+ const assemblyRequest = {
160
+ scope_variables: { ...this.options.scopeVariables },
161
+ explicit_memory: memoriesToFetch,
162
+ };
163
+ if (input) {
164
+ assemblyRequest.input = input;
165
+ }
166
+ if (this.options.constraints) {
167
+ assemblyRequest.constraints = this.options.constraints;
168
+ }
169
+ const response = await codeboltjs_1.default.contextAssembly.getContext(assemblyRequest);
170
+ if (!response.success || !((_a = response.data) === null || _a === void 0 ? void 0 : _a.context)) {
171
+ console.warn('Context assembly failed after rule evaluation:', response.error);
172
+ return createdMessage;
173
+ }
174
+ const { context } = response.data;
175
+ const parts = context.contributions.map((c) => `### ${c.memory_label}\n${c.content}`);
176
+ const contextContent = `## Rule-Based Context\n\n${parts.join('\n\n')}`;
177
+ if (!contextContent.trim()) {
178
+ return createdMessage;
179
+ }
180
+ const contextMessage = {
181
+ role: this.options.messageRole,
182
+ content: contextContent,
183
+ };
184
+ const messages = [...createdMessage.message.messages, contextMessage];
185
+ return {
186
+ message: {
187
+ ...createdMessage.message,
188
+ messages,
189
+ },
190
+ metadata: {
191
+ ...createdMessage.metadata,
192
+ ruleBasedContextAdded: true,
193
+ ruleEvaluation: {
194
+ matchedRules: ruleResult.data.matched_rules,
195
+ includedMemories: included_memories,
196
+ excludedMemories: ruleResult.data.excluded_memories,
197
+ forcedMemories: forced_memories,
198
+ },
199
+ contextAssemblyStats: {
200
+ totalTokens: context.total_tokens,
201
+ assemblyTimeMs: context.assembly_time_ms,
202
+ contributionCount: context.contributions.length,
203
+ },
204
+ },
205
+ };
206
+ }
207
+ catch (error) {
208
+ console.error('Error in RuleBasedContextModifier:', error);
209
+ return createdMessage;
210
+ }
211
+ }
212
+ /** Update scope variables at runtime */
213
+ setScopeVariables(variables) {
214
+ this.options.scopeVariables = { ...this.options.scopeVariables, ...variables };
215
+ }
216
+ /** Set specific rule engine IDs to evaluate */
217
+ setRuleEngineIds(ruleEngineIds) {
218
+ this.options.ruleEngineIds = ruleEngineIds;
219
+ }
220
+ }
221
+ exports.RuleBasedContextModifier = RuleBasedContextModifier;
222
+ class MemoryTypeContextModifier extends base_1.BaseMessageModifier {
223
+ constructor(options) {
224
+ super();
225
+ this.options = {
226
+ memoryNames: options.memoryNames,
227
+ scopeVariables: options.scopeVariables || {},
228
+ autoResolveVariables: options.autoResolveVariables || false,
229
+ messageRole: options.messageRole || 'system',
230
+ constraints: options.constraints,
231
+ };
232
+ }
233
+ async modify(_originalRequest, createdMessage) {
234
+ var _a;
235
+ try {
236
+ let additionalVariables;
237
+ // Auto-resolve required variables if enabled
238
+ if (this.options.autoResolveVariables) {
239
+ const requiredVarsResponse = await codeboltjs_1.default.contextAssembly.getRequiredVariables(this.options.memoryNames);
240
+ if (requiredVarsResponse.success && requiredVarsResponse.data) {
241
+ additionalVariables = this.resolveVariables(requiredVarsResponse.data, createdMessage);
242
+ }
243
+ }
244
+ const userMessage = createdMessage.message.messages.find(msg => msg.role === 'user');
245
+ const input = userMessage && typeof userMessage.content === 'string' ? userMessage.content : undefined;
246
+ const request = {
247
+ scope_variables: { ...this.options.scopeVariables },
248
+ explicit_memory: this.options.memoryNames,
249
+ };
250
+ if (input) {
251
+ request.input = input;
252
+ }
253
+ if (additionalVariables) {
254
+ request.additional_variables = additionalVariables;
255
+ }
256
+ if (this.options.constraints) {
257
+ request.constraints = this.options.constraints;
258
+ }
259
+ const response = await codeboltjs_1.default.contextAssembly.getContext(request);
260
+ if (!response.success || !((_a = response.data) === null || _a === void 0 ? void 0 : _a.context)) {
261
+ console.warn('Memory type context assembly failed:', response.error || response.message);
262
+ return createdMessage;
263
+ }
264
+ const { context } = response.data;
265
+ const parts = context.contributions.map((c) => `### ${c.memory_label}\n${c.content}`);
266
+ const contextContent = parts.join('\n\n');
267
+ if (!contextContent.trim()) {
268
+ return createdMessage;
269
+ }
270
+ const contextMessage = {
271
+ role: this.options.messageRole,
272
+ content: contextContent,
273
+ };
274
+ const messages = [...createdMessage.message.messages, contextMessage];
275
+ return {
276
+ message: {
277
+ ...createdMessage.message,
278
+ messages,
279
+ },
280
+ metadata: {
281
+ ...createdMessage.metadata,
282
+ memoryTypeContextAdded: true,
283
+ memoryNames: this.options.memoryNames,
284
+ contextAssemblyStats: {
285
+ totalTokens: context.total_tokens,
286
+ assemblyTimeMs: context.assembly_time_ms,
287
+ contributionCount: context.contributions.length,
288
+ },
289
+ },
290
+ };
291
+ }
292
+ catch (error) {
293
+ console.error('Error in MemoryTypeContextModifier:', error);
294
+ return createdMessage;
295
+ }
296
+ }
297
+ resolveVariables(requiredVars, createdMessage) {
298
+ const resolved = {};
299
+ for (const [key, _spec] of Object.entries(requiredVars.additional_variables)) {
300
+ // Try to resolve from existing metadata
301
+ if (createdMessage.metadata && key in createdMessage.metadata) {
302
+ resolved[key] = createdMessage.metadata[key];
303
+ }
304
+ }
305
+ return resolved;
306
+ }
307
+ /** Update memory names to fetch */
308
+ setMemoryNames(memoryNames) {
309
+ this.options.memoryNames = memoryNames;
310
+ }
311
+ /** Update scope variables at runtime */
312
+ setScopeVariables(variables) {
313
+ this.options.scopeVariables = { ...this.options.scopeVariables, ...variables };
314
+ }
315
+ }
316
+ exports.MemoryTypeContextModifier = MemoryTypeContextModifier;
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.CoreSystemPromptModifier = void 0;
4
4
  const base_1 = require("../base");
5
+ const promptContext_1 = require("../../unified/base/promptContext");
5
6
  class CoreSystemPromptModifier extends base_1.BaseMessageModifier {
6
7
  constructor(options = {}) {
7
8
  super();
@@ -12,26 +13,8 @@ class CoreSystemPromptModifier extends base_1.BaseMessageModifier {
12
13
  // Get user memory from metadata or options
13
14
  const userMemory = ((_a = createdMessage.metadata) === null || _a === void 0 ? void 0 : _a['userMemory']) || this.options.userMemory;
14
15
  const systemPrompt = this.options.customSystemPrompt || this.getCoreSystemPrompt(userMemory);
15
- const systemMessage = {
16
- role: 'system',
17
- content: systemPrompt
18
- };
19
- // Find existing system message or add new one
20
- const messages = [...createdMessage.message.messages];
21
- const systemMessageIndex = messages.findIndex(msg => msg.role === 'system');
22
- if (systemMessageIndex !== -1) {
23
- // Replace existing system message
24
- messages[systemMessageIndex] = systemMessage;
25
- }
26
- else {
27
- // Add new system message at the beginning
28
- messages.unshift(systemMessage);
29
- }
30
16
  return Promise.resolve({
31
- message: {
32
- ...createdMessage.message,
33
- messages
34
- },
17
+ ...(0, promptContext_1.setSystemPrompt)(createdMessage, systemPrompt),
35
18
  metadata: {
36
19
  ...createdMessage.metadata,
37
20
  coreSystemPromptAdded: true,
@@ -41,6 +41,7 @@ const base_1 = require("../base");
41
41
  const fs = __importStar(require("node:fs/promises"));
42
42
  const path = __importStar(require("node:path"));
43
43
  const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
44
+ const promptContext_1 = require("../../unified/base/promptContext");
44
45
  const MAX_ITEMS = 200;
45
46
  const TRUNCATION_INDICATOR = '...';
46
47
  const DEFAULT_IGNORED_FOLDERS = new Set(['node_modules', '.git', 'dist', 'build', '.next', '.cache', '.tmp', 'tmp']);
@@ -100,13 +101,8 @@ ${folderStructure}`;
100
101
  role: 'user', // Note: gemini-cli adds this as user message, not system
101
102
  content: directoryContext
102
103
  };
103
- // Add as user message (like gemini-cli does)
104
- const messages = [...createdMessage.message.messages, contextMessage];
105
104
  return Promise.resolve({
106
- message: {
107
- ...createdMessage.message,
108
- messages
109
- },
105
+ ...(0, promptContext_1.appendUserContextMessage)(createdMessage, contextMessage),
110
106
  metadata: {
111
107
  ...createdMessage.metadata,
112
108
  directoryContextAdded: true,
@@ -41,6 +41,7 @@ const base_1 = require("../base");
41
41
  const path = __importStar(require("path"));
42
42
  const fs = __importStar(require("fs"));
43
43
  const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
44
+ const promptContext_1 = require("../../unified/base/promptContext");
44
45
  class EnvironmentContextModifier extends base_1.BaseMessageModifier {
45
46
  constructor(options = {}) {
46
47
  super();
@@ -119,14 +120,8 @@ ${directoryListing}
119
120
  role: 'user',
120
121
  content: finalContent
121
122
  };
122
- // Push the context message to the messages array
123
- const messages = [...createdMessage.message.messages];
124
- messages.push(contextMessage);
125
123
  return Promise.resolve({
126
- message: {
127
- ...createdMessage.message,
128
- messages
129
- },
124
+ ...(0, promptContext_1.appendUserContextMessage)(createdMessage, contextMessage),
130
125
  metadata: {
131
126
  ...createdMessage.metadata,
132
127
  environmentContextAdded: true,
@@ -2,6 +2,7 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.IdeContextModifier = void 0;
4
4
  const base_1 = require("../base");
5
+ const promptContext_1 = require("../../unified/base/promptContext");
5
6
  class IdeContextModifier extends base_1.BaseMessageModifier {
6
7
  constructor(options = {}) {
7
8
  super();
@@ -29,32 +30,12 @@ class IdeContextModifier extends base_1.BaseMessageModifier {
29
30
  role: 'system',
30
31
  content: contextParts.join('\n')
31
32
  };
32
- // Find existing system message or add new one
33
- const messages = [...createdMessage.message.messages];
34
- const systemMessageIndex = messages.findIndex(msg => msg.role === 'system');
35
- if (systemMessageIndex !== -1) {
36
- // Append to existing system message
37
- const existingMessage = messages[systemMessageIndex];
38
- if (existingMessage) {
39
- messages[systemMessageIndex] = {
40
- role: existingMessage.role,
41
- content: `${existingMessage.content}\n\n${ideContextMessage.content}`
42
- };
43
- }
44
- }
45
- else {
46
- // Add new system message
47
- messages.unshift(ideContextMessage);
48
- }
49
33
  if (newIdeContext) {
50
34
  this.lastSentIdeContext = newIdeContext;
51
35
  }
52
36
  this.forceFullContext = false;
53
37
  return Promise.resolve({
54
- message: {
55
- ...createdMessage.message,
56
- messages
57
- },
38
+ ...(0, promptContext_1.appendSystemContextMessage)(createdMessage, ideContextMessage),
58
39
  metadata: {
59
40
  ...createdMessage.metadata,
60
41
  ideContextAdded: true,
@@ -9,3 +9,6 @@ export { LoopDetectionModifier, type LoopDetectionOptions } from '../postInferen
9
9
  export { ToolInjectionModifier, type ToolInjectionOptions } from './toolInjectionModifier';
10
10
  export { ChatRecordingModifier, type ChatRecordingOptions } from './chatRecordingModifier';
11
11
  export { ChatHistoryMessageModifier, type ChatHistoryMessageModifierOptions } from './chatHistoryMessageModifier';
12
+ export { ContextAssemblyModifier, type ContextAssemblyModifierOptions } from './contextAssemblyModifier';
13
+ export { RuleBasedContextModifier, type RuleBasedContextModifierOptions } from './contextAssemblyModifier';
14
+ export { MemoryTypeContextModifier, type MemoryTypeContextModifierOptions } from './contextAssemblyModifier';
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ChatHistoryMessageModifier = exports.ChatRecordingModifier = exports.ToolInjectionModifier = exports.LoopDetectionModifier = exports.MemoryImportModifier = exports.ArgumentProcessorModifier = exports.AtFileProcessorModifier = exports.IdeContextModifier = exports.DirectoryContextModifier = exports.CoreSystemPromptModifier = exports.EnvironmentContextModifier = void 0;
3
+ exports.MemoryTypeContextModifier = exports.RuleBasedContextModifier = exports.ContextAssemblyModifier = exports.ChatHistoryMessageModifier = exports.ChatRecordingModifier = exports.ToolInjectionModifier = exports.LoopDetectionModifier = exports.MemoryImportModifier = exports.ArgumentProcessorModifier = exports.AtFileProcessorModifier = exports.IdeContextModifier = exports.DirectoryContextModifier = exports.CoreSystemPromptModifier = exports.EnvironmentContextModifier = void 0;
4
4
  // Gemini-CLI equivalent modifiers
5
5
  var environmentContextModifier_1 = require("./environmentContextModifier");
6
6
  Object.defineProperty(exports, "EnvironmentContextModifier", { enumerable: true, get: function () { return environmentContextModifier_1.EnvironmentContextModifier; } });
@@ -24,3 +24,9 @@ var chatRecordingModifier_1 = require("./chatRecordingModifier");
24
24
  Object.defineProperty(exports, "ChatRecordingModifier", { enumerable: true, get: function () { return chatRecordingModifier_1.ChatRecordingModifier; } });
25
25
  var chatHistoryMessageModifier_1 = require("./chatHistoryMessageModifier");
26
26
  Object.defineProperty(exports, "ChatHistoryMessageModifier", { enumerable: true, get: function () { return chatHistoryMessageModifier_1.ChatHistoryMessageModifier; } });
27
+ var contextAssemblyModifier_1 = require("./contextAssemblyModifier");
28
+ Object.defineProperty(exports, "ContextAssemblyModifier", { enumerable: true, get: function () { return contextAssemblyModifier_1.ContextAssemblyModifier; } });
29
+ var contextAssemblyModifier_2 = require("./contextAssemblyModifier");
30
+ Object.defineProperty(exports, "RuleBasedContextModifier", { enumerable: true, get: function () { return contextAssemblyModifier_2.RuleBasedContextModifier; } });
31
+ var contextAssemblyModifier_3 = require("./contextAssemblyModifier");
32
+ Object.defineProperty(exports, "MemoryTypeContextModifier", { enumerable: true, get: function () { return contextAssemblyModifier_3.MemoryTypeContextModifier; } });
@@ -107,7 +107,8 @@ class ToolInjectionModifier extends base_1.BaseMessageModifier {
107
107
  ...createdMessage.metadata,
108
108
  toolsInjected: true,
109
109
  toolsLocation: 'Tool',
110
- toolsCount: tools.length
110
+ toolsCount: tools.length,
111
+ allowedTools: this.options.allowedTools
111
112
  }
112
113
  };
113
114
  }
@@ -121,20 +121,28 @@ export declare class ConversationCompactorModifier extends BasePostToolCallProce
121
121
  private readonly options;
122
122
  private failedCompressionAttempts;
123
123
  private hasFailedCompression;
124
+ private lastCompressionTokenCount;
125
+ private stepsSinceLastCompression;
124
126
  constructor(options?: ConversationCompactorOptions);
127
+ /**
128
+ * Calibrated characters-per-token ratio.
129
+ * Starts at 4 (rough default) but gets refined when actual API usage data is available.
130
+ */
131
+ private charsPerToken;
125
132
  /**
126
133
  * Estimates token count for a string
127
- * Uses the ~4 characters per token approximation
134
+ * Uses calibrated chars-per-token ratio (refined by actual API usage when available)
128
135
  */
129
136
  private estimateTokens;
130
137
  /**
131
- * Counts tokens for an array of messages
138
+ * Calibrates the chars-per-token ratio using actual API usage data.
139
+ * Called when rawLLMResponseMessage.usage is available to improve estimation accuracy.
132
140
  */
133
- private countMessageTokens;
141
+ private calibrateTokenEstimation;
134
142
  /**
135
- * Gets content length from a message (handles string and array content)
143
+ * Counts tokens for an array of messages
136
144
  */
137
- private getMessageContentLength;
145
+ private countMessageTokens;
138
146
  /**
139
147
  * Extracts text content from a message
140
148
  */
@@ -143,6 +151,15 @@ export declare class ConversationCompactorModifier extends BasePostToolCallProce
143
151
  * Checks if a message is a function/tool response
144
152
  */
145
153
  private isToolResponseMessage;
154
+ /**
155
+ * Finds the original user request (first non-system, non-tool user message)
156
+ */
157
+ private getOriginalUserMessage;
158
+ /**
159
+ * Inserts the original user message right after system messages if it's
160
+ * not already present in the preserved messages.
161
+ */
162
+ private ensureOriginalUserMessage;
146
163
  /**
147
164
  * Truncates content to a specified number of lines
148
165
  * Keeps first half and last half of allowed lines for context
@@ -180,6 +197,18 @@ export declare class ConversationCompactorModifier extends BasePostToolCallProce
180
197
  * Optional verification pass - asks LLM to verify and correct the summary
181
198
  */
182
199
  private verifySummary;
200
+ /**
201
+ * Extracts file paths from the "Required Files" section of a summary.
202
+ * Looks for section 9 (REQUIRED FILES) and extracts paths listed there.
203
+ */
204
+ private extractRequiredFiles;
205
+ /**
206
+ * Deduplicates repeated file reads in conversation history.
207
+ * When the same file is read multiple times, older reads are replaced with
208
+ * a short note, keeping only the latest read for each file path.
209
+ * This reduces token count before full compression kicks in.
210
+ */
211
+ private deduplicateFileReads;
183
212
  /**
184
213
  * Simple compression strategy - just removes old messages
185
214
  */