@codebolt/agent 5.0.9 → 6.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.ts +2 -0
- package/dist/index.js +41 -0
- package/dist/processor-pieces/messageModifiers/chatHistoryMessageModifier.js +2 -4
- package/dist/processor-pieces/messageModifiers/contextAssemblyModifier.d.ts +81 -0
- package/dist/processor-pieces/messageModifiers/contextAssemblyModifier.js +316 -0
- package/dist/processor-pieces/messageModifiers/coreSystemPromptModifier.js +2 -19
- package/dist/processor-pieces/messageModifiers/directoryContextModifier.js +2 -6
- package/dist/processor-pieces/messageModifiers/environmentContextModifier.js +2 -7
- package/dist/processor-pieces/messageModifiers/ideContextModifier.js +2 -21
- package/dist/processor-pieces/messageModifiers/index.d.ts +3 -0
- package/dist/processor-pieces/messageModifiers/index.js +7 -1
- package/dist/processor-pieces/messageModifiers/toolInjectionModifier.js +2 -1
- package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.d.ts +34 -5
- package/dist/processor-pieces/postToolCallProcessors/conversationCompactorModifier.js +374 -89
- package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.d.ts +3 -0
- package/dist/processor-pieces/preInferenceProcessors/chatCompressionModifier.js +50 -27
- package/dist/unified/agent/agent.d.ts +10 -0
- package/dist/unified/agent/agent.js +198 -10
- package/dist/unified/agent/codeboltAgent.d.ts +19 -100
- package/dist/unified/agent/codeboltAgent.js +209 -109
- package/dist/unified/base/agentStep.js +17 -17
- package/dist/unified/base/initialPromptGenerator.js +13 -31
- package/dist/unified/base/promptContext.d.ts +13 -0
- package/dist/unified/base/promptContext.js +213 -0
- package/dist/unified/base/responseExecutor.d.ts +7 -19
- package/dist/unified/base/responseExecutor.js +351 -258
- package/dist/unified/index.d.ts +9 -0
- package/dist/unified/index.js +20 -13
- package/dist/unified/services/CompressionCoordinator.d.ts +67 -0
- package/dist/unified/services/CompressionCoordinator.js +214 -0
- package/dist/unified/services/compaction/autoCompact.d.ts +52 -0
- package/dist/unified/services/compaction/autoCompact.js +294 -0
- package/dist/unified/services/compaction/compactionOrchestrator.d.ts +78 -0
- package/dist/unified/services/compaction/compactionOrchestrator.js +230 -0
- package/dist/unified/services/compaction/contextCollapse.d.ts +63 -0
- package/dist/unified/services/compaction/contextCollapse.js +291 -0
- package/dist/unified/services/compaction/microCompact.d.ts +34 -0
- package/dist/unified/services/compaction/microCompact.js +195 -0
- package/dist/unified/services/compaction/postCompactCleanup.d.ts +15 -0
- package/dist/unified/services/compaction/postCompactCleanup.js +37 -0
- package/dist/unified/services/compaction/reactiveCompact.d.ts +65 -0
- package/dist/unified/services/compaction/reactiveCompact.js +301 -0
- package/dist/unified/services/compaction/snipCompact.d.ts +31 -0
- package/dist/unified/services/compaction/snipCompact.js +124 -0
- package/dist/unified/services/compaction/types.d.ts +66 -0
- package/dist/unified/services/compaction/types.js +39 -0
- package/package.json +22 -30
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
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 __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
36
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.ProcessorPieces = void 0;
|
|
40
|
+
exports.ProcessorPieces = __importStar(require("./processor-pieces"));
|
|
41
|
+
__exportStar(require("./unified"), exports);
|
|
@@ -6,6 +6,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.ChatHistoryMessageModifier = void 0;
|
|
7
7
|
const base_1 = require("../base");
|
|
8
8
|
const codeboltjs_1 = __importDefault(require("@codebolt/codeboltjs"));
|
|
9
|
+
const promptContext_1 = require("../../unified/base/promptContext");
|
|
9
10
|
// Using MessageObject from SDK types for chat history messages
|
|
10
11
|
class ChatHistoryMessageModifier extends base_1.BaseMessageModifier {
|
|
11
12
|
constructor(options = {}) {
|
|
@@ -26,10 +27,7 @@ class ChatHistoryMessageModifier extends base_1.BaseMessageModifier {
|
|
|
26
27
|
}
|
|
27
28
|
// Directly use the chat history messages - they're already in MessageObject format
|
|
28
29
|
return {
|
|
29
|
-
|
|
30
|
-
...createdMessage.message,
|
|
31
|
-
messages: [...chatHistory, ...createdMessage.message.messages]
|
|
32
|
-
},
|
|
30
|
+
...(0, promptContext_1.prependTranscriptMessages)(createdMessage, chatHistory),
|
|
33
31
|
metadata: {
|
|
34
32
|
...createdMessage.metadata,
|
|
35
33
|
chatHistoryAdded: true,
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { ProcessedMessage } from "@codebolt/types/agent";
|
|
2
|
+
import { BaseMessageModifier } from "../base";
|
|
3
|
+
import { FlatUserMessage } from "@codebolt/types/sdk";
|
|
4
|
+
import type { ContextConstraints, MemoryContribution } from "@codebolt/types/lib";
|
|
5
|
+
export interface ContextAssemblyModifierOptions {
|
|
6
|
+
/** Scope variables to pass to the context assembly engine */
|
|
7
|
+
scopeVariables?: Record<string, any>;
|
|
8
|
+
/** Additional variables for memory resolution */
|
|
9
|
+
additionalVariables?: Record<string, any> | undefined;
|
|
10
|
+
/** Explicit memory IDs to include */
|
|
11
|
+
explicitMemory?: string[] | undefined;
|
|
12
|
+
/** Rule engine IDs to use for filtering */
|
|
13
|
+
ruleEngineIds?: string[] | undefined;
|
|
14
|
+
/** Constraints for context assembly */
|
|
15
|
+
constraints?: ContextConstraints | undefined;
|
|
16
|
+
/** Whether to include the user's input in the context request */
|
|
17
|
+
includeUserInput?: boolean;
|
|
18
|
+
/** Whether to inject context as system or user message */
|
|
19
|
+
messageRole?: 'system' | 'user';
|
|
20
|
+
/** Whether to validate the request before assembling */
|
|
21
|
+
validateBeforeAssembly?: boolean;
|
|
22
|
+
/** Custom formatter for memory contributions */
|
|
23
|
+
formatContribution?: ((contribution: MemoryContribution) => string) | undefined;
|
|
24
|
+
}
|
|
25
|
+
export declare class ContextAssemblyModifier extends BaseMessageModifier {
|
|
26
|
+
private readonly options;
|
|
27
|
+
constructor(options?: ContextAssemblyModifierOptions);
|
|
28
|
+
modify(_originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
|
|
29
|
+
private buildRequest;
|
|
30
|
+
private formatContext;
|
|
31
|
+
private defaultFormatContribution;
|
|
32
|
+
/** Update scope variables at runtime */
|
|
33
|
+
setScopeVariables(variables: Record<string, any>): void;
|
|
34
|
+
/** Update additional variables at runtime */
|
|
35
|
+
setAdditionalVariables(variables: Record<string, any>): void;
|
|
36
|
+
/** Set explicit memory IDs to include */
|
|
37
|
+
setExplicitMemory(memoryIds: string[]): void;
|
|
38
|
+
/** Set constraints for context assembly */
|
|
39
|
+
setConstraints(constraints: ContextConstraints): void;
|
|
40
|
+
}
|
|
41
|
+
export interface RuleBasedContextModifierOptions {
|
|
42
|
+
/** Scope variables for rule evaluation */
|
|
43
|
+
scopeVariables?: Record<string, any>;
|
|
44
|
+
/** Specific rule engine IDs to evaluate */
|
|
45
|
+
ruleEngineIds?: string[] | undefined;
|
|
46
|
+
/** Whether to inject context as system or user message */
|
|
47
|
+
messageRole?: 'system' | 'user';
|
|
48
|
+
/** Constraints for the final context assembly */
|
|
49
|
+
constraints?: ContextConstraints | undefined;
|
|
50
|
+
}
|
|
51
|
+
export declare class RuleBasedContextModifier extends BaseMessageModifier {
|
|
52
|
+
private readonly options;
|
|
53
|
+
constructor(options?: RuleBasedContextModifierOptions);
|
|
54
|
+
modify(_originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
|
|
55
|
+
/** Update scope variables at runtime */
|
|
56
|
+
setScopeVariables(variables: Record<string, any>): void;
|
|
57
|
+
/** Set specific rule engine IDs to evaluate */
|
|
58
|
+
setRuleEngineIds(ruleEngineIds: string[]): void;
|
|
59
|
+
}
|
|
60
|
+
export interface MemoryTypeContextModifierOptions {
|
|
61
|
+
/** Specific memory type names to fetch */
|
|
62
|
+
memoryNames: string[];
|
|
63
|
+
/** Scope variables for context assembly */
|
|
64
|
+
scopeVariables?: Record<string, any>;
|
|
65
|
+
/** Whether to auto-resolve required variables from the message */
|
|
66
|
+
autoResolveVariables?: boolean;
|
|
67
|
+
/** Whether to inject context as system or user message */
|
|
68
|
+
messageRole?: 'system' | 'user';
|
|
69
|
+
/** Constraints for context assembly */
|
|
70
|
+
constraints?: ContextConstraints | undefined;
|
|
71
|
+
}
|
|
72
|
+
export declare class MemoryTypeContextModifier extends BaseMessageModifier {
|
|
73
|
+
private readonly options;
|
|
74
|
+
constructor(options: MemoryTypeContextModifierOptions);
|
|
75
|
+
modify(_originalRequest: FlatUserMessage, createdMessage: ProcessedMessage): Promise<ProcessedMessage>;
|
|
76
|
+
private resolveVariables;
|
|
77
|
+
/** Update memory names to fetch */
|
|
78
|
+
setMemoryNames(memoryNames: string[]): void;
|
|
79
|
+
/** Update scope variables at runtime */
|
|
80
|
+
setScopeVariables(variables: Record<string, any>): void;
|
|
81
|
+
}
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
}
|