@memberjunction/ai-agents 5.2.0 → 5.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.
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/memory-manager-agent.js +5 -5
- package/dist/query-builder-agent.d.ts +27 -0
- package/dist/query-builder-agent.d.ts.map +1 -0
- package/dist/query-builder-agent.js +97 -0
- package/dist/query-builder-agent.js.map +1 -0
- package/package.json +14 -13
package/dist/index.d.ts
CHANGED
|
@@ -21,5 +21,6 @@ export * from './types/payload-operations.js';
|
|
|
21
21
|
export * from './AgentDataPreloader.js';
|
|
22
22
|
export * from './agent-context-injector.js';
|
|
23
23
|
export * from './memory-manager-agent.js';
|
|
24
|
+
export * from './query-builder-agent.js';
|
|
24
25
|
export { RerankerService, RerankerConfiguration, parseRerankerConfiguration, RerankServiceResult, RerankObservabilityOptions, LLMReranker } from '@memberjunction/ai-reranker';
|
|
25
26
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAGtC,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,EACd,MAAM,6BAA6B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -21,6 +21,7 @@ export * from './types/payload-operations.js';
|
|
|
21
21
|
export * from './AgentDataPreloader.js';
|
|
22
22
|
export * from './agent-context-injector.js';
|
|
23
23
|
export * from './memory-manager-agent.js';
|
|
24
|
+
export * from './query-builder-agent.js';
|
|
24
25
|
// Re-export from ai-reranker for backward compatibility
|
|
25
26
|
export { RerankerService, parseRerankerConfiguration, LLMReranker } from '@memberjunction/ai-reranker';
|
|
26
27
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,cAAc,+BAA+B,CAAC;AAC9C,cAAc,wCAAwC,CAAC;AACvD,cAAc,wCAAwC,CAAC;AACvD,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,yBAAyB,CAAC;AACxC,cAAc,0BAA0B,CAAC;AACzC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,0BAA0B,CAAC;AACzC,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAEtC,wDAAwD;AACxD,OAAO,EACH,eAAe,EAEf,0BAA0B,EAG1B,WAAW,EACd,MAAM,6BAA6B,CAAC"}
|
|
@@ -242,13 +242,13 @@ let MemoryManagerAgent = class MemoryManagerAgent extends BaseAgent {
|
|
|
242
242
|
ID IN (
|
|
243
243
|
SELECT DISTINCT ar.ID
|
|
244
244
|
FROM __mj.AIAgentRun ar
|
|
245
|
-
INNER JOIN __mj.
|
|
246
|
-
INNER JOIN __mj.
|
|
247
|
-
INNER JOIN __mj.
|
|
248
|
-
INNER JOIN __mj.
|
|
245
|
+
INNER JOIN __mj.vwConversations c ON ar.ConversationID = c.ID
|
|
246
|
+
INNER JOIN __mj.vwConversationDetails cd ON cd.ConversationID = c.ID
|
|
247
|
+
INNER JOIN __mj.vwConversationDetailArtifacts cda ON cda.ConversationDetailID = cd.ID
|
|
248
|
+
INNER JOIN __mj.vwArtifactVersions av ON av.ID = cda.ArtifactVersionID
|
|
249
249
|
WHERE EXISTS (
|
|
250
250
|
SELECT 1
|
|
251
|
-
FROM __mj.
|
|
251
|
+
FROM __mj.vwArtifactUses au
|
|
252
252
|
WHERE au.ArtifactVersionID = av.ID
|
|
253
253
|
${sinceFilter}
|
|
254
254
|
GROUP BY au.ArtifactVersionID
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { BaseAgent } from './base-agent.js';
|
|
2
|
+
import { ExecuteAgentParams, BaseAgentNextStep, MJAIAgentRunEntityExtended, MJAIAgentRunStepEntityExtended } from '@memberjunction/ai-core-plus';
|
|
3
|
+
/**
|
|
4
|
+
* Query Builder Agent - Orchestrator for building data queries.
|
|
5
|
+
*
|
|
6
|
+
* Extends BaseAgent to add post-processing when the agent completes:
|
|
7
|
+
* - Formats SQL in `metadata.sql` using sql-formatter for consistent,
|
|
8
|
+
* readable output regardless of how the LLM emitted it.
|
|
9
|
+
*/
|
|
10
|
+
export declare class QueryBuilderAgent extends BaseAgent {
|
|
11
|
+
/**
|
|
12
|
+
* After the base validation passes, format the SQL in the payload
|
|
13
|
+
* so it is always stored with proper indentation and line breaks.
|
|
14
|
+
*/
|
|
15
|
+
protected validateSuccessNextStep<P>(params: ExecuteAgentParams, nextStep: BaseAgentNextStep<P>, currentPayload: P, agentRun: MJAIAgentRunEntityExtended, currentStep: MJAIAgentRunStepEntityExtended): Promise<BaseAgentNextStep<P>>;
|
|
16
|
+
/**
|
|
17
|
+
* Applies payload change request (if any) to produce the actual payload
|
|
18
|
+
* that will be persisted.
|
|
19
|
+
*/
|
|
20
|
+
private resolveEffectivePayload;
|
|
21
|
+
/**
|
|
22
|
+
* Looks for `metadata.sql` in the payload and formats it with sql-formatter.
|
|
23
|
+
* Returns a new payload with the formatted SQL, or null if no formatting was needed.
|
|
24
|
+
*/
|
|
25
|
+
private formatPayloadSql;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=query-builder-agent.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder-agent.d.ts","sourceRoot":"","sources":["../src/query-builder-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,8BAA8B,EAAE,MAAM,8BAA8B,CAAC;AAIjJ;;;;;;GAMG;AACH,qBACa,iBAAkB,SAAQ,SAAS;IAE5C;;;OAGG;cACsB,uBAAuB,CAAC,CAAC,EAC9C,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAC9B,cAAc,EAAE,CAAC,EACjB,QAAQ,EAAE,0BAA0B,EACpC,WAAW,EAAE,8BAA8B,GAC5C,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC;IAsBhC;;;OAGG;IACH,OAAO,CAAC,uBAAuB;IAY/B;;;OAGG;IACH,OAAO,CAAC,gBAAgB;CAmC3B"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
2
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
3
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
4
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
5
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
6
|
+
};
|
|
7
|
+
import { BaseAgent } from './base-agent.js';
|
|
8
|
+
import { PayloadManager } from './PayloadManager.js';
|
|
9
|
+
import { RegisterClass } from '@memberjunction/global';
|
|
10
|
+
import { format as formatSQL } from 'sql-formatter';
|
|
11
|
+
/**
|
|
12
|
+
* Query Builder Agent - Orchestrator for building data queries.
|
|
13
|
+
*
|
|
14
|
+
* Extends BaseAgent to add post-processing when the agent completes:
|
|
15
|
+
* - Formats SQL in `metadata.sql` using sql-formatter for consistent,
|
|
16
|
+
* readable output regardless of how the LLM emitted it.
|
|
17
|
+
*/
|
|
18
|
+
let QueryBuilderAgent = class QueryBuilderAgent extends BaseAgent {
|
|
19
|
+
/**
|
|
20
|
+
* After the base validation passes, format the SQL in the payload
|
|
21
|
+
* so it is always stored with proper indentation and line breaks.
|
|
22
|
+
*/
|
|
23
|
+
async validateSuccessNextStep(params, nextStep, currentPayload, agentRun, currentStep) {
|
|
24
|
+
// Run base validation first (min-execution checks, payload schema, etc.)
|
|
25
|
+
const baseResult = await super.validateSuccessNextStep(params, nextStep, currentPayload, agentRun, currentStep);
|
|
26
|
+
if (baseResult.step === 'Retry') {
|
|
27
|
+
return baseResult;
|
|
28
|
+
}
|
|
29
|
+
// Resolve the effective payload: apply any pending change request
|
|
30
|
+
const effectivePayload = this.resolveEffectivePayload(currentPayload, baseResult);
|
|
31
|
+
// Format SQL if present
|
|
32
|
+
const formatted = this.formatPayloadSql(effectivePayload);
|
|
33
|
+
if (formatted) {
|
|
34
|
+
return {
|
|
35
|
+
...baseResult,
|
|
36
|
+
newPayload: formatted
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
return baseResult;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Applies payload change request (if any) to produce the actual payload
|
|
43
|
+
* that will be persisted.
|
|
44
|
+
*/
|
|
45
|
+
resolveEffectivePayload(currentPayload, nextStep) {
|
|
46
|
+
if (nextStep.payloadChangeRequest) {
|
|
47
|
+
const pm = new PayloadManager();
|
|
48
|
+
const result = pm.applyAgentChangeRequest(currentPayload, nextStep.payloadChangeRequest);
|
|
49
|
+
return result.result || currentPayload;
|
|
50
|
+
}
|
|
51
|
+
if (nextStep.newPayload) {
|
|
52
|
+
return nextStep.newPayload;
|
|
53
|
+
}
|
|
54
|
+
return currentPayload;
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* Looks for `metadata.sql` in the payload and formats it with sql-formatter.
|
|
58
|
+
* Returns a new payload with the formatted SQL, or null if no formatting was needed.
|
|
59
|
+
*/
|
|
60
|
+
formatPayloadSql(payload) {
|
|
61
|
+
const p = payload;
|
|
62
|
+
const metadata = p?.metadata;
|
|
63
|
+
const rawSql = metadata?.sql;
|
|
64
|
+
if (typeof rawSql !== 'string' || rawSql.trim().length === 0) {
|
|
65
|
+
return null;
|
|
66
|
+
}
|
|
67
|
+
try {
|
|
68
|
+
const formatted = formatSQL(rawSql, {
|
|
69
|
+
language: 'tsql',
|
|
70
|
+
tabWidth: 4,
|
|
71
|
+
keywordCase: 'upper',
|
|
72
|
+
linesBetweenQueries: 2
|
|
73
|
+
});
|
|
74
|
+
// Only update if formatting actually changed something
|
|
75
|
+
if (formatted === rawSql) {
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
return {
|
|
79
|
+
...p,
|
|
80
|
+
metadata: {
|
|
81
|
+
...metadata,
|
|
82
|
+
sql: formatted
|
|
83
|
+
}
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
catch (err) {
|
|
87
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
88
|
+
console.warn(`QueryBuilderAgent: sql-formatter failed, keeping original SQL. Error: ${message}`);
|
|
89
|
+
return null;
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
};
|
|
93
|
+
QueryBuilderAgent = __decorate([
|
|
94
|
+
RegisterClass(BaseAgent, 'QueryBuilderAgent')
|
|
95
|
+
], QueryBuilderAgent);
|
|
96
|
+
export { QueryBuilderAgent };
|
|
97
|
+
//# sourceMappingURL=query-builder-agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query-builder-agent.js","sourceRoot":"","sources":["../src/query-builder-agent.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@memberjunction/ai-agents",
|
|
3
3
|
"type": "module",
|
|
4
|
-
"version": "5.
|
|
4
|
+
"version": "5.3.0",
|
|
5
5
|
"description": "MemberJunction: AI Agent Execution and Management",
|
|
6
6
|
"main": "dist/index.js",
|
|
7
7
|
"types": "dist/index.d.ts",
|
|
@@ -17,20 +17,21 @@
|
|
|
17
17
|
"author": "MemberJunction.com",
|
|
18
18
|
"license": "ISC",
|
|
19
19
|
"dependencies": {
|
|
20
|
-
"@memberjunction/actions": "5.
|
|
21
|
-
"@memberjunction/actions-base": "5.
|
|
22
|
-
"@memberjunction/ai": "5.
|
|
23
|
-
"@memberjunction/ai-core-plus": "5.
|
|
24
|
-
"@memberjunction/ai-engine-base": "5.
|
|
25
|
-
"@memberjunction/ai-prompts": "5.
|
|
26
|
-
"@memberjunction/ai-reranker": "5.
|
|
27
|
-
"@memberjunction/aiengine": "5.
|
|
28
|
-
"@memberjunction/core": "5.
|
|
29
|
-
"@memberjunction/core-entities": "5.
|
|
30
|
-
"@memberjunction/global": "5.
|
|
20
|
+
"@memberjunction/actions": "5.3.0",
|
|
21
|
+
"@memberjunction/actions-base": "5.3.0",
|
|
22
|
+
"@memberjunction/ai": "5.3.0",
|
|
23
|
+
"@memberjunction/ai-core-plus": "5.3.0",
|
|
24
|
+
"@memberjunction/ai-engine-base": "5.3.0",
|
|
25
|
+
"@memberjunction/ai-prompts": "5.3.0",
|
|
26
|
+
"@memberjunction/ai-reranker": "5.3.0",
|
|
27
|
+
"@memberjunction/aiengine": "5.3.0",
|
|
28
|
+
"@memberjunction/core": "5.3.0",
|
|
29
|
+
"@memberjunction/core-entities": "5.3.0",
|
|
30
|
+
"@memberjunction/global": "5.3.0",
|
|
31
31
|
"dotenv": "^17.2.4",
|
|
32
32
|
"lodash": "^4.17.23",
|
|
33
|
-
"rxjs": "^7.8.2"
|
|
33
|
+
"rxjs": "^7.8.2",
|
|
34
|
+
"sql-formatter": "^15.7.0"
|
|
34
35
|
},
|
|
35
36
|
"devDependencies": {
|
|
36
37
|
"@types/lodash": "^4.17.23",
|