@memberjunction/ai-agents 5.2.0 → 5.3.1

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 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
@@ -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;AAGvC,OAAO,EACH,eAAe,EACf,qBAAqB,EACrB,0BAA0B,EAC1B,mBAAmB,EACnB,0BAA0B,EAC1B,WAAW,EACd,MAAM,6BAA6B,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;AAEvC,wDAAwD;AACxD,OAAO,EACH,eAAe,EAEf,0BAA0B,EAG1B,WAAW,EACd,MAAM,6BAA6B,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.Conversation c ON ar.ConversationID = c.ID
246
- INNER JOIN __mj.ConversationDetail cd ON cd.ConversationID = c.ID
247
- INNER JOIN __mj.ConversationDetailArtifact cda ON cda.ConversationDetailID = cd.ID
248
- INNER JOIN __mj.ArtifactVersion av ON av.ID = cda.ArtifactVersionID
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.ArtifactUse au
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.2.0",
4
+ "version": "5.3.1",
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.2.0",
21
- "@memberjunction/actions-base": "5.2.0",
22
- "@memberjunction/ai": "5.2.0",
23
- "@memberjunction/ai-core-plus": "5.2.0",
24
- "@memberjunction/ai-engine-base": "5.2.0",
25
- "@memberjunction/ai-prompts": "5.2.0",
26
- "@memberjunction/ai-reranker": "5.2.0",
27
- "@memberjunction/aiengine": "5.2.0",
28
- "@memberjunction/core": "5.2.0",
29
- "@memberjunction/core-entities": "5.2.0",
30
- "@memberjunction/global": "5.2.0",
20
+ "@memberjunction/actions": "5.3.1",
21
+ "@memberjunction/actions-base": "5.3.1",
22
+ "@memberjunction/ai": "5.3.1",
23
+ "@memberjunction/ai-core-plus": "5.3.1",
24
+ "@memberjunction/ai-engine-base": "5.3.1",
25
+ "@memberjunction/ai-prompts": "5.3.1",
26
+ "@memberjunction/ai-reranker": "5.3.1",
27
+ "@memberjunction/aiengine": "5.3.1",
28
+ "@memberjunction/core": "5.3.1",
29
+ "@memberjunction/core-entities": "5.3.1",
30
+ "@memberjunction/global": "5.3.1",
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",