@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 +85 -4
- package/dist/PayloadChangeAnalyzer.d.ts +71 -0
- package/dist/PayloadChangeAnalyzer.d.ts.map +1 -0
- package/dist/PayloadChangeAnalyzer.js +339 -0
- package/dist/PayloadChangeAnalyzer.js.map +1 -0
- package/dist/PayloadFeedbackManager.d.ts +39 -0
- package/dist/PayloadFeedbackManager.d.ts.map +1 -0
- package/dist/PayloadFeedbackManager.js +117 -0
- package/dist/PayloadFeedbackManager.js.map +1 -0
- package/dist/PayloadManager.d.ts +19 -17
- package/dist/PayloadManager.d.ts.map +1 -1
- package/dist/PayloadManager.js +41 -11
- package/dist/PayloadManager.js.map +1 -1
- package/dist/base-agent.d.ts +2 -0
- package/dist/base-agent.d.ts.map +1 -1
- package/dist/base-agent.js +169 -4
- package/dist/base-agent.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +10 -10
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"}
|