@memberjunction/ai-agents 4.1.0 → 4.3.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.
Files changed (30) hide show
  1. package/README.md +4 -0
  2. package/dist/agent-context-injector.d.ts +63 -23
  3. package/dist/agent-context-injector.d.ts.map +1 -1
  4. package/dist/agent-context-injector.js +205 -55
  5. package/dist/agent-context-injector.js.map +1 -1
  6. package/dist/base-agent.d.ts +36 -2
  7. package/dist/base-agent.d.ts.map +1 -1
  8. package/dist/base-agent.js +189 -13
  9. package/dist/base-agent.js.map +1 -1
  10. package/dist/memory-manager-agent.d.ts +47 -0
  11. package/dist/memory-manager-agent.d.ts.map +1 -1
  12. package/dist/memory-manager-agent.js +389 -51
  13. package/dist/memory-manager-agent.js.map +1 -1
  14. package/package.json +16 -18
  15. package/dist/__tests__/action-changes.test.d.ts +0 -15
  16. package/dist/__tests__/action-changes.test.d.ts.map +0 -1
  17. package/dist/__tests__/action-changes.test.js +0 -394
  18. package/dist/__tests__/action-changes.test.js.map +0 -1
  19. package/dist/__tests__/agent-memory-features.test.d.ts +0 -123
  20. package/dist/__tests__/agent-memory-features.test.d.ts.map +0 -1
  21. package/dist/__tests__/agent-memory-features.test.js +0 -596
  22. package/dist/__tests__/agent-memory-features.test.js.map +0 -1
  23. package/dist/__tests__/agent-type-prompt-params.test.d.ts +0 -14
  24. package/dist/__tests__/agent-type-prompt-params.test.d.ts.map +0 -1
  25. package/dist/__tests__/agent-type-prompt-params.test.js +0 -583
  26. package/dist/__tests__/agent-type-prompt-params.test.js.map +0 -1
  27. package/dist/__tests__/chat-handling-option.test.d.ts +0 -54
  28. package/dist/__tests__/chat-handling-option.test.d.ts.map +0 -1
  29. package/dist/__tests__/chat-handling-option.test.js +0 -222
  30. package/dist/__tests__/chat-handling-option.test.js.map +0 -1
@@ -1,583 +0,0 @@
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
@@ -1 +0,0 @@
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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"}