@memberjunction/ai-agents 4.4.0 → 5.0.0
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/AgentDataPreloader.js.map +1 -1
- package/dist/AgentRunner.js +4 -4
- package/dist/AgentRunner.js.map +1 -1
- package/dist/__tests__/action-changes.test.d.ts +15 -0
- package/dist/__tests__/action-changes.test.d.ts.map +1 -0
- package/dist/__tests__/action-changes.test.js +394 -0
- package/dist/__tests__/action-changes.test.js.map +1 -0
- package/dist/__tests__/agent-memory-features.test.d.ts +123 -0
- package/dist/__tests__/agent-memory-features.test.d.ts.map +1 -0
- package/dist/__tests__/agent-memory-features.test.js +596 -0
- package/dist/__tests__/agent-memory-features.test.js.map +1 -0
- package/dist/__tests__/agent-type-prompt-params.test.d.ts +14 -0
- package/dist/__tests__/agent-type-prompt-params.test.d.ts.map +1 -0
- package/dist/__tests__/agent-type-prompt-params.test.js +583 -0
- package/dist/__tests__/agent-type-prompt-params.test.js.map +1 -0
- package/dist/__tests__/chat-handling-option.test.d.ts +54 -0
- package/dist/__tests__/chat-handling-option.test.d.ts.map +1 -0
- package/dist/__tests__/chat-handling-option.test.js +222 -0
- package/dist/__tests__/chat-handling-option.test.js.map +1 -0
- package/dist/agent-context-injector.d.ts +5 -5
- package/dist/agent-context-injector.d.ts.map +1 -1
- package/dist/agent-context-injector.js +1 -1
- package/dist/agent-context-injector.js.map +1 -1
- package/dist/agent-types/base-agent-type.d.ts +5 -5
- package/dist/agent-types/base-agent-type.d.ts.map +1 -1
- package/dist/agent-types/base-agent-type.js +2 -2
- package/dist/agent-types/base-agent-type.js.map +1 -1
- package/dist/agent-types/flow-agent-type.d.ts +3 -3
- package/dist/agent-types/flow-agent-type.d.ts.map +1 -1
- package/dist/agent-types/flow-agent-type.js.map +1 -1
- package/dist/base-agent.d.ts +12 -12
- package/dist/base-agent.d.ts.map +1 -1
- package/dist/base-agent.js +10 -5
- package/dist/base-agent.js.map +1 -1
- package/dist/memory-cleanup-agent.js +4 -4
- package/dist/memory-cleanup-agent.js.map +1 -1
- package/dist/memory-manager-agent.js +4 -4
- package/dist/memory-manager-agent.js.map +1 -1
- package/dist/services/AgentEmbeddingService.d.ts +16 -0
- package/dist/services/AgentEmbeddingService.d.ts.map +1 -0
- package/dist/services/AgentEmbeddingService.js +158 -0
- package/dist/services/AgentEmbeddingService.js.map +1 -0
- package/dist/types/AgentMatchResult.d.ts +18 -0
- package/dist/types/AgentMatchResult.d.ts.map +1 -0
- package/dist/types/AgentMatchResult.js +3 -0
- package/dist/types/AgentMatchResult.js.map +1 -0
- package/package.json +12 -12
|
@@ -0,0 +1,583 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Unit tests for Agent Type Prompt Parameters functionality.
|
|
3
|
+
*
|
|
4
|
+
* These tests verify the core logic for building and merging agent type prompt params:
|
|
5
|
+
* - extractSchemaDefaults(): Extracts default values from JSON Schema
|
|
6
|
+
* - buildAgentTypePromptParams(): Merges schema defaults, agent config, and runtime overrides
|
|
7
|
+
*
|
|
8
|
+
* To run these tests, you can use ts-node:
|
|
9
|
+
* npx ts-node src/__tests__/agent-type-prompt-params.test.ts
|
|
10
|
+
*
|
|
11
|
+
* @since 2.131.0
|
|
12
|
+
*/
|
|
13
|
+
import { DEFAULT_LOOP_AGENT_PROMPT_PARAMS } from '../agent-types/loop-agent-prompt-params.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Test Helpers - Standalone implementations of the methods for testing
|
|
16
|
+
// These mirror the implementations in BaseAgent but without class dependencies
|
|
17
|
+
// ============================================================================
|
|
18
|
+
/**
|
|
19
|
+
* Extracts default values from a JSON Schema definition.
|
|
20
|
+
* Mirrors BaseAgent.extractSchemaDefaults()
|
|
21
|
+
*/
|
|
22
|
+
function extractSchemaDefaults(schemaJson) {
|
|
23
|
+
if (!schemaJson)
|
|
24
|
+
return {};
|
|
25
|
+
try {
|
|
26
|
+
const schema = JSON.parse(schemaJson);
|
|
27
|
+
const defaults = {};
|
|
28
|
+
if (schema.properties) {
|
|
29
|
+
for (const [key, prop] of Object.entries(schema.properties)) {
|
|
30
|
+
const propDef = prop;
|
|
31
|
+
if (propDef.default !== undefined) {
|
|
32
|
+
defaults[key] = propDef.default;
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return defaults;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return {};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Builds merged agent type prompt params from schema defaults,
|
|
44
|
+
* agent config, and runtime overrides.
|
|
45
|
+
* Mirrors BaseAgent.buildAgentTypePromptParams()
|
|
46
|
+
*/
|
|
47
|
+
function buildAgentTypePromptParams(agentType, agent, runtimeOverrides) {
|
|
48
|
+
// 1. Extract defaults from schema
|
|
49
|
+
const schemaDefaults = extractSchemaDefaults(agentType?.PromptParamsSchema);
|
|
50
|
+
// 2. Parse agent-level config
|
|
51
|
+
let agentParams = {};
|
|
52
|
+
if (agent.AgentTypePromptParams) {
|
|
53
|
+
try {
|
|
54
|
+
agentParams = JSON.parse(agent.AgentTypePromptParams);
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Silently handle parse errors (just like BaseAgent does)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// 3. Merge all layers (lowest to highest precedence)
|
|
61
|
+
const merged = {
|
|
62
|
+
...schemaDefaults,
|
|
63
|
+
...agentParams,
|
|
64
|
+
...(runtimeOverrides || {})
|
|
65
|
+
};
|
|
66
|
+
// 4. Apply auto-alignment for includeResponseTypeDefinition
|
|
67
|
+
// Pass the explicit config (from agent or runtime) to distinguish from schema defaults
|
|
68
|
+
const explicitResponseType = runtimeOverrides?.includeResponseTypeDefinition ||
|
|
69
|
+
agentParams.includeResponseTypeDefinition;
|
|
70
|
+
applyResponseTypeAutoAlignment(merged, explicitResponseType);
|
|
71
|
+
return merged;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Applies auto-alignment rules to includeResponseTypeDefinition based on other flags.
|
|
75
|
+
* Mirrors BaseAgent.applyResponseTypeAutoAlignment()
|
|
76
|
+
*/
|
|
77
|
+
function applyResponseTypeAutoAlignment(params, explicitResponseType) {
|
|
78
|
+
// Ensure includeResponseTypeDefinition is an object
|
|
79
|
+
if (!params.includeResponseTypeDefinition || typeof params.includeResponseTypeDefinition !== 'object') {
|
|
80
|
+
params.includeResponseTypeDefinition = {
|
|
81
|
+
payload: true,
|
|
82
|
+
responseForms: true,
|
|
83
|
+
commands: true,
|
|
84
|
+
forEach: true,
|
|
85
|
+
while: true
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
const responseType = params.includeResponseTypeDefinition;
|
|
89
|
+
// Auto-alignment mappings: docs flag → response type property
|
|
90
|
+
const alignmentMappings = [
|
|
91
|
+
{ docsFlag: 'includePayloadInPrompt', responseTypeKey: 'payload' },
|
|
92
|
+
{ docsFlag: 'includeResponseFormDocs', responseTypeKey: 'responseForms' },
|
|
93
|
+
{ docsFlag: 'includeCommandDocs', responseTypeKey: 'commands' },
|
|
94
|
+
{ docsFlag: 'includeForEachDocs', responseTypeKey: 'forEach' },
|
|
95
|
+
{ docsFlag: 'includeWhileDocs', responseTypeKey: 'while' }
|
|
96
|
+
];
|
|
97
|
+
for (const { docsFlag, responseTypeKey } of alignmentMappings) {
|
|
98
|
+
// Check if the user explicitly set this response type property
|
|
99
|
+
// (not from schema defaults, which always provide true)
|
|
100
|
+
const wasExplicitlySet = explicitResponseType &&
|
|
101
|
+
Object.prototype.hasOwnProperty.call(explicitResponseType, responseTypeKey);
|
|
102
|
+
// Auto-align: if docs flag is false AND user didn't explicitly set the response type
|
|
103
|
+
// then auto-align the response type to false
|
|
104
|
+
if (params[docsFlag] === false && !wasExplicitlySet) {
|
|
105
|
+
responseType[responseTypeKey] = false;
|
|
106
|
+
}
|
|
107
|
+
// If user explicitly set the value, respect it regardless of docs flag
|
|
108
|
+
// Otherwise default to true if not set
|
|
109
|
+
else if (responseType[responseTypeKey] === undefined) {
|
|
110
|
+
responseType[responseTypeKey] = true;
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// ============================================================================
|
|
115
|
+
// Test Framework (simple assertion-based)
|
|
116
|
+
// ============================================================================
|
|
117
|
+
let testsPassed = 0;
|
|
118
|
+
let testsFailed = 0;
|
|
119
|
+
function assert(condition, message) {
|
|
120
|
+
if (condition) {
|
|
121
|
+
console.log(` ✅ ${message}`);
|
|
122
|
+
testsPassed++;
|
|
123
|
+
}
|
|
124
|
+
else {
|
|
125
|
+
console.log(` ❌ ${message}`);
|
|
126
|
+
testsFailed++;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
function assertDeepEqual(actual, expected, message) {
|
|
130
|
+
const actualStr = JSON.stringify(actual, null, 2);
|
|
131
|
+
const expectedStr = JSON.stringify(expected, null, 2);
|
|
132
|
+
if (actualStr === expectedStr) {
|
|
133
|
+
console.log(` ✅ ${message}`);
|
|
134
|
+
testsPassed++;
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
console.log(` ❌ ${message}`);
|
|
138
|
+
console.log(` Expected: ${expectedStr}`);
|
|
139
|
+
console.log(` Actual: ${actualStr}`);
|
|
140
|
+
testsFailed++;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
function testGroup(name, fn) {
|
|
144
|
+
console.log(`\n📋 ${name}`);
|
|
145
|
+
fn();
|
|
146
|
+
}
|
|
147
|
+
// ============================================================================
|
|
148
|
+
// Sample Loop Agent Type Schema (matches the migration)
|
|
149
|
+
// ============================================================================
|
|
150
|
+
const LOOP_AGENT_TYPE_SCHEMA = JSON.stringify({
|
|
151
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
152
|
+
"type": "object",
|
|
153
|
+
"description": "Prompt parameters for Loop Agent Type.",
|
|
154
|
+
"properties": {
|
|
155
|
+
"includeResponseTypeDefinition": {
|
|
156
|
+
"type": "object",
|
|
157
|
+
"description": "Control response type definition inclusion.",
|
|
158
|
+
"default": {
|
|
159
|
+
"payload": true,
|
|
160
|
+
"responseForms": true,
|
|
161
|
+
"commands": true,
|
|
162
|
+
"forEach": true,
|
|
163
|
+
"while": true
|
|
164
|
+
},
|
|
165
|
+
"properties": {
|
|
166
|
+
"payload": { "type": "boolean", "default": true },
|
|
167
|
+
"responseForms": { "type": "boolean", "default": true },
|
|
168
|
+
"commands": { "type": "boolean", "default": true },
|
|
169
|
+
"forEach": { "type": "boolean", "default": true },
|
|
170
|
+
"while": { "type": "boolean", "default": true }
|
|
171
|
+
}
|
|
172
|
+
},
|
|
173
|
+
"includeForEachDocs": {
|
|
174
|
+
"type": "boolean",
|
|
175
|
+
"default": true,
|
|
176
|
+
"description": "Include ForEach operation documentation."
|
|
177
|
+
},
|
|
178
|
+
"includeWhileDocs": {
|
|
179
|
+
"type": "boolean",
|
|
180
|
+
"default": true,
|
|
181
|
+
"description": "Include While loop documentation."
|
|
182
|
+
},
|
|
183
|
+
"includeResponseFormDocs": {
|
|
184
|
+
"type": "boolean",
|
|
185
|
+
"default": true,
|
|
186
|
+
"description": "Include response form documentation."
|
|
187
|
+
},
|
|
188
|
+
"includeCommandDocs": {
|
|
189
|
+
"type": "boolean",
|
|
190
|
+
"default": true,
|
|
191
|
+
"description": "Include actionable commands documentation."
|
|
192
|
+
},
|
|
193
|
+
"includeMessageExpansionDocs": {
|
|
194
|
+
"type": "boolean",
|
|
195
|
+
"default": true,
|
|
196
|
+
"description": "Include message expansion documentation."
|
|
197
|
+
},
|
|
198
|
+
"includeVariableRefsDocs": {
|
|
199
|
+
"type": "boolean",
|
|
200
|
+
"default": true,
|
|
201
|
+
"description": "Include variable references documentation."
|
|
202
|
+
},
|
|
203
|
+
"includePayloadInPrompt": {
|
|
204
|
+
"type": "boolean",
|
|
205
|
+
"default": true,
|
|
206
|
+
"description": "Include current payload state in prompt."
|
|
207
|
+
},
|
|
208
|
+
"maxSubAgentsInPrompt": {
|
|
209
|
+
"type": "integer",
|
|
210
|
+
"default": -1,
|
|
211
|
+
"description": "Max sub-agents to include in prompt."
|
|
212
|
+
},
|
|
213
|
+
"maxActionsInPrompt": {
|
|
214
|
+
"type": "integer",
|
|
215
|
+
"default": -1,
|
|
216
|
+
"description": "Max actions to include in prompt."
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
});
|
|
220
|
+
// ============================================================================
|
|
221
|
+
// Tests for extractSchemaDefaults
|
|
222
|
+
// ============================================================================
|
|
223
|
+
testGroup('extractSchemaDefaults - null/undefined input', () => {
|
|
224
|
+
assertDeepEqual(extractSchemaDefaults(null), {}, 'null input returns empty object');
|
|
225
|
+
assertDeepEqual(extractSchemaDefaults(undefined), {}, 'undefined input returns empty object');
|
|
226
|
+
assertDeepEqual(extractSchemaDefaults(''), {}, 'empty string returns empty object');
|
|
227
|
+
});
|
|
228
|
+
testGroup('extractSchemaDefaults - invalid JSON', () => {
|
|
229
|
+
assertDeepEqual(extractSchemaDefaults('not valid json'), {}, 'invalid JSON returns empty object');
|
|
230
|
+
assertDeepEqual(extractSchemaDefaults('{broken: json}'), {}, 'malformed JSON returns empty object');
|
|
231
|
+
});
|
|
232
|
+
testGroup('extractSchemaDefaults - schema without properties', () => {
|
|
233
|
+
const schema = JSON.stringify({
|
|
234
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
235
|
+
"type": "object"
|
|
236
|
+
});
|
|
237
|
+
assertDeepEqual(extractSchemaDefaults(schema), {}, 'schema without properties returns empty object');
|
|
238
|
+
});
|
|
239
|
+
testGroup('extractSchemaDefaults - schema with properties but no defaults', () => {
|
|
240
|
+
const schema = JSON.stringify({
|
|
241
|
+
"type": "object",
|
|
242
|
+
"properties": {
|
|
243
|
+
"name": { "type": "string" },
|
|
244
|
+
"count": { "type": "integer" }
|
|
245
|
+
}
|
|
246
|
+
});
|
|
247
|
+
assertDeepEqual(extractSchemaDefaults(schema), {}, 'properties without defaults return empty object');
|
|
248
|
+
});
|
|
249
|
+
testGroup('extractSchemaDefaults - schema with defaults', () => {
|
|
250
|
+
const schema = JSON.stringify({
|
|
251
|
+
"type": "object",
|
|
252
|
+
"properties": {
|
|
253
|
+
"enabled": { "type": "boolean", "default": true },
|
|
254
|
+
"maxItems": { "type": "integer", "default": 100 },
|
|
255
|
+
"name": { "type": "string" } // No default
|
|
256
|
+
}
|
|
257
|
+
});
|
|
258
|
+
assertDeepEqual(extractSchemaDefaults(schema), { enabled: true, maxItems: 100 }, 'extracts defaults from properties that have them');
|
|
259
|
+
});
|
|
260
|
+
testGroup('extractSchemaDefaults - Loop Agent Type schema', () => {
|
|
261
|
+
const defaults = extractSchemaDefaults(LOOP_AGENT_TYPE_SCHEMA);
|
|
262
|
+
// includeResponseTypeDefinition is now an object with nested defaults
|
|
263
|
+
const responseTypeDef = defaults.includeResponseTypeDefinition;
|
|
264
|
+
assert(responseTypeDef !== undefined, 'includeResponseTypeDefinition has default object');
|
|
265
|
+
assert(responseTypeDef.payload === true, 'includeResponseTypeDefinition.payload defaults to true');
|
|
266
|
+
assert(responseTypeDef.responseForms === true, 'includeResponseTypeDefinition.responseForms defaults to true');
|
|
267
|
+
assert(responseTypeDef.commands === true, 'includeResponseTypeDefinition.commands defaults to true');
|
|
268
|
+
assert(responseTypeDef.forEach === true, 'includeResponseTypeDefinition.forEach defaults to true');
|
|
269
|
+
assert(responseTypeDef.while === true, 'includeResponseTypeDefinition.while defaults to true');
|
|
270
|
+
// Other boolean defaults
|
|
271
|
+
assert(defaults.includeForEachDocs === true, 'includeForEachDocs defaults to true');
|
|
272
|
+
assert(defaults.includeWhileDocs === true, 'includeWhileDocs defaults to true');
|
|
273
|
+
assert(defaults.includeResponseFormDocs === true, 'includeResponseFormDocs defaults to true');
|
|
274
|
+
assert(defaults.includeCommandDocs === true, 'includeCommandDocs defaults to true');
|
|
275
|
+
assert(defaults.includeMessageExpansionDocs === true, 'includeMessageExpansionDocs defaults to true');
|
|
276
|
+
assert(defaults.includeVariableRefsDocs === true, 'includeVariableRefsDocs defaults to true');
|
|
277
|
+
assert(defaults.includePayloadInPrompt === true, 'includePayloadInPrompt defaults to true');
|
|
278
|
+
assert(defaults.maxSubAgentsInPrompt === -1, 'maxSubAgentsInPrompt defaults to -1');
|
|
279
|
+
assert(defaults.maxActionsInPrompt === -1, 'maxActionsInPrompt defaults to -1');
|
|
280
|
+
});
|
|
281
|
+
// ============================================================================
|
|
282
|
+
// Tests for buildAgentTypePromptParams
|
|
283
|
+
// ============================================================================
|
|
284
|
+
testGroup('buildAgentTypePromptParams - no schema, no agent config, no runtime overrides', () => {
|
|
285
|
+
const agentType = {
|
|
286
|
+
ID: 'type-1',
|
|
287
|
+
Name: 'Test Type',
|
|
288
|
+
PromptParamsSchema: null
|
|
289
|
+
};
|
|
290
|
+
const agent = {
|
|
291
|
+
ID: 'agent-1',
|
|
292
|
+
Name: 'Test Agent',
|
|
293
|
+
TypeID: 'type-1',
|
|
294
|
+
AgentTypePromptParams: null
|
|
295
|
+
};
|
|
296
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
297
|
+
// Even with no config, auto-alignment creates the includeResponseTypeDefinition object
|
|
298
|
+
const responseTypeDef = result.includeResponseTypeDefinition;
|
|
299
|
+
assert(responseTypeDef !== undefined, 'includeResponseTypeDefinition is created by auto-alignment');
|
|
300
|
+
assert(responseTypeDef.payload === true, 'payload defaults to true');
|
|
301
|
+
assert(responseTypeDef.responseForms === true, 'responseForms defaults to true');
|
|
302
|
+
assert(responseTypeDef.commands === true, 'commands defaults to true');
|
|
303
|
+
assert(responseTypeDef.forEach === true, 'forEach defaults to true');
|
|
304
|
+
assert(responseTypeDef.while === true, 'while defaults to true');
|
|
305
|
+
});
|
|
306
|
+
testGroup('buildAgentTypePromptParams - schema defaults only', () => {
|
|
307
|
+
const agentType = {
|
|
308
|
+
ID: 'type-1',
|
|
309
|
+
Name: 'Loop',
|
|
310
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
311
|
+
};
|
|
312
|
+
const agent = {
|
|
313
|
+
ID: 'agent-1',
|
|
314
|
+
Name: 'Test Agent',
|
|
315
|
+
TypeID: 'type-1',
|
|
316
|
+
AgentTypePromptParams: null
|
|
317
|
+
};
|
|
318
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
319
|
+
assert(result.includeForEachDocs === true, 'includeForEachDocs from schema default');
|
|
320
|
+
assert(result.maxSubAgentsInPrompt === -1, 'maxSubAgentsInPrompt from schema default');
|
|
321
|
+
});
|
|
322
|
+
testGroup('buildAgentTypePromptParams - agent config overrides schema defaults', () => {
|
|
323
|
+
const agentType = {
|
|
324
|
+
ID: 'type-1',
|
|
325
|
+
Name: 'Loop',
|
|
326
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
327
|
+
};
|
|
328
|
+
const agent = {
|
|
329
|
+
ID: 'agent-1',
|
|
330
|
+
Name: 'Optimized Agent',
|
|
331
|
+
TypeID: 'type-1',
|
|
332
|
+
AgentTypePromptParams: JSON.stringify({
|
|
333
|
+
includeForEachDocs: false,
|
|
334
|
+
includeWhileDocs: false,
|
|
335
|
+
maxActionsInPrompt: 5
|
|
336
|
+
})
|
|
337
|
+
};
|
|
338
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
339
|
+
// Overridden by agent config
|
|
340
|
+
assert(result.includeForEachDocs === false, 'includeForEachDocs overridden to false');
|
|
341
|
+
assert(result.includeWhileDocs === false, 'includeWhileDocs overridden to false');
|
|
342
|
+
assert(result.maxActionsInPrompt === 5, 'maxActionsInPrompt overridden to 5');
|
|
343
|
+
// Still from schema defaults
|
|
344
|
+
assert(result.includeResponseFormDocs === true, 'includeResponseFormDocs still from schema default');
|
|
345
|
+
assert(result.includeCommandDocs === true, 'includeCommandDocs still from schema default');
|
|
346
|
+
assert(result.maxSubAgentsInPrompt === -1, 'maxSubAgentsInPrompt still from schema default');
|
|
347
|
+
});
|
|
348
|
+
testGroup('buildAgentTypePromptParams - runtime overrides agent config', () => {
|
|
349
|
+
const agentType = {
|
|
350
|
+
ID: 'type-1',
|
|
351
|
+
Name: 'Loop',
|
|
352
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
353
|
+
};
|
|
354
|
+
const agent = {
|
|
355
|
+
ID: 'agent-1',
|
|
356
|
+
Name: 'Optimized Agent',
|
|
357
|
+
TypeID: 'type-1',
|
|
358
|
+
AgentTypePromptParams: JSON.stringify({
|
|
359
|
+
includeForEachDocs: false,
|
|
360
|
+
includeWhileDocs: false
|
|
361
|
+
})
|
|
362
|
+
};
|
|
363
|
+
const runtimeOverrides = {
|
|
364
|
+
includeForEachDocs: true, // Override agent config back to true
|
|
365
|
+
includeCommandDocs: false // Override schema default
|
|
366
|
+
};
|
|
367
|
+
const result = buildAgentTypePromptParams(agentType, agent, runtimeOverrides);
|
|
368
|
+
// Runtime override
|
|
369
|
+
assert(result.includeForEachDocs === true, 'includeForEachDocs runtime override to true');
|
|
370
|
+
assert(result.includeCommandDocs === false, 'includeCommandDocs runtime override to false');
|
|
371
|
+
// Agent config (not overridden at runtime)
|
|
372
|
+
assert(result.includeWhileDocs === false, 'includeWhileDocs from agent config');
|
|
373
|
+
// Schema default (not overridden)
|
|
374
|
+
assert(result.includeResponseFormDocs === true, 'includeResponseFormDocs from schema default');
|
|
375
|
+
});
|
|
376
|
+
testGroup('buildAgentTypePromptParams - invalid agent JSON handled gracefully', () => {
|
|
377
|
+
const agentType = {
|
|
378
|
+
ID: 'type-1',
|
|
379
|
+
Name: 'Loop',
|
|
380
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
381
|
+
};
|
|
382
|
+
const agent = {
|
|
383
|
+
ID: 'agent-1',
|
|
384
|
+
Name: 'Bad Config Agent',
|
|
385
|
+
TypeID: 'type-1',
|
|
386
|
+
AgentTypePromptParams: 'not valid json' // Invalid JSON
|
|
387
|
+
};
|
|
388
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
389
|
+
// Should fall back to schema defaults
|
|
390
|
+
assert(result.includeForEachDocs === true, 'falls back to schema default when agent config invalid');
|
|
391
|
+
assert(result.maxSubAgentsInPrompt === -1, 'falls back to schema default for integer');
|
|
392
|
+
});
|
|
393
|
+
testGroup('buildAgentTypePromptParams - undefined agentType handled gracefully', () => {
|
|
394
|
+
const agent = {
|
|
395
|
+
ID: 'agent-1',
|
|
396
|
+
Name: 'Orphan Agent',
|
|
397
|
+
TypeID: 'nonexistent-type',
|
|
398
|
+
AgentTypePromptParams: JSON.stringify({
|
|
399
|
+
includeForEachDocs: false
|
|
400
|
+
})
|
|
401
|
+
};
|
|
402
|
+
const result = buildAgentTypePromptParams(undefined, agent, undefined);
|
|
403
|
+
// Should use agent config since no schema
|
|
404
|
+
assert(result.includeForEachDocs === false, 'uses agent config when agentType undefined');
|
|
405
|
+
assert(result.includeWhileDocs === undefined, 'no default when agentType undefined');
|
|
406
|
+
});
|
|
407
|
+
testGroup('buildAgentTypePromptParams - merge precedence (schema < agent < runtime)', () => {
|
|
408
|
+
const agentType = {
|
|
409
|
+
ID: 'type-1',
|
|
410
|
+
Name: 'Loop',
|
|
411
|
+
PromptParamsSchema: JSON.stringify({
|
|
412
|
+
"type": "object",
|
|
413
|
+
"properties": {
|
|
414
|
+
"value1": { "type": "string", "default": "schema" },
|
|
415
|
+
"value2": { "type": "string", "default": "schema" },
|
|
416
|
+
"value3": { "type": "string", "default": "schema" }
|
|
417
|
+
}
|
|
418
|
+
})
|
|
419
|
+
};
|
|
420
|
+
const agent = {
|
|
421
|
+
ID: 'agent-1',
|
|
422
|
+
Name: 'Test Agent',
|
|
423
|
+
TypeID: 'type-1',
|
|
424
|
+
AgentTypePromptParams: JSON.stringify({
|
|
425
|
+
value2: "agent",
|
|
426
|
+
value3: "agent"
|
|
427
|
+
})
|
|
428
|
+
};
|
|
429
|
+
const runtimeOverrides = {
|
|
430
|
+
value3: "runtime"
|
|
431
|
+
};
|
|
432
|
+
const result = buildAgentTypePromptParams(agentType, agent, runtimeOverrides);
|
|
433
|
+
assert(result.value1 === "schema", 'value1 from schema (not overridden)');
|
|
434
|
+
assert(result.value2 === "agent", 'value2 from agent (overrides schema)');
|
|
435
|
+
assert(result.value3 === "runtime", 'value3 from runtime (overrides agent and schema)');
|
|
436
|
+
});
|
|
437
|
+
// ============================================================================
|
|
438
|
+
// Tests for DEFAULT_LOOP_AGENT_PROMPT_PARAMS constant
|
|
439
|
+
// ============================================================================
|
|
440
|
+
testGroup('DEFAULT_LOOP_AGENT_PROMPT_PARAMS matches schema defaults', () => {
|
|
441
|
+
const schemaDefaults = extractSchemaDefaults(LOOP_AGENT_TYPE_SCHEMA);
|
|
442
|
+
// Verify includeResponseTypeDefinition object structure matches
|
|
443
|
+
const defaultResponseType = DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeResponseTypeDefinition;
|
|
444
|
+
const schemaResponseType = schemaDefaults.includeResponseTypeDefinition;
|
|
445
|
+
assert(defaultResponseType.payload === schemaResponseType.payload, 'includeResponseTypeDefinition.payload matches');
|
|
446
|
+
assert(defaultResponseType.responseForms === schemaResponseType.responseForms, 'includeResponseTypeDefinition.responseForms matches');
|
|
447
|
+
assert(defaultResponseType.commands === schemaResponseType.commands, 'includeResponseTypeDefinition.commands matches');
|
|
448
|
+
assert(defaultResponseType.forEach === schemaResponseType.forEach, 'includeResponseTypeDefinition.forEach matches');
|
|
449
|
+
assert(defaultResponseType.while === schemaResponseType.while, 'includeResponseTypeDefinition.while matches');
|
|
450
|
+
// Verify other boolean defaults
|
|
451
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeForEachDocs === schemaDefaults.includeForEachDocs, 'includeForEachDocs matches');
|
|
452
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeWhileDocs === schemaDefaults.includeWhileDocs, 'includeWhileDocs matches');
|
|
453
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeResponseFormDocs === schemaDefaults.includeResponseFormDocs, 'includeResponseFormDocs matches');
|
|
454
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeCommandDocs === schemaDefaults.includeCommandDocs, 'includeCommandDocs matches');
|
|
455
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeMessageExpansionDocs === schemaDefaults.includeMessageExpansionDocs, 'includeMessageExpansionDocs matches');
|
|
456
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includeVariableRefsDocs === schemaDefaults.includeVariableRefsDocs, 'includeVariableRefsDocs matches');
|
|
457
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.includePayloadInPrompt === schemaDefaults.includePayloadInPrompt, 'includePayloadInPrompt matches');
|
|
458
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.maxSubAgentsInPrompt === schemaDefaults.maxSubAgentsInPrompt, 'maxSubAgentsInPrompt matches');
|
|
459
|
+
assert(DEFAULT_LOOP_AGENT_PROMPT_PARAMS.maxActionsInPrompt === schemaDefaults.maxActionsInPrompt, 'maxActionsInPrompt matches');
|
|
460
|
+
});
|
|
461
|
+
// ============================================================================
|
|
462
|
+
// Tests for Nunjucks template conditional pattern
|
|
463
|
+
// ============================================================================
|
|
464
|
+
testGroup('Nunjucks conditional pattern: != false defaults to include', () => {
|
|
465
|
+
// This test verifies the pattern used in the template: {% if param != false %}
|
|
466
|
+
// When param is undefined, the condition should evaluate to true (include section)
|
|
467
|
+
function simulateNunjucksCondition(value) {
|
|
468
|
+
// Nunjucks: {% if value != false %} => include section
|
|
469
|
+
return value !== false;
|
|
470
|
+
}
|
|
471
|
+
assert(simulateNunjucksCondition(true) === true, 'true != false => include section');
|
|
472
|
+
assert(simulateNunjucksCondition(false) === false, 'false != false => exclude section');
|
|
473
|
+
assert(simulateNunjucksCondition(undefined) === true, 'undefined != false => include section (backward compatible)');
|
|
474
|
+
});
|
|
475
|
+
testGroup('Backward compatibility: empty params includes all sections', () => {
|
|
476
|
+
// When an agent has no AgentTypePromptParams configured,
|
|
477
|
+
// all sections should be included (all booleans should be treated as true)
|
|
478
|
+
const agentType = {
|
|
479
|
+
ID: 'type-1',
|
|
480
|
+
Name: 'Loop',
|
|
481
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
482
|
+
};
|
|
483
|
+
const agent = {
|
|
484
|
+
ID: 'agent-1',
|
|
485
|
+
Name: 'Default Agent',
|
|
486
|
+
TypeID: 'type-1',
|
|
487
|
+
AgentTypePromptParams: null // No customization
|
|
488
|
+
};
|
|
489
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
490
|
+
// All boolean flags should be true (include all sections)
|
|
491
|
+
const booleanFlags = [
|
|
492
|
+
'includeForEachDocs',
|
|
493
|
+
'includeWhileDocs',
|
|
494
|
+
'includeResponseFormDocs',
|
|
495
|
+
'includeCommandDocs',
|
|
496
|
+
'includeMessageExpansionDocs',
|
|
497
|
+
'includeVariableRefsDocs',
|
|
498
|
+
'includePayloadInPrompt'
|
|
499
|
+
];
|
|
500
|
+
for (const flag of booleanFlags) {
|
|
501
|
+
assert(result[flag] === true, `${flag} should be true for backward compatibility`);
|
|
502
|
+
}
|
|
503
|
+
// includeResponseTypeDefinition is now an object - verify all properties are true
|
|
504
|
+
const responseTypeDef = result.includeResponseTypeDefinition;
|
|
505
|
+
assert(responseTypeDef.payload === true, 'includeResponseTypeDefinition.payload should be true');
|
|
506
|
+
assert(responseTypeDef.responseForms === true, 'includeResponseTypeDefinition.responseForms should be true');
|
|
507
|
+
assert(responseTypeDef.commands === true, 'includeResponseTypeDefinition.commands should be true');
|
|
508
|
+
assert(responseTypeDef.forEach === true, 'includeResponseTypeDefinition.forEach should be true');
|
|
509
|
+
assert(responseTypeDef.while === true, 'includeResponseTypeDefinition.while should be true');
|
|
510
|
+
});
|
|
511
|
+
// ============================================================================
|
|
512
|
+
// Tests for Auto-Alignment Logic
|
|
513
|
+
// ============================================================================
|
|
514
|
+
testGroup('Auto-alignment: docs flags auto-align response type sections', () => {
|
|
515
|
+
// When docs flags are set to false, the corresponding response type sections
|
|
516
|
+
// should also be false (unless explicitly overridden)
|
|
517
|
+
const agentType = {
|
|
518
|
+
ID: 'type-1',
|
|
519
|
+
Name: 'Loop',
|
|
520
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
521
|
+
};
|
|
522
|
+
const agent = {
|
|
523
|
+
ID: 'agent-1',
|
|
524
|
+
Name: 'Minimal Agent',
|
|
525
|
+
TypeID: 'type-1',
|
|
526
|
+
AgentTypePromptParams: JSON.stringify({
|
|
527
|
+
includeForEachDocs: false,
|
|
528
|
+
includeWhileDocs: false,
|
|
529
|
+
includeResponseFormDocs: false,
|
|
530
|
+
includeCommandDocs: false
|
|
531
|
+
// includePayloadInPrompt is not set, so payload should stay true
|
|
532
|
+
})
|
|
533
|
+
};
|
|
534
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
535
|
+
const responseTypeDef = result.includeResponseTypeDefinition;
|
|
536
|
+
// Auto-aligned to false based on docs flags
|
|
537
|
+
assert(responseTypeDef.forEach === false, 'forEach auto-aligned to false');
|
|
538
|
+
assert(responseTypeDef.while === false, 'while auto-aligned to false');
|
|
539
|
+
assert(responseTypeDef.responseForms === false, 'responseForms auto-aligned to false');
|
|
540
|
+
assert(responseTypeDef.commands === false, 'commands auto-aligned to false');
|
|
541
|
+
// Not auto-aligned (includePayloadInPrompt not set, defaults to true)
|
|
542
|
+
assert(responseTypeDef.payload === true, 'payload stays true (not auto-aligned)');
|
|
543
|
+
});
|
|
544
|
+
testGroup('Auto-alignment: explicit response type overrides auto-alignment', () => {
|
|
545
|
+
// When response type sections are explicitly set, they should not be auto-aligned
|
|
546
|
+
const agentType = {
|
|
547
|
+
ID: 'type-1',
|
|
548
|
+
Name: 'Loop',
|
|
549
|
+
PromptParamsSchema: LOOP_AGENT_TYPE_SCHEMA
|
|
550
|
+
};
|
|
551
|
+
const agent = {
|
|
552
|
+
ID: 'agent-1',
|
|
553
|
+
Name: 'Override Agent',
|
|
554
|
+
TypeID: 'type-1',
|
|
555
|
+
AgentTypePromptParams: JSON.stringify({
|
|
556
|
+
includeResponseTypeDefinition: {
|
|
557
|
+
forEach: true, // Explicitly keep forEach even though docs are disabled
|
|
558
|
+
while: false // Explicitly set while to false
|
|
559
|
+
},
|
|
560
|
+
includeForEachDocs: false,
|
|
561
|
+
includeWhileDocs: false
|
|
562
|
+
})
|
|
563
|
+
};
|
|
564
|
+
const result = buildAgentTypePromptParams(agentType, agent, undefined);
|
|
565
|
+
const responseTypeDef = result.includeResponseTypeDefinition;
|
|
566
|
+
// Explicit settings override auto-alignment
|
|
567
|
+
assert(responseTypeDef.forEach === true, 'forEach explicitly set to true');
|
|
568
|
+
assert(responseTypeDef.while === false, 'while explicitly set to false');
|
|
569
|
+
// Other properties get auto-aligned or default values
|
|
570
|
+
assert(responseTypeDef.payload === true, 'payload defaults to true');
|
|
571
|
+
assert(responseTypeDef.responseForms === true, 'responseForms defaults to true');
|
|
572
|
+
assert(responseTypeDef.commands === true, 'commands defaults to true');
|
|
573
|
+
});
|
|
574
|
+
// ============================================================================
|
|
575
|
+
// Test Summary
|
|
576
|
+
// ============================================================================
|
|
577
|
+
console.log('\n' + '='.repeat(60));
|
|
578
|
+
console.log(`📊 Test Results: ${testsPassed} passed, ${testsFailed} failed`);
|
|
579
|
+
console.log('='.repeat(60));
|
|
580
|
+
if (testsFailed > 0) {
|
|
581
|
+
process.exit(1);
|
|
582
|
+
}
|
|
583
|
+
//# sourceMappingURL=agent-type-prompt-params.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-type-prompt-params.test.js","sourceRoot":"","sources":["../../src/__tests__/agent-type-prompt-params.test.ts"],"names":[],"mappings":"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"}
|