@memberjunction/ai-agents 2.61.0 → 2.63.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/README.md CHANGED
@@ -41,6 +41,14 @@ Simple orchestrator that:
41
41
  - Instantiates correct agent class using ClassFactory
42
42
  - Executes agents with provided context
43
43
 
44
+ ### PayloadManager
45
+ Advanced payload access control for hierarchical agent execution:
46
+ - Controls which payload paths sub-agents can read (downstream)
47
+ - Controls which payload paths sub-agents can write (upstream)
48
+ - Supports JSON path patterns with wildcards
49
+ - Detects suspicious changes with configurable rules
50
+ - Generates human-readable diffs for audit trails
51
+
44
52
  ## Installation
45
53
 
46
54
  ```bash
@@ -68,6 +76,15 @@ const result = await agent.Execute({
68
76
  conversationMessages: messages,
69
77
  contextUser: user
70
78
  });
79
+
80
+ // Using run chaining to maintain context across multiple runs
81
+ const followUpResult = await runner.RunAgent({
82
+ agent: agentEntity,
83
+ conversationMessages: newMessages,
84
+ contextUser: user,
85
+ lastRunId: result.agentRun.ID,
86
+ autoPopulateLastRunPayload: true // Automatically use previous run's final payload
87
+ });
71
88
  ```
72
89
 
73
90
  ## Agent Configuration
@@ -144,6 +161,65 @@ export class MyCustomAgentType extends BaseAgentType {
144
161
 
145
162
  ## Advanced Features
146
163
 
164
+ ### Run Chaining
165
+
166
+ The framework supports linking multiple agent runs together to maintain context across interactions:
167
+
168
+ ```typescript
169
+ // Execute an agent with run chaining
170
+ const result = await agent.Execute({
171
+ agent: agentEntity,
172
+ conversationMessages: messages,
173
+ contextUser: user,
174
+ lastRunId: previousRunId, // Links to previous run
175
+ autoPopulateLastRunPayload: true // Auto-loads previous payload
176
+ });
177
+
178
+ // The framework will:
179
+ // 1. Load the FinalPayload from the previous run
180
+ // 2. Set it as StartingPayload for the new run
181
+ // 3. Use it as the initial payload if none provided
182
+ // 4. Validate against circular references in the chain
183
+ ```
184
+
185
+ Key features:
186
+ - **LastRunID**: Links runs in a chain (different from ParentRunID for sub-agents)
187
+ - **StartingPayload**: Captures the initial state of each run
188
+ - **Auto-population**: Reduces bandwidth by avoiding payload round-trips
189
+ - **Circular reference detection**: Prevents infinite loops in run chains
190
+
191
+ ### Payload Management and Change Detection
192
+
193
+ The framework includes sophisticated payload management with automatic change detection:
194
+
195
+ ```typescript
196
+ // Payload changes are automatically analyzed
197
+ const changeResult = payloadManager.applyAgentChangeRequest(
198
+ originalPayload,
199
+ changeRequest,
200
+ {
201
+ analyzeChanges: true, // Detect suspicious changes
202
+ generateDiff: true, // Create audit trail
203
+ agentName: 'MyAgent'
204
+ }
205
+ );
206
+
207
+ // Suspicious changes are flagged:
208
+ // - Content truncation (>70% reduction)
209
+ // - Non-empty key removal
210
+ // - Type changes (object→primitive)
211
+ // - Pattern anomalies (placeholder replacement)
212
+ ```
213
+
214
+ **Sub-agent Payload Access Control**:
215
+ ```typescript
216
+ // In AIAgent entity configuration:
217
+ {
218
+ PayloadDownstreamPaths: ["customer.id", "order.*"], // What sub-agent can read
219
+ PayloadUpstreamPaths: ["analysis.*", "recommendations"] // What sub-agent can write
220
+ }
221
+ ```
222
+
147
223
  ### Hierarchical Prompt Execution
148
224
  ```typescript
149
225
  // System prompt provides base behavior
@@ -194,10 +270,17 @@ Key entities used by the agent framework:
194
270
 
195
271
  - **AIAgentType**: Agent behavior patterns and system prompts
196
272
  - **AIAgent**: Configured agent instances
273
+ - `PayloadDownstreamPaths`: JSON array of paths sub-agents can read
274
+ - `PayloadUpstreamPaths`: JSON array of paths sub-agents can write
197
275
  - **AIPrompt**: Reusable prompt templates with placeholders
198
276
  - **AIAgentPrompt**: Links agents to prompts with execution order
199
277
  - **AIAgentRun**: Tracks complete agent executions
278
+ - `LastRunID`: Links to previous run in a chain (for run chaining)
279
+ - `StartingPayload`: Initial payload for the run
200
280
  - **AIAgentRunStep**: Records individual steps within runs
281
+ - `PayloadAtStart`: JSON snapshot of payload before step
282
+ - `PayloadAtEnd`: JSON snapshot of payload after step
283
+ - `OutputData`: Includes `payloadChangeResult` with analysis
201
284
  - **AIAgentRunStepAction**: Details of actions executed
202
285
  - **AIAgentRunStepPrompt**: Prompt execution details
203
286
 
@@ -210,6 +293,8 @@ Key entities used by the agent framework:
210
293
  5. **Comprehensive Tracking**: Leverage built-in tracking for debugging and analysis
211
294
  6. **Context Efficiency**: Let the framework handle context compression automatically
212
295
  7. **Error Handling**: Implement robust error handling in custom agent types
296
+ 8. **Payload Security**: Use path-based access control for sub-agents
297
+ 9. **Change Monitoring**: Review payload change warnings in OutputData
213
298
 
214
299
  ## Examples
215
300
 
@@ -252,10 +337,6 @@ export class DecisionTreeAgent extends BaseAgentType {
252
337
 
253
338
  For detailed architecture information, see [agent-architecture.md](./agent-architecture.md).
254
339
 
255
- ## Payload and State Management
256
-
257
- For comprehensive information about managing payload flow between agents and sub-agents, including access control and best practices, see [PAYLOAD_STATE_MANAGEMENT.md](./PAYLOAD_STATE_MANAGEMENT.md).
258
-
259
340
  ## Contributing
260
341
 
261
342
  Contributions are welcome! Please see the main MemberJunction [contributing guide](../../../CONTRIBUTING.md).
@@ -0,0 +1,71 @@
1
+ import { AgentPayloadChangeRequest } from '@memberjunction/ai-core-plus';
2
+ export declare enum PayloadWarningType {
3
+ ContentTruncation = "content_truncation",
4
+ KeyRemoval = "key_removal",
5
+ TypeChange = "type_change",
6
+ PatternAnomaly = "pattern_anomaly",
7
+ UnintendedOverwrite = "unintended_overwrite"
8
+ }
9
+ export interface PayloadWarning {
10
+ type: PayloadWarningType;
11
+ severity: 'low' | 'medium' | 'high' | 'critical';
12
+ path: string;
13
+ message: string;
14
+ requiresFeedback?: boolean;
15
+ details: any;
16
+ }
17
+ export interface ContentTruncationWarning extends PayloadWarning {
18
+ type: PayloadWarningType.ContentTruncation;
19
+ details: {
20
+ originalLength: number;
21
+ newLength: number;
22
+ reductionPercentage: number;
23
+ contentPreview: {
24
+ before: string;
25
+ after: string;
26
+ };
27
+ };
28
+ }
29
+ export interface KeyRemovalWarning extends PayloadWarning {
30
+ type: PayloadWarningType.KeyRemoval;
31
+ details: {
32
+ removedKeys: string[];
33
+ hadContent: boolean;
34
+ contentSize: number;
35
+ childKeysRemoved?: string[];
36
+ };
37
+ }
38
+ export interface PayloadAnalyzerConfig {
39
+ contentReductionThreshold: number;
40
+ minContentLengthForAnalysis: number;
41
+ arrayReductionThreshold: number;
42
+ objectKeyReductionThreshold: number;
43
+ analyzeNestedChanges: boolean;
44
+ maxAnalysisDepth: number;
45
+ truncationPatterns: RegExp[];
46
+ }
47
+ export interface PayloadAnalysisResult {
48
+ warnings: PayloadWarning[];
49
+ criticalWarnings: PayloadWarning[];
50
+ requiresFeedback: boolean;
51
+ summary: {
52
+ totalWarnings: number;
53
+ warningsByType: Record<PayloadWarningType, number>;
54
+ suspiciousChanges: number;
55
+ };
56
+ }
57
+ export declare class PayloadChangeAnalyzer {
58
+ private config;
59
+ constructor(config?: Partial<PayloadAnalyzerConfig>);
60
+ analyzeChangeRequest<P = any>(originalPayload: P, changeRequest: AgentPayloadChangeRequest<P>, resultPayload: P): PayloadAnalysisResult;
61
+ private analyzeChanges;
62
+ private analyzeStringChange;
63
+ private analyzeArrayChange;
64
+ private analyzeObjectChange;
65
+ private analyzeRemoval;
66
+ private analyzeTypeChange;
67
+ private detectPatternAnomalies;
68
+ private walkPayload;
69
+ generateFeedbackQuestions(warnings: PayloadWarning[]): string[];
70
+ }
71
+ //# sourceMappingURL=PayloadChangeAnalyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadChangeAnalyzer.d.ts","sourceRoot":"","sources":["../src/PayloadChangeAnalyzer.ts"],"names":[],"mappings":"AAaA,OAAO,EAAE,yBAAyB,EAAE,MAAM,8BAA8B,CAAC;AAKzE,oBAAY,kBAAkB;IAC1B,iBAAiB,uBAAuB;IACxC,UAAU,gBAAgB;IAC1B,UAAU,gBAAgB;IAC1B,cAAc,oBAAoB;IAClC,mBAAmB,yBAAyB;CAC/C;AAKD,MAAM,WAAW,cAAc;IAC3B,IAAI,EAAE,kBAAkB,CAAC;IACzB,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,EAAE,GAAG,CAAC;CAChB;AAKD,MAAM,WAAW,wBAAyB,SAAQ,cAAc;IAC5D,IAAI,EAAE,kBAAkB,CAAC,iBAAiB,CAAC;IAC3C,OAAO,EAAE;QACL,cAAc,EAAE,MAAM,CAAC;QACvB,SAAS,EAAE,MAAM,CAAC;QAClB,mBAAmB,EAAE,MAAM,CAAC;QAC5B,cAAc,EAAE;YACZ,MAAM,EAAE,MAAM,CAAC;YACf,KAAK,EAAE,MAAM,CAAC;SACjB,CAAC;KACL,CAAC;CACL;AAKD,MAAM,WAAW,iBAAkB,SAAQ,cAAc;IACrD,IAAI,EAAE,kBAAkB,CAAC,UAAU,CAAC;IACpC,OAAO,EAAE;QACL,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,UAAU,EAAE,OAAO,CAAC;QACpB,WAAW,EAAE,MAAM,CAAC;QACpB,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;KAC/B,CAAC;CACL;AAKD,MAAM,WAAW,qBAAqB;IAElC,yBAAyB,EAAE,MAAM,CAAC;IAElC,2BAA2B,EAAE,MAAM,CAAC;IAEpC,uBAAuB,EAAE,MAAM,CAAC;IAEhC,2BAA2B,EAAE,MAAM,CAAC;IAEpC,oBAAoB,EAAE,OAAO,CAAC;IAE9B,gBAAgB,EAAE,MAAM,CAAC;IAEzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;CAChC;AAKD,MAAM,WAAW,qBAAqB;IAClC,QAAQ,EAAE,cAAc,EAAE,CAAC;IAC3B,gBAAgB,EAAE,cAAc,EAAE,CAAC;IACnC,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,EAAE;QACL,aAAa,EAAE,MAAM,CAAC;QACtB,cAAc,EAAE,MAAM,CAAC,kBAAkB,EAAE,MAAM,CAAC,CAAC;QACnD,iBAAiB,EAAE,MAAM,CAAC;KAC7B,CAAC;CACL;AAKD,qBAAa,qBAAqB;IAC9B,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC;IAsB5C,oBAAoB,CAAC,CAAC,GAAG,GAAG,EAC/B,eAAe,EAAE,CAAC,EAClB,aAAa,EAAE,yBAAyB,CAAC,CAAC,CAAC,EAC3C,aAAa,EAAE,CAAC,GACjB,qBAAqB;IA4CxB,OAAO,CAAC,cAAc;IA2BtB,OAAO,CAAC,mBAAmB;IA4D3B,OAAO,CAAC,kBAAkB;IA+C1B,OAAO,CAAC,mBAAmB;IA6D3B,OAAO,CAAC,cAAc;IA+BtB,OAAO,CAAC,iBAAiB;IAiCzB,OAAO,CAAC,sBAAsB;IA4D9B,OAAO,CAAC,WAAW;IA0BZ,yBAAyB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,MAAM,EAAE;CAuCzE"}
@@ -0,0 +1,339 @@
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 (mod) {
19
+ if (mod && mod.__esModule) return mod;
20
+ var result = {};
21
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
22
+ __setModuleDefault(result, mod);
23
+ return result;
24
+ };
25
+ Object.defineProperty(exports, "__esModule", { value: true });
26
+ exports.PayloadChangeAnalyzer = exports.PayloadWarningType = void 0;
27
+ const _ = __importStar(require("lodash"));
28
+ var PayloadWarningType;
29
+ (function (PayloadWarningType) {
30
+ PayloadWarningType["ContentTruncation"] = "content_truncation";
31
+ PayloadWarningType["KeyRemoval"] = "key_removal";
32
+ PayloadWarningType["TypeChange"] = "type_change";
33
+ PayloadWarningType["PatternAnomaly"] = "pattern_anomaly";
34
+ PayloadWarningType["UnintendedOverwrite"] = "unintended_overwrite";
35
+ })(PayloadWarningType || (exports.PayloadWarningType = PayloadWarningType = {}));
36
+ class PayloadChangeAnalyzer {
37
+ constructor(config) {
38
+ this.config = {
39
+ contentReductionThreshold: 70,
40
+ minContentLengthForAnalysis: 100,
41
+ arrayReductionThreshold: 50,
42
+ objectKeyReductionThreshold: 50,
43
+ analyzeNestedChanges: true,
44
+ maxAnalysisDepth: 10,
45
+ truncationPatterns: [
46
+ /\.\.\.$/,
47
+ /\[truncated\]/i,
48
+ /\[shortened\]/i,
49
+ /etc\.?$/i,
50
+ /and more/i
51
+ ],
52
+ ...config
53
+ };
54
+ }
55
+ analyzeChangeRequest(originalPayload, changeRequest, resultPayload) {
56
+ const warnings = [];
57
+ this.analyzeChanges(originalPayload, resultPayload, changeRequest, [], warnings);
58
+ this.detectPatternAnomalies(originalPayload, resultPayload, warnings);
59
+ const criticalWarnings = warnings.filter(w => w.severity === 'critical' || w.severity === 'high');
60
+ const requiresFeedback = warnings.some(w => w.requiresFeedback);
61
+ const warningsByType = warnings.reduce((acc, warning) => {
62
+ acc[warning.type] = (acc[warning.type] || 0) + 1;
63
+ return acc;
64
+ }, {});
65
+ return {
66
+ warnings,
67
+ criticalWarnings,
68
+ requiresFeedback,
69
+ summary: {
70
+ totalWarnings: warnings.length,
71
+ warningsByType,
72
+ suspiciousChanges: criticalWarnings.length
73
+ }
74
+ };
75
+ }
76
+ analyzeChanges(original, result, changeRequest, path, warnings) {
77
+ if (path.length > this.config.maxAnalysisDepth)
78
+ return;
79
+ if (typeof original === 'string' && typeof result === 'string') {
80
+ this.analyzeStringChange(original, result, path, warnings);
81
+ }
82
+ else if (Array.isArray(original) && Array.isArray(result)) {
83
+ this.analyzeArrayChange(original, result, path, warnings);
84
+ }
85
+ else if (_.isObject(original) && _.isObject(result)) {
86
+ this.analyzeObjectChange(original, result, changeRequest, path, warnings);
87
+ }
88
+ else if (original !== undefined && result === undefined) {
89
+ this.analyzeRemoval(original, path, warnings);
90
+ }
91
+ else if (typeof original !== typeof result && original !== undefined && result !== undefined) {
92
+ this.analyzeTypeChange(original, result, path, warnings);
93
+ }
94
+ }
95
+ analyzeStringChange(original, result, path, warnings) {
96
+ if (!original || !result)
97
+ return;
98
+ const originalLength = original.length;
99
+ const resultLength = result.length;
100
+ if (originalLength < this.config.minContentLengthForAnalysis)
101
+ return;
102
+ const reductionPercentage = ((originalLength - resultLength) / originalLength) * 100;
103
+ if (reductionPercentage > this.config.contentReductionThreshold) {
104
+ const warning = {
105
+ type: PayloadWarningType.ContentTruncation,
106
+ severity: reductionPercentage > 90 ? 'critical' : 'high',
107
+ path: path.join('.'),
108
+ message: `Content reduced by ${reductionPercentage.toFixed(1)}% (from ${originalLength} to ${resultLength} characters)`,
109
+ requiresFeedback: true,
110
+ details: {
111
+ originalLength,
112
+ newLength: resultLength,
113
+ reductionPercentage,
114
+ contentPreview: {
115
+ before: original.substring(0, 100) + (originalLength > 100 ? '...' : ''),
116
+ after: result.substring(0, 100) + (resultLength > 100 ? '...' : '')
117
+ }
118
+ }
119
+ };
120
+ warnings.push(warning);
121
+ }
122
+ const hasTruncationPattern = this.config.truncationPatterns.some(pattern => pattern.test(result) && !pattern.test(original));
123
+ if (hasTruncationPattern) {
124
+ warnings.push({
125
+ type: PayloadWarningType.PatternAnomaly,
126
+ severity: 'medium',
127
+ path: path.join('.'),
128
+ message: 'Content appears to be truncated (detected truncation pattern)',
129
+ requiresFeedback: true,
130
+ details: {
131
+ pattern: 'truncation_indicator',
132
+ resultEnding: result.slice(-50)
133
+ }
134
+ });
135
+ }
136
+ }
137
+ analyzeArrayChange(original, result, path, warnings) {
138
+ const originalLength = original.length;
139
+ const resultLength = result.length;
140
+ if (originalLength === 0)
141
+ return;
142
+ const reductionPercentage = ((originalLength - resultLength) / originalLength) * 100;
143
+ if (reductionPercentage > this.config.arrayReductionThreshold) {
144
+ warnings.push({
145
+ type: PayloadWarningType.PatternAnomaly,
146
+ severity: reductionPercentage > 80 ? 'high' : 'medium',
147
+ path: path.join('.'),
148
+ message: `Array reduced by ${reductionPercentage.toFixed(1)}% (from ${originalLength} to ${resultLength} items)`,
149
+ requiresFeedback: true,
150
+ details: {
151
+ pattern: 'array_reduction',
152
+ originalLength,
153
+ resultLength,
154
+ reductionPercentage
155
+ }
156
+ });
157
+ }
158
+ if (this.config.analyzeNestedChanges) {
159
+ const minLength = Math.min(originalLength, resultLength);
160
+ for (let i = 0; i < minLength; i++) {
161
+ this.analyzeChanges(original[i], result[i], {}, [...path, `[${i}]`], warnings);
162
+ }
163
+ }
164
+ }
165
+ analyzeObjectChange(original, result, changeRequest, path, warnings) {
166
+ const originalKeys = Object.keys(original);
167
+ const resultKeys = Object.keys(result);
168
+ const removedKeys = originalKeys.filter(k => !resultKeys.includes(k));
169
+ if (removedKeys.length > 0) {
170
+ const keyReductionPercentage = (removedKeys.length / originalKeys.length) * 100;
171
+ if (keyReductionPercentage > this.config.objectKeyReductionThreshold) {
172
+ const removedWithContent = removedKeys.filter(k => {
173
+ const value = original[k];
174
+ return value !== null && value !== undefined && value !== '';
175
+ });
176
+ if (removedWithContent.length > 0) {
177
+ const warning = {
178
+ type: PayloadWarningType.KeyRemoval,
179
+ severity: keyReductionPercentage > 80 ? 'critical' : 'high',
180
+ path: path.join('.'),
181
+ message: `${removedWithContent.length} non-empty keys removed (${keyReductionPercentage.toFixed(1)}% reduction)`,
182
+ requiresFeedback: true,
183
+ details: {
184
+ removedKeys: removedWithContent,
185
+ hadContent: true,
186
+ contentSize: removedWithContent.reduce((size, key) => {
187
+ const value = original[key];
188
+ return size + (typeof value === 'string' ? value.length : JSON.stringify(value).length);
189
+ }, 0)
190
+ }
191
+ };
192
+ warnings.push(warning);
193
+ }
194
+ }
195
+ }
196
+ if (this.config.analyzeNestedChanges) {
197
+ for (const key of resultKeys) {
198
+ if (key in original) {
199
+ this.analyzeChanges(original[key], result[key], changeRequest, [...path, key], warnings);
200
+ }
201
+ }
202
+ }
203
+ }
204
+ analyzeRemoval(original, path, warnings) {
205
+ if (original === null || original === undefined || original === '')
206
+ return;
207
+ const contentSize = typeof original === 'string'
208
+ ? original.length
209
+ : JSON.stringify(original).length;
210
+ if (contentSize > 50) {
211
+ warnings.push({
212
+ type: PayloadWarningType.KeyRemoval,
213
+ severity: contentSize > 500 ? 'high' : 'medium',
214
+ path: path.join('.'),
215
+ message: `Non-empty content removed (${contentSize} characters)`,
216
+ requiresFeedback: true,
217
+ details: {
218
+ removedKeys: [path[path.length - 1]],
219
+ hadContent: true,
220
+ contentSize
221
+ }
222
+ });
223
+ }
224
+ }
225
+ analyzeTypeChange(original, result, path, warnings) {
226
+ const originalType = Array.isArray(original) ? 'array' : typeof original;
227
+ const resultType = Array.isArray(result) ? 'array' : typeof result;
228
+ const isDataLoss = (originalType === 'object' || originalType === 'array') &&
229
+ (resultType === 'string' || resultType === 'number' || resultType === 'boolean');
230
+ if (isDataLoss) {
231
+ warnings.push({
232
+ type: PayloadWarningType.TypeChange,
233
+ severity: 'high',
234
+ path: path.join('.'),
235
+ message: `Type changed from ${originalType} to ${resultType} (potential data loss)`,
236
+ requiresFeedback: true,
237
+ details: {
238
+ originalType,
239
+ newType: resultType,
240
+ dataLoss: true
241
+ }
242
+ });
243
+ }
244
+ }
245
+ detectPatternAnomalies(original, result, warnings) {
246
+ if (_.isObject(original) && _.isObject(result)) {
247
+ const originalKeys = Object.keys(original);
248
+ const resultKeys = Object.keys(result);
249
+ const missingRatio = (originalKeys.length - resultKeys.length) / originalKeys.length;
250
+ if (missingRatio > 0.3 && originalKeys.length > 5) {
251
+ warnings.push({
252
+ type: PayloadWarningType.PatternAnomaly,
253
+ severity: 'high',
254
+ path: '',
255
+ message: `Significant portion of payload structure missing (${(missingRatio * 100).toFixed(1)}%)`,
256
+ requiresFeedback: true,
257
+ details: {
258
+ pattern: 'partial_state_return',
259
+ originalKeyCount: originalKeys.length,
260
+ resultKeyCount: resultKeys.length,
261
+ missingKeys: originalKeys.filter(k => !resultKeys.includes(k)).slice(0, 10)
262
+ }
263
+ });
264
+ }
265
+ }
266
+ const placeholderPatterns = [
267
+ /^TODO:/i,
268
+ /^TBD$/i,
269
+ /^\[.*\]$/,
270
+ /^<.*>$/
271
+ ];
272
+ this.walkPayload(result, [], (value, path) => {
273
+ if (typeof value === 'string' && placeholderPatterns.some(p => p.test(value))) {
274
+ const originalValue = _.get(original, path);
275
+ if (originalValue && typeof originalValue === 'string' && originalValue.length > 50) {
276
+ warnings.push({
277
+ type: PayloadWarningType.PatternAnomaly,
278
+ severity: 'medium',
279
+ path: path.join('.'),
280
+ message: 'Complex content replaced with placeholder',
281
+ requiresFeedback: true,
282
+ details: {
283
+ pattern: 'placeholder_replacement',
284
+ placeholder: value,
285
+ originalLength: originalValue.length
286
+ }
287
+ });
288
+ }
289
+ }
290
+ });
291
+ }
292
+ walkPayload(obj, path, callback) {
293
+ if (!obj || typeof obj !== 'object') {
294
+ callback(obj, path);
295
+ return;
296
+ }
297
+ if (Array.isArray(obj)) {
298
+ obj.forEach((item, index) => {
299
+ this.walkPayload(item, [...path, `[${index}]`], callback);
300
+ });
301
+ }
302
+ else {
303
+ for (const key in obj) {
304
+ if (obj.hasOwnProperty(key)) {
305
+ this.walkPayload(obj[key], [...path, key], callback);
306
+ }
307
+ }
308
+ }
309
+ }
310
+ generateFeedbackQuestions(warnings) {
311
+ const questions = [];
312
+ const feedbackWarnings = warnings.filter(w => w.requiresFeedback);
313
+ const grouped = _.groupBy(feedbackWarnings, 'type');
314
+ for (const [type, typeWarnings] of Object.entries(grouped)) {
315
+ switch (type) {
316
+ case PayloadWarningType.ContentTruncation:
317
+ const truncations = typeWarnings;
318
+ for (const warning of truncations) {
319
+ questions.push(`Did you intend to reduce the content at "${warning.path}" from ${warning.details.originalLength} to ${warning.details.newLength} characters (${warning.details.reductionPercentage.toFixed(1)}% reduction)?`);
320
+ }
321
+ break;
322
+ case PayloadWarningType.KeyRemoval:
323
+ const removals = typeWarnings;
324
+ for (const warning of removals) {
325
+ questions.push(`Did you intend to remove the following non-empty keys at "${warning.path}": ${warning.details.removedKeys.join(', ')}?`);
326
+ }
327
+ break;
328
+ case PayloadWarningType.TypeChange:
329
+ for (const warning of typeWarnings) {
330
+ questions.push(`Did you intend to change the type at "${warning.path}" from ${warning.details.originalType} to ${warning.details.newType}?`);
331
+ }
332
+ break;
333
+ }
334
+ }
335
+ return questions;
336
+ }
337
+ }
338
+ exports.PayloadChangeAnalyzer = PayloadChangeAnalyzer;
339
+ //# sourceMappingURL=PayloadChangeAnalyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadChangeAnalyzer.js","sourceRoot":"","sources":["../src/PayloadChangeAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,39 @@
1
+ import { PayloadWarning } from './PayloadChangeAnalyzer';
2
+ export interface PayloadFeedbackQuestion {
3
+ id: string;
4
+ question: string;
5
+ warning: PayloadWarning;
6
+ context?: {
7
+ path: string;
8
+ changeType: string;
9
+ details: any;
10
+ };
11
+ }
12
+ export interface PayloadFeedbackResponse {
13
+ questionId: string;
14
+ intended: boolean;
15
+ explanation?: string;
16
+ }
17
+ export interface PayloadFeedbackResult {
18
+ questions: PayloadFeedbackQuestion[];
19
+ responses: PayloadFeedbackResponse[];
20
+ acceptedChanges: string[];
21
+ rejectedChanges: string[];
22
+ requiresRevision: boolean;
23
+ }
24
+ export interface PayloadFeedbackConfig {
25
+ feedbackPromptId?: string;
26
+ maxQuestionsPerBatch?: number;
27
+ temperature?: number;
28
+ }
29
+ export declare class PayloadFeedbackManager {
30
+ private config;
31
+ constructor(config?: PayloadFeedbackConfig);
32
+ generateQuestions(warnings: PayloadWarning[]): PayloadFeedbackQuestion[];
33
+ private createQuestionFromWarning;
34
+ queryAgent(questions: PayloadFeedbackQuestion[], conversationContext: any): Promise<PayloadFeedbackResponse[]>;
35
+ private buildFeedbackTemplateParams;
36
+ processFeedback(questions: PayloadFeedbackQuestion[], responses: PayloadFeedbackResponse[]): PayloadFeedbackResult;
37
+ logFeedbackResults(result: PayloadFeedbackResult): void;
38
+ }
39
+ //# sourceMappingURL=PayloadFeedbackManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"PayloadFeedbackManager.d.ts","sourceRoot":"","sources":["../src/PayloadFeedbackManager.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,cAAc,EAAE,MAAM,yBAAyB,CAAC;AAKzD,MAAM,WAAW,uBAAuB;IACpC,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,cAAc,CAAC;IACxB,OAAO,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,EAAE,MAAM,CAAC;QACnB,OAAO,EAAE,GAAG,CAAC;KAChB,CAAC;CACL;AAKD,MAAM,WAAW,uBAAuB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,MAAM,WAAW,qBAAqB;IAClC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,SAAS,EAAE,uBAAuB,EAAE,CAAC;IACrC,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;IAC1B,gBAAgB,EAAE,OAAO,CAAC;CAC7B;AAKD,MAAM,WAAW,qBAAqB;IAElC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAE1B,oBAAoB,CAAC,EAAE,MAAM,CAAC;IAE9B,WAAW,CAAC,EAAE,MAAM,CAAC;CACxB;AAKD,qBAAa,sBAAsB;IAC/B,OAAO,CAAC,MAAM,CAAwB;gBAE1B,MAAM,CAAC,EAAE,qBAAqB;IAWnC,iBAAiB,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,uBAAuB,EAAE;IAgB/E,OAAO,CAAC,yBAAyB;IA6CpB,UAAU,CACnB,SAAS,EAAE,uBAAuB,EAAE,EACpC,mBAAmB,EAAE,GAAG,GACzB,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAqBrC,OAAO,CAAC,2BAA2B;IAiB5B,eAAe,CAClB,SAAS,EAAE,uBAAuB,EAAE,EACpC,SAAS,EAAE,uBAAuB,EAAE,GACrC,qBAAqB;IA2BjB,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG,IAAI;CAoBjE"}