@memberjunction/server 5.41.0 → 5.43.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/agentSessions/SessionJanitor.d.ts.map +1 -1
- package/dist/agentSessions/SessionJanitor.js +5 -1
- package/dist/agentSessions/SessionJanitor.js.map +1 -1
- package/dist/agentSessions/SessionManager.d.ts +15 -2
- package/dist/agentSessions/SessionManager.d.ts.map +1 -1
- package/dist/agentSessions/SessionManager.js +50 -11
- package/dist/agentSessions/SessionManager.js.map +1 -1
- package/dist/agentSessions/index.d.ts +1 -0
- package/dist/agentSessions/index.d.ts.map +1 -1
- package/dist/agentSessions/index.js +5 -0
- package/dist/agentSessions/index.js.map +1 -1
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts +102 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.d.ts.map +1 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.js +164 -0
- package/dist/agentSessions/remoteBrowserGoalEngine.js.map +1 -0
- package/dist/agentSessions/remoteBrowserGoalRegistry.d.ts +66 -0
- package/dist/agentSessions/remoteBrowserGoalRegistry.d.ts.map +1 -0
- package/dist/agentSessions/remoteBrowserGoalRegistry.js +86 -0
- package/dist/agentSessions/remoteBrowserGoalRegistry.js.map +1 -0
- package/dist/auth/initializeProviders.d.ts.map +1 -1
- package/dist/auth/initializeProviders.js +4 -7
- package/dist/auth/initializeProviders.js.map +1 -1
- package/dist/config.d.ts +7 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +12 -2
- package/dist/config.js.map +1 -1
- package/dist/generated/generated.d.ts +612 -0
- package/dist/generated/generated.d.ts.map +1 -1
- package/dist/generated/generated.js +6934 -3626
- package/dist/generated/generated.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +38 -17
- package/dist/index.js.map +1 -1
- package/dist/integration/CustomColumnPromoter.d.ts +108 -0
- package/dist/integration/CustomColumnPromoter.d.ts.map +1 -0
- package/dist/integration/CustomColumnPromoter.js +508 -0
- package/dist/integration/CustomColumnPromoter.js.map +1 -0
- package/dist/logging/StartupLogger.d.ts +57 -1
- package/dist/logging/StartupLogger.d.ts.map +1 -1
- package/dist/logging/StartupLogger.js +115 -6
- package/dist/logging/StartupLogger.js.map +1 -1
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts +46 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.d.ts.map +1 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.js +192 -0
- package/dist/resolvers/ExecuteRemoteOperationResolver.js.map +1 -0
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts +101 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.d.ts.map +1 -1
- package/dist/resolvers/IntegrationDiscoveryResolver.js +629 -58
- package/dist/resolvers/IntegrationDiscoveryResolver.js.map +1 -1
- package/dist/resolvers/RealtimeBridgeResolver.d.ts +130 -0
- package/dist/resolvers/RealtimeBridgeResolver.d.ts.map +1 -0
- package/dist/resolvers/RealtimeBridgeResolver.js +580 -0
- package/dist/resolvers/RealtimeBridgeResolver.js.map +1 -0
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts +78 -5
- package/dist/resolvers/RemoteBrowserActionResolver.d.ts.map +1 -1
- package/dist/resolvers/RemoteBrowserActionResolver.js +227 -15
- package/dist/resolvers/RemoteBrowserActionResolver.js.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.d.ts.map +1 -1
- package/dist/resolvers/RunAIAgentResolver.js +0 -7
- package/dist/resolvers/RunAIAgentResolver.js.map +1 -1
- package/dist/resolvers/RunTemplateResolver.d.ts +8 -0
- package/dist/resolvers/RunTemplateResolver.d.ts.map +1 -1
- package/dist/resolvers/RunTemplateResolver.js +8 -0
- package/dist/resolvers/RunTemplateResolver.js.map +1 -1
- package/dist/rest/setupRESTEndpoints.d.ts.map +1 -1
- package/dist/rest/setupRESTEndpoints.js +5 -3
- package/dist/rest/setupRESTEndpoints.js.map +1 -1
- package/package.json +83 -78
- package/src/__tests__/RealtimeBridgeResolver.test.ts +100 -0
- package/src/__tests__/RemoteBrowserAudioStream.test.ts +8 -1
- package/src/__tests__/RemoteBrowserGoalEngine.test.ts +144 -0
- package/src/__tests__/remoteBrowserGoalRegistry.test.ts +81 -0
- package/src/agentSessions/SessionJanitor.ts +15 -1
- package/src/agentSessions/SessionManager.ts +59 -10
- package/src/agentSessions/index.ts +5 -0
- package/src/agentSessions/remoteBrowserGoalEngine.ts +191 -0
- package/src/agentSessions/remoteBrowserGoalRegistry.ts +122 -0
- package/src/auth/initializeProviders.ts +4 -7
- package/src/config.ts +13 -2
- package/src/generated/generated.ts +2502 -198
- package/src/index.ts +38 -17
- package/src/integration/CustomColumnPromoter.ts +597 -0
- package/src/logging/StartupLogger.ts +130 -6
- package/src/resolvers/ExecuteRemoteOperationResolver.ts +164 -0
- package/src/resolvers/IntegrationDiscoveryResolver.ts +490 -53
- package/src/resolvers/RealtimeBridgeResolver.ts +493 -0
- package/src/resolvers/RemoteBrowserActionResolver.ts +232 -17
- package/src/resolvers/RunAIAgentResolver.ts +1 -9
- package/src/resolvers/RunTemplateResolver.ts +8 -0
- package/src/rest/setupRESTEndpoints.ts +5 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EACH,iBAAiB,EACjB,QAAQ,EAMX,MAAM,sBAAsB,CAAC;AAW9B,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACjC,0GAA0G;IAC1G,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+FAA+F;IAC/F,eAAe,EAAE,MAAM,CAAC;CAC3B;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,cAAc,CAAE,YAAW,aAAa;IACtF,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAEvD,SAAS;IAIT,8FAA8F;IAC9F,WAAkB,QAAQ,IAAI,cAAc,CAE3C;IAED,qDAAqD;IACrD,SAAgB,YAAY,oBAAoB;IAEhD,4EAA4E;IACrE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAI7D;;;;OAIG;IACU,KAAK,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzG,iFAAiF;IAC1E,IAAI,IAAI,IAAI;IAOnB;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjG;;;OAGG;IACU,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnG;;;OAGG;IACU,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlG,mDAAmD;IACnD,OAAO,CAAC,gBAAgB;IAOxB,qGAAqG;IACrG,OAAO,CAAC,aAAa;IAQrB,8FAA8F;YAChF,aAAa;IAc3B;;;;;OAKG;YACW,aAAa;
|
|
1
|
+
{"version":3,"file":"SessionJanitor.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAoB,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACxF,OAAO,EACH,iBAAiB,EACjB,QAAQ,EAMX,MAAM,sBAAsB,CAAC;AAW9B,wEAAwE;AACxE,MAAM,WAAW,oBAAoB;IACjC,0GAA0G;IAC1G,qBAAqB,EAAE,MAAM,CAAC;IAC9B,+FAA+F;IAC/F,eAAe,EAAE,MAAM,CAAC;CAC3B;AAOD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,qBAAa,cAAe,SAAQ,aAAa,CAAC,cAAc,CAAE,YAAW,aAAa;IACtF,OAAO,CAAC,OAAO,CAAwC;IACvD,OAAO,CAAC,WAAW,CAA+C;IAClE,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,WAAW,CAAyB;IAC5C,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IAEvD,SAAS;IAIT,8FAA8F;IAC9F,WAAkB,QAAQ,IAAI,cAAc,CAE3C;IAED,qDAAqD;IACrD,SAAgB,YAAY,oBAAoB;IAEhD,4EAA4E;IACrE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI;IAI7D;;;;OAIG;IACU,KAAK,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWzG,iFAAiF;IAC1E,IAAI,IAAI,IAAI;IAOnB;;;;;;OAMG;IACU,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAWtC;;;;;OAKG;IACU,gBAAgB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAUjG;;;OAGG;IACU,kBAAkB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAcnG;;;OAGG;IACU,iBAAiB,CAAC,QAAQ,EAAE,iBAAiB,EAAE,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC;IAYlG,mDAAmD;IACnD,OAAO,CAAC,gBAAgB;IAOxB,qGAAqG;IACrG,OAAO,CAAC,aAAa;IAQrB,8FAA8F;YAChF,aAAa;IAc3B;;;;;OAKG;YACW,aAAa;IA8C3B,sFAAsF;YACxE,SAAS;CAqB1B"}
|
|
@@ -188,8 +188,12 @@ export class SessionJanitor extends BaseSingleton {
|
|
|
188
188
|
if (page.length === 0) {
|
|
189
189
|
break;
|
|
190
190
|
}
|
|
191
|
+
// Batch-load every channel for this whole page of sessions in ONE query, then hand each
|
|
192
|
+
// session its own slice to CloseSession — avoids the N+1 channel read (one RunView per
|
|
193
|
+
// closing session) that tripped the sequential / multiple-same-entity telemetry.
|
|
194
|
+
const channelsBySession = await this.sessionManager.LoadActiveChannelsBySession(page.map(s => s.ID), systemUser, provider);
|
|
191
195
|
for (const session of page) {
|
|
192
|
-
const closed = await this.sessionManager.CloseSession(session.ID, systemUser, provider, closeReason);
|
|
196
|
+
const closed = await this.sessionManager.CloseSession(session.ID, systemUser, provider, closeReason, channelsBySession.get(session.ID.toLowerCase()) ?? []);
|
|
193
197
|
if (closed) {
|
|
194
198
|
closedCount++;
|
|
195
199
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionJanitor.js","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SessionJanitor.js","sourceRoot":"","sources":["../../src/agentSessions/SessionJanitor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { IMetadataProvider, UserInfo } from '@memberjunction/core';
|
|
2
|
-
import { MJAIAgentSessionEntity } from '@memberjunction/core-entities';
|
|
2
|
+
import { MJAIAgentSessionEntity, MJAIAgentSessionChannelEntity } from '@memberjunction/core-entities';
|
|
3
3
|
/**
|
|
4
4
|
* Inputs for {@link SessionManager.CreateSession}. `conversationID`/`lastSessionID`/`config`
|
|
5
5
|
* are optional — when no `conversationID` is supplied a fresh Conversation is created and linked.
|
|
@@ -79,7 +79,7 @@ export declare class SessionManager {
|
|
|
79
79
|
*
|
|
80
80
|
* @remarks P5 adds in-flight-run abort + `ClientToolRequestManager.ClearSession` here.
|
|
81
81
|
*/
|
|
82
|
-
CloseSession(agentSessionID: string, contextUser: UserInfo, provider: IMetadataProvider, closeReason?: SessionCloseReason): Promise<boolean>;
|
|
82
|
+
CloseSession(agentSessionID: string, contextUser: UserInfo, provider: IMetadataProvider, closeReason?: SessionCloseReason, preloadedChannels?: MJAIAgentSessionChannelEntity[]): Promise<boolean>;
|
|
83
83
|
/**
|
|
84
84
|
* Notifies the server-side channel-plugin host that a session started, so it can resolve the
|
|
85
85
|
* ACTIVE `MJ: AI Agent Channels` rows' `ServerPluginClass` plugins (one fresh instance per
|
|
@@ -126,6 +126,19 @@ export declare class SessionManager {
|
|
|
126
126
|
private markSessionClosed;
|
|
127
127
|
/** Marks every channel row of the session `Disconnected` (with `DisconnectedAt`), if not already. */
|
|
128
128
|
private disconnectChannels;
|
|
129
|
+
/**
|
|
130
|
+
* Loads the non-Disconnected channels for one or more sessions in a SINGLE RunView
|
|
131
|
+
* (`AgentSessionID IN (...)`). Session IDs are server-generated GUIDs (never user input), so
|
|
132
|
+
* inline interpolation carries no injection risk. Returns [] on empty input or load failure.
|
|
133
|
+
*/
|
|
134
|
+
private loadActiveChannels;
|
|
135
|
+
/**
|
|
136
|
+
* Batch-loads active channels for many sessions at once and groups them by AgentSessionID
|
|
137
|
+
* (lowercased), so a sweep can disconnect a whole page of sessions with ONE query instead of
|
|
138
|
+
* one-per-session. Sessions with no active channels are absent from the map (callers default
|
|
139
|
+
* to []). Pass each session's slice to {@link CloseSession}'s `preloadedChannels`.
|
|
140
|
+
*/
|
|
141
|
+
LoadActiveChannelsBySession(sessionIDs: string[], contextUser: UserInfo, provider: IMetadataProvider): Promise<Map<string, MJAIAgentSessionChannelEntity[]>>;
|
|
129
142
|
/** True once the per-session coalescing window has elapsed since the last persisted write. */
|
|
130
143
|
private heartbeatWriteDue;
|
|
131
144
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EACH,sBAAsB,
|
|
1
|
+
{"version":3,"file":"SessionManager.d.ts","sourceRoot":"","sources":["../../src/agentSessions/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,QAAQ,EAAqB,MAAM,sBAAsB,CAAC;AACtF,OAAO,EACH,sBAAsB,EACtB,6BAA6B,EAEhC,MAAM,+BAA+B,CAAC;AAsBvC;;;GAGG;AACH,MAAM,WAAW,kBAAkB;IAC/B,yFAAyF;IACzF,OAAO,EAAE,MAAM,CAAC;IAChB,iGAAiG;IACjG,MAAM,EAAE,MAAM,CAAC;IACf,uFAAuF;IACvF,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,8FAA8F;IAC9F,MAAM,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;GAMG;AACH,MAAM,MAAM,kBAAkB,GAAG,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,OAAO,CAAC;AAE/E;;;;GAIG;AACH,qBAAa,yBAA0B,SAAQ,KAAK;gBACpC,OAAO,EAAE,MAAM;CAI9B;AASD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,qBAAa,cAAc;IACvB,qFAAqF;IACrF,OAAO,CAAC,kBAAkB,CAA6B;IAEvD;;;;;;;;;OASG;IACU,aAAa,CACtB,KAAK,EAAE,kBAAkB,EACzB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,sBAAsB,CAAC;IAWlC;;;;;;;;;;;;OAYG;IACU,YAAY,CACrB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,GAAE,kBAA+B,EAC5C,iBAAiB,CAAC,EAAE,6BAA6B,EAAE,GACpD,OAAO,CAAC,OAAO,CAAC;IAyBnB;;;;;OAKG;YACW,kCAAkC;IAqBhD;;;;;OAKG;YACW,iCAAiC;IAW/C;;;;OAIG;YACW,yBAAyB;IAuBvC,sGAAsG;IACtG,OAAO,CAAC,qBAAqB;IAgB7B;;;;;OAKG;IACU,SAAS,CAClB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,OAAO,CAAC;IASnB;;;OAGG;IACU,QAAQ,CACjB,cAAc,EAAE,MAAM,EACtB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,OAAO,CAAC;IAcnB,0FAA0F;YAC5E,YAAY;IAS1B,8EAA8E;YAChE,kBAAkB;IAmBhC,6EAA6E;YAC/D,iBAAiB;IA0B/B,6EAA6E;YAC/D,WAAW;IAUzB,qFAAqF;YACvE,iBAAiB;IAU/B,qGAAqG;YACvF,kBAAkB;IAoBhC;;;;OAIG;YACW,kBAAkB;IAsBhC;;;;;OAKG;IACU,2BAA2B,CACpC,UAAU,EAAE,MAAM,EAAE,EACpB,WAAW,EAAE,QAAQ,EACrB,QAAQ,EAAE,iBAAiB,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,6BAA6B,EAAE,CAAC,CAAC;IAexD,8FAA8F;IAC9F,OAAO,CAAC,iBAAiB;IAKzB;;;;OAIG;IACH,OAAO,CAAC,gBAAgB;IAIxB,mGAAmG;YACrF,gBAAgB;IAoB9B,8FAA8F;YAChF,SAAS;CAU1B"}
|
|
@@ -79,7 +79,7 @@ export class SessionManager {
|
|
|
79
79
|
*
|
|
80
80
|
* @remarks P5 adds in-flight-run abort + `ClientToolRequestManager.ClearSession` here.
|
|
81
81
|
*/
|
|
82
|
-
async CloseSession(agentSessionID, contextUser, provider, closeReason = 'Explicit') {
|
|
82
|
+
async CloseSession(agentSessionID, contextUser, provider, closeReason = 'Explicit', preloadedChannels) {
|
|
83
83
|
const session = await this.loadSession(agentSessionID, contextUser, provider);
|
|
84
84
|
if (!session) {
|
|
85
85
|
return false;
|
|
@@ -96,7 +96,7 @@ export class SessionManager {
|
|
|
96
96
|
if (!closed) {
|
|
97
97
|
return false;
|
|
98
98
|
}
|
|
99
|
-
await this.disconnectChannels(agentSessionID, contextUser, provider);
|
|
99
|
+
await this.disconnectChannels(agentSessionID, contextUser, provider, preloadedChannels);
|
|
100
100
|
await this.finalizeObservabilityRuns(session, contextUser, provider);
|
|
101
101
|
await this.notifyChannelPluginsSessionClosed(agentSessionID, closeReason);
|
|
102
102
|
return true;
|
|
@@ -249,23 +249,62 @@ export class SessionManager {
|
|
|
249
249
|
return this.saveOrLog(session, 'CloseSession');
|
|
250
250
|
}
|
|
251
251
|
/** Marks every channel row of the session `Disconnected` (with `DisconnectedAt`), if not already. */
|
|
252
|
-
async disconnectChannels(agentSessionID, contextUser, provider) {
|
|
252
|
+
async disconnectChannels(agentSessionID, contextUser, provider, preloadedChannels) {
|
|
253
|
+
// Sweep callers (the janitor) close a whole page of sessions at once and pre-load every
|
|
254
|
+
// session's channels in ONE batched query (see LoadActiveChannelsBySession), passing this
|
|
255
|
+
// session's slice here to avoid an N+1 channel read (one RunView per closing session).
|
|
256
|
+
// Every other close path passes nothing and reads just this session's channels.
|
|
257
|
+
const channels = preloadedChannels
|
|
258
|
+
?? await this.loadActiveChannels([agentSessionID], contextUser, provider);
|
|
259
|
+
const now = new Date();
|
|
260
|
+
for (const channel of channels) {
|
|
261
|
+
channel.Status = 'Disconnected';
|
|
262
|
+
channel.DisconnectedAt = now;
|
|
263
|
+
await this.saveOrLog(channel, 'disconnectChannels');
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
/**
|
|
267
|
+
* Loads the non-Disconnected channels for one or more sessions in a SINGLE RunView
|
|
268
|
+
* (`AgentSessionID IN (...)`). Session IDs are server-generated GUIDs (never user input), so
|
|
269
|
+
* inline interpolation carries no injection risk. Returns [] on empty input or load failure.
|
|
270
|
+
*/
|
|
271
|
+
async loadActiveChannels(sessionIDs, contextUser, provider) {
|
|
272
|
+
if (sessionIDs.length === 0) {
|
|
273
|
+
return [];
|
|
274
|
+
}
|
|
275
|
+
const inList = sessionIDs.map(id => `'${id}'`).join(',');
|
|
253
276
|
const rv = RunView.FromMetadataProvider(provider);
|
|
254
277
|
const result = await rv.RunView({
|
|
255
278
|
EntityName: SESSION_CHANNEL_ENTITY,
|
|
256
|
-
ExtraFilter: `AgentSessionID
|
|
279
|
+
ExtraFilter: `AgentSessionID IN (${inList}) AND Status <> 'Disconnected'`,
|
|
257
280
|
ResultType: 'entity_object',
|
|
258
281
|
}, contextUser);
|
|
259
282
|
if (!result.Success) {
|
|
260
|
-
LogError(`SessionManager.
|
|
261
|
-
return;
|
|
283
|
+
LogError(`SessionManager.loadActiveChannels failed to load channels: ${result.ErrorMessage}`);
|
|
284
|
+
return [];
|
|
262
285
|
}
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
286
|
+
return result.Results;
|
|
287
|
+
}
|
|
288
|
+
/**
|
|
289
|
+
* Batch-loads active channels for many sessions at once and groups them by AgentSessionID
|
|
290
|
+
* (lowercased), so a sweep can disconnect a whole page of sessions with ONE query instead of
|
|
291
|
+
* one-per-session. Sessions with no active channels are absent from the map (callers default
|
|
292
|
+
* to []). Pass each session's slice to {@link CloseSession}'s `preloadedChannels`.
|
|
293
|
+
*/
|
|
294
|
+
async LoadActiveChannelsBySession(sessionIDs, contextUser, provider) {
|
|
295
|
+
const channels = await this.loadActiveChannels(sessionIDs, contextUser, provider);
|
|
296
|
+
const bySession = new Map();
|
|
297
|
+
for (const channel of channels) {
|
|
298
|
+
const key = String(channel.AgentSessionID).toLowerCase();
|
|
299
|
+
const list = bySession.get(key);
|
|
300
|
+
if (list) {
|
|
301
|
+
list.push(channel);
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
bySession.set(key, [channel]);
|
|
305
|
+
}
|
|
268
306
|
}
|
|
307
|
+
return bySession;
|
|
269
308
|
}
|
|
270
309
|
/** True once the per-session coalescing window has elapsed since the last persisted write. */
|
|
271
310
|
heartbeatWriteDue(key) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/agentSessions/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,QAAQ,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAMtF,OAAO,EAAE,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,4BAA4B,EAAE,yBAAyB,EAAE,MAAM,2BAA2B,CAAC;AACpG,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,iGAAiG;AACjG,MAAM,cAAc,GAAG,uBAAuB,CAAC;AAC/C,MAAM,sBAAsB,GAAG,+BAA+B,CAAC;AAC/D,MAAM,mBAAmB,GAAG,mBAAmB,CAAC;AAwChD;;;;GAIG;AACH,MAAM,OAAO,yBAA0B,SAAQ,KAAK;IAChD,YAAY,OAAe;QACvB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,2BAA2B,CAAC;IAC5C,CAAC;CACJ;AAED;;;;GAIG;AACH,MAAM,+BAA+B,GAAG,KAAK,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,OAAO,cAAc;IAA3B;QACI,qFAAqF;QAC7E,uBAAkB,GAAG,IAAI,GAAG,EAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/agentSessions/SessionManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agentSessions/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agentSessions/index.ts"],"names":[],"mappings":"AA4BA,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import { LoadWhiteboardChannelServer, LoadMeetingControlsChannelServer } from '@memberjunction/ai-agents';
|
|
11
11
|
import { LoadRemoteBrowserChannel } from '@memberjunction/remote-browser-server';
|
|
12
12
|
import { LoadSelfHostRemoteBrowser } from '@memberjunction/remote-browser-selfhost';
|
|
13
|
+
import { BindRemoteBrowserGoalEngine } from './remoteBrowserGoalEngine.js';
|
|
13
14
|
// Tree-shaking prevention: force the server-side channel plugin registrations
|
|
14
15
|
// (`@RegisterClass(BaseRealtimeChannelServer, ...)`) to execute on any static path that touches
|
|
15
16
|
// the session lifecycle — `SessionManager.CreateSession` resolves them via the ClassFactory.
|
|
@@ -20,6 +21,10 @@ LoadMeetingControlsChannelServer();
|
|
|
20
21
|
// Playwright — pulled in transitively through the SelfHost package, documented and acceptable).
|
|
21
22
|
LoadRemoteBrowserChannel();
|
|
22
23
|
LoadSelfHostRemoteBrowser();
|
|
24
|
+
// Bind goal-driven browser control to MJ's computer-use engine (vision-model auto-selection, prompt-run
|
|
25
|
+
// logging, credential resolution). Without this, RunComputerUseGoal falls back to the bare base engine.
|
|
26
|
+
BindRemoteBrowserGoalEngine();
|
|
27
|
+
export * from './remoteBrowserGoalEngine.js';
|
|
23
28
|
export * from './HostInstance.js';
|
|
24
29
|
export * from './SessionManager.js';
|
|
25
30
|
export * from './SessionJanitor.js';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agentSessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/agentSessions/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,2BAA2B,EAAE,gCAAgC,EAAE,MAAM,2BAA2B,CAAC;AAC1G,OAAO,EAAE,wBAAwB,EAAE,MAAM,uCAAuC,CAAC;AACjF,OAAO,EAAE,yBAAyB,EAAE,MAAM,yCAAyC,CAAC;AACpF,OAAO,EAAE,2BAA2B,EAAE,MAAM,8BAA8B,CAAC;AAE3E,8EAA8E;AAC9E,gGAAgG;AAChG,6FAA6F;AAC7F,2BAA2B,EAAE,CAAC;AAC9B,gCAAgC,EAAE,CAAC;AACnC,gGAAgG;AAChG,iGAAiG;AACjG,gGAAgG;AAChG,wBAAwB,EAAE,CAAC;AAC3B,yBAAyB,EAAE,CAAC;AAC5B,wGAAwG;AACxG,wGAAwG;AACxG,2BAA2B,EAAE,CAAC;AAE9B,cAAc,8BAA8B,CAAC;AAC7C,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview **Production binding** of the Remote Browser goal-engine seam to MJ's computer-use engine.
|
|
3
|
+
*
|
|
4
|
+
* The CDP remote-browser session ({@link CdpRemoteBrowserSession}) runs goal-driven browser control through
|
|
5
|
+
* an injectable {@link ComputerUseGoalRun} factory. By default that factory yields a bare
|
|
6
|
+
* `ProgressComputerUseEngine` (base computer-use), which has no model auto-selection — so it can't run a goal
|
|
7
|
+
* unsupervised. This module binds the factory to {@link MJProgressComputerUseEngine}: an MJ-aware engine that
|
|
8
|
+
* routes controller/judge prompts through `AIPromptRunner`, auto-selects a vision-capable model from MJ
|
|
9
|
+
* metadata, persists step media, AND forwards per-step progress for live narration.
|
|
10
|
+
*
|
|
11
|
+
* Called once at server startup from `agentSessions/index.ts` (the realtime composition point), so every
|
|
12
|
+
* goal-driven run on this process uses the MJ engine. Kept here (an application package), not in any library,
|
|
13
|
+
* because it is the seam where the transport-neutral CDP layer is wired to MJ's AI stack.
|
|
14
|
+
*
|
|
15
|
+
* @module @memberjunction/server
|
|
16
|
+
*/
|
|
17
|
+
import { UserInfo, IMetadataProvider } from '@memberjunction/core';
|
|
18
|
+
import { MJAIAgentRunStepEntity } from '@memberjunction/core-entities';
|
|
19
|
+
import type { ComputerUseResult, RunComputerUseParams, StepRecord } from '@memberjunction/computer-use';
|
|
20
|
+
import { MJComputerUseEngine, MJRunComputerUseParams } from '@memberjunction/computer-use-engine';
|
|
21
|
+
import type { RemoteBrowserGoalResult } from '@memberjunction/remote-browser-base';
|
|
22
|
+
import { type ComputerUseGoalProgress, type ComputerUseGoalRun } from '@memberjunction/remote-browser-cdp';
|
|
23
|
+
/**
|
|
24
|
+
* Adapts the transport-neutral base computer-use params into {@link MJRunComputerUseParams}, injecting the
|
|
25
|
+
* acting user so the MJ engine can run its controller/judge prompts as that user. Pure + exported for unit
|
|
26
|
+
* testing; {@link MJProgressComputerUseEngine.Run} is a one-liner over it.
|
|
27
|
+
*
|
|
28
|
+
* @param params The base computer-use params the CDP session built (goal + step cap + start url).
|
|
29
|
+
* @param contextUser The acting MJ user (may be undefined; the MJ engine handles the unset case).
|
|
30
|
+
* @param agentRunID Optional parent agent-run id (links the goal's prompt runs to the realtime agent run).
|
|
31
|
+
* @param agentRunStepID Optional parent agent-run-step id (nests a child prompt step per prompt under it).
|
|
32
|
+
* @returns The MJ-aware params to hand to `MJComputerUseEngine.Run`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function buildMJGoalParams(params: RunComputerUseParams, contextUser?: UserInfo, agentRunID?: string, agentRunStepID?: string): MJRunComputerUseParams;
|
|
35
|
+
/**
|
|
36
|
+
* The MJ-aware goal engine bound in production. Extends {@link MJComputerUseEngine} (prompt-runner routing,
|
|
37
|
+
* vision-model auto-selection, credential resolution, media persistence) and satisfies the
|
|
38
|
+
* {@link ComputerUseGoalRun} seam:
|
|
39
|
+
*
|
|
40
|
+
* - {@link SetBrowserAdapter} / {@link Stop} are inherited from the base computer-use engine.
|
|
41
|
+
* - {@link OnProgress} + {@link ContextUser} are set by the CDP session before {@link Run}.
|
|
42
|
+
* - {@link Run} adapts the transport-neutral base params into {@link MJRunComputerUseParams} (injecting the
|
|
43
|
+
* acting user) so the MJ engine can run its prompts.
|
|
44
|
+
* - {@link onStepComplete} chains the MJ media-persistence behavior, then forwards a model-safe progress note.
|
|
45
|
+
*/
|
|
46
|
+
export declare class MJProgressComputerUseEngine extends MJComputerUseEngine implements ComputerUseGoalRun {
|
|
47
|
+
/** Per-step progress hook the CDP session sets before {@link Run} (drives live narration). */
|
|
48
|
+
OnProgress?: (progress: ComputerUseGoalProgress) => void;
|
|
49
|
+
/** The MJ user the goal run executes as; the CDP session sets it from the session's context user. */
|
|
50
|
+
ContextUser?: UserInfo;
|
|
51
|
+
/** Parent agent-run id the CDP session sets before {@link Run} (links the goal's prompt runs to it). */
|
|
52
|
+
AgentRunID?: string;
|
|
53
|
+
/** Parent agent-run-step id the CDP session sets before {@link Run} (nests child prompt steps under it). */
|
|
54
|
+
AgentRunStepID?: string;
|
|
55
|
+
/**
|
|
56
|
+
* Adapts the transport-neutral base params into {@link MJRunComputerUseParams} (carrying the acting user
|
|
57
|
+
* + the parent run/step linkage) and delegates to the MJ engine, which auto-selects a vision-capable
|
|
58
|
+
* controller model from MJ metadata and nests a child step per prompt when the linkage is present.
|
|
59
|
+
*
|
|
60
|
+
* @param params The base computer-use params the CDP session built (goal + step cap + start url).
|
|
61
|
+
* @returns The computer-use run result.
|
|
62
|
+
*/
|
|
63
|
+
Run(params: RunComputerUseParams): Promise<ComputerUseResult>;
|
|
64
|
+
protected onStepComplete(step: StepRecord, params: MJRunComputerUseParams): void;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Extracts the realtime co-agent observability run id from an `AIAgentSession.Config_` JSON blob (the
|
|
68
|
+
* `coAgentRunID` a voice session persists). Returns `undefined` for a missing/non-voice/un-parseable
|
|
69
|
+
* config — goal-run observability is best-effort and degrades to "no parent run" cleanly.
|
|
70
|
+
*
|
|
71
|
+
* @param configJson The session's `Config_` string.
|
|
72
|
+
* @returns The co-agent run id, or `undefined`.
|
|
73
|
+
*/
|
|
74
|
+
export declare function extractCoAgentRunID(configJson: string | null | undefined): string | undefined;
|
|
75
|
+
/**
|
|
76
|
+
* Creates the parent `Tool` step ("Browser goal: …") on the realtime co-agent run for a goal-driven browser
|
|
77
|
+
* run — a single top-level timeline node the computer-use prompt steps then nest under. Best-effort: returns
|
|
78
|
+
* `null` (so the goal still runs, just unlinked) when there's no co-agent run to attach to, or on any error.
|
|
79
|
+
* Uses the shared {@link initAgentRunStep} helper so the field shape matches every other agent-run step.
|
|
80
|
+
*
|
|
81
|
+
* @param provider The metadata provider.
|
|
82
|
+
* @param contextUser The acting user.
|
|
83
|
+
* @param coAgentRunID The realtime co-agent run id (the parent run), or `undefined`.
|
|
84
|
+
* @param goal The natural-language goal (becomes the step name).
|
|
85
|
+
* @returns The saved parent step (to finalize + nest under), or `null`.
|
|
86
|
+
*/
|
|
87
|
+
export declare function beginBrowserGoalStep(provider: IMetadataProvider, contextUser: UserInfo | undefined, coAgentRunID: string | undefined, goal: string): Promise<MJAIAgentRunStepEntity | null>;
|
|
88
|
+
/**
|
|
89
|
+
* Finalizes the parent browser-goal step from the goal outcome — `Completed`/`Failed` with an `OutputData`
|
|
90
|
+
* envelope of strategy/status/step-count/url. A no-op when `step` is `null`. Best-effort (logged, never thrown).
|
|
91
|
+
*
|
|
92
|
+
* @param step The parent step from {@link beginBrowserGoalStep} (or `null`).
|
|
93
|
+
* @param result The goal outcome.
|
|
94
|
+
*/
|
|
95
|
+
export declare function finalizeBrowserGoalStep(step: MJAIAgentRunStepEntity | null, result: RemoteBrowserGoalResult): Promise<void>;
|
|
96
|
+
/**
|
|
97
|
+
* Binds the CDP goal-engine factory to {@link MJProgressComputerUseEngine}. Idempotent and safe to call at
|
|
98
|
+
* startup; failures are logged (never thrown) so a binding hiccup can't abort server boot — goal runs would
|
|
99
|
+
* simply fall back to the base engine.
|
|
100
|
+
*/
|
|
101
|
+
export declare function BindRemoteBrowserGoalEngine(): void;
|
|
102
|
+
//# sourceMappingURL=remoteBrowserGoalEngine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteBrowserGoalEngine.d.ts","sourceRoot":"","sources":["../../src/agentSessions/remoteBrowserGoalEngine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,QAAQ,EAAY,iBAAiB,EAAW,MAAM,sBAAsB,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AAEvE,OAAO,KAAK,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,UAAU,EAAE,MAAM,8BAA8B,CAAC;AACxG,OAAO,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAClG,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,qCAAqC,CAAC;AACnF,OAAO,EAA8C,KAAK,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAEvJ;;;;;;;;;;GAUG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,oBAAoB,EAAE,WAAW,CAAC,EAAE,QAAQ,EAAE,UAAU,CAAC,EAAE,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,sBAAsB,CAM5J;AAED;;;;;;;;;;GAUG;AACH,qBAAa,2BAA4B,SAAQ,mBAAoB,YAAW,kBAAkB;IAChG,8FAA8F;IACvF,UAAU,CAAC,EAAE,CAAC,QAAQ,EAAE,uBAAuB,KAAK,IAAI,CAAC;IAEhE,qGAAqG;IAC9F,WAAW,CAAC,EAAE,QAAQ,CAAC;IAE9B,wGAAwG;IACjG,UAAU,CAAC,EAAE,MAAM,CAAC;IAE3B,4GAA4G;IACrG,cAAc,CAAC,EAAE,MAAM,CAAC;IAE/B;;;;;;;OAOG;IACmB,GAAG,CAAC,MAAM,EAAE,oBAAoB,GAAG,OAAO,CAAC,iBAAiB,CAAC;cAIhE,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,sBAAsB,GAAG,IAAI;CAI1F;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAU7F;AAQD;;;;;;;;;;;GAWG;AACH,wBAAsB,oBAAoB,CACxC,QAAQ,EAAE,iBAAiB,EAC3B,WAAW,EAAE,QAAQ,GAAG,SAAS,EACjC,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,sBAAsB,GAAG,IAAI,CAAC,CAuBxC;AAED;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,IAAI,EAAE,sBAAsB,GAAG,IAAI,EAAE,MAAM,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjI;AAED;;;;GAIG;AACH,wBAAgB,2BAA2B,IAAI,IAAI,CAMlD"}
|
|
@@ -0,0 +1,164 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview **Production binding** of the Remote Browser goal-engine seam to MJ's computer-use engine.
|
|
3
|
+
*
|
|
4
|
+
* The CDP remote-browser session ({@link CdpRemoteBrowserSession}) runs goal-driven browser control through
|
|
5
|
+
* an injectable {@link ComputerUseGoalRun} factory. By default that factory yields a bare
|
|
6
|
+
* `ProgressComputerUseEngine` (base computer-use), which has no model auto-selection — so it can't run a goal
|
|
7
|
+
* unsupervised. This module binds the factory to {@link MJProgressComputerUseEngine}: an MJ-aware engine that
|
|
8
|
+
* routes controller/judge prompts through `AIPromptRunner`, auto-selects a vision-capable model from MJ
|
|
9
|
+
* metadata, persists step media, AND forwards per-step progress for live narration.
|
|
10
|
+
*
|
|
11
|
+
* Called once at server startup from `agentSessions/index.ts` (the realtime composition point), so every
|
|
12
|
+
* goal-driven run on this process uses the MJ engine. Kept here (an application package), not in any library,
|
|
13
|
+
* because it is the seam where the transport-neutral CDP layer is wired to MJ's AI stack.
|
|
14
|
+
*
|
|
15
|
+
* @module @memberjunction/server
|
|
16
|
+
*/
|
|
17
|
+
import { LogError, RunView } from '@memberjunction/core';
|
|
18
|
+
import { initAgentRunStep, finalizeAgentRunStep } from '@memberjunction/ai-core-plus';
|
|
19
|
+
import { MJComputerUseEngine, MJRunComputerUseParams } from '@memberjunction/computer-use-engine';
|
|
20
|
+
import { buildProgressNote, CdpRemoteBrowserSession } from '@memberjunction/remote-browser-cdp';
|
|
21
|
+
/**
|
|
22
|
+
* Adapts the transport-neutral base computer-use params into {@link MJRunComputerUseParams}, injecting the
|
|
23
|
+
* acting user so the MJ engine can run its controller/judge prompts as that user. Pure + exported for unit
|
|
24
|
+
* testing; {@link MJProgressComputerUseEngine.Run} is a one-liner over it.
|
|
25
|
+
*
|
|
26
|
+
* @param params The base computer-use params the CDP session built (goal + step cap + start url).
|
|
27
|
+
* @param contextUser The acting MJ user (may be undefined; the MJ engine handles the unset case).
|
|
28
|
+
* @param agentRunID Optional parent agent-run id (links the goal's prompt runs to the realtime agent run).
|
|
29
|
+
* @param agentRunStepID Optional parent agent-run-step id (nests a child prompt step per prompt under it).
|
|
30
|
+
* @returns The MJ-aware params to hand to `MJComputerUseEngine.Run`.
|
|
31
|
+
*/
|
|
32
|
+
export function buildMJGoalParams(params, contextUser, agentRunID, agentRunStepID) {
|
|
33
|
+
const mjParams = Object.assign(new MJRunComputerUseParams(), params);
|
|
34
|
+
mjParams.ContextUser = contextUser;
|
|
35
|
+
mjParams.AgentRunId = agentRunID;
|
|
36
|
+
mjParams.AgentRunStepID = agentRunStepID;
|
|
37
|
+
return mjParams;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The MJ-aware goal engine bound in production. Extends {@link MJComputerUseEngine} (prompt-runner routing,
|
|
41
|
+
* vision-model auto-selection, credential resolution, media persistence) and satisfies the
|
|
42
|
+
* {@link ComputerUseGoalRun} seam:
|
|
43
|
+
*
|
|
44
|
+
* - {@link SetBrowserAdapter} / {@link Stop} are inherited from the base computer-use engine.
|
|
45
|
+
* - {@link OnProgress} + {@link ContextUser} are set by the CDP session before {@link Run}.
|
|
46
|
+
* - {@link Run} adapts the transport-neutral base params into {@link MJRunComputerUseParams} (injecting the
|
|
47
|
+
* acting user) so the MJ engine can run its prompts.
|
|
48
|
+
* - {@link onStepComplete} chains the MJ media-persistence behavior, then forwards a model-safe progress note.
|
|
49
|
+
*/
|
|
50
|
+
export class MJProgressComputerUseEngine extends MJComputerUseEngine {
|
|
51
|
+
/**
|
|
52
|
+
* Adapts the transport-neutral base params into {@link MJRunComputerUseParams} (carrying the acting user
|
|
53
|
+
* + the parent run/step linkage) and delegates to the MJ engine, which auto-selects a vision-capable
|
|
54
|
+
* controller model from MJ metadata and nests a child step per prompt when the linkage is present.
|
|
55
|
+
*
|
|
56
|
+
* @param params The base computer-use params the CDP session built (goal + step cap + start url).
|
|
57
|
+
* @returns The computer-use run result.
|
|
58
|
+
*/
|
|
59
|
+
async Run(params) {
|
|
60
|
+
return super.Run(buildMJGoalParams(params, this.ContextUser, this.AgentRunID, this.AgentRunStepID));
|
|
61
|
+
}
|
|
62
|
+
onStepComplete(step, params) {
|
|
63
|
+
super.onStepComplete(step, params); // keep MJ media persistence
|
|
64
|
+
this.OnProgress?.(buildProgressNote(step)); // shared note shape with the base ProgressComputerUseEngine
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extracts the realtime co-agent observability run id from an `AIAgentSession.Config_` JSON blob (the
|
|
69
|
+
* `coAgentRunID` a voice session persists). Returns `undefined` for a missing/non-voice/un-parseable
|
|
70
|
+
* config — goal-run observability is best-effort and degrades to "no parent run" cleanly.
|
|
71
|
+
*
|
|
72
|
+
* @param configJson The session's `Config_` string.
|
|
73
|
+
* @returns The co-agent run id, or `undefined`.
|
|
74
|
+
*/
|
|
75
|
+
export function extractCoAgentRunID(configJson) {
|
|
76
|
+
if (!configJson) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
try {
|
|
80
|
+
const parsed = JSON.parse(configJson);
|
|
81
|
+
return typeof parsed.coAgentRunID === 'string' ? parsed.coAgentRunID : undefined;
|
|
82
|
+
}
|
|
83
|
+
catch {
|
|
84
|
+
return undefined;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** Truncates a goal to a step-name-friendly length. */
|
|
88
|
+
function goalStepName(goal) {
|
|
89
|
+
const trimmed = goal.trim();
|
|
90
|
+
return `Browser goal: ${trimmed.length > 120 ? `${trimmed.slice(0, 120)}…` : trimmed}`;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* Creates the parent `Tool` step ("Browser goal: …") on the realtime co-agent run for a goal-driven browser
|
|
94
|
+
* run — a single top-level timeline node the computer-use prompt steps then nest under. Best-effort: returns
|
|
95
|
+
* `null` (so the goal still runs, just unlinked) when there's no co-agent run to attach to, or on any error.
|
|
96
|
+
* Uses the shared {@link initAgentRunStep} helper so the field shape matches every other agent-run step.
|
|
97
|
+
*
|
|
98
|
+
* @param provider The metadata provider.
|
|
99
|
+
* @param contextUser The acting user.
|
|
100
|
+
* @param coAgentRunID The realtime co-agent run id (the parent run), or `undefined`.
|
|
101
|
+
* @param goal The natural-language goal (becomes the step name).
|
|
102
|
+
* @returns The saved parent step (to finalize + nest under), or `null`.
|
|
103
|
+
*/
|
|
104
|
+
export async function beginBrowserGoalStep(provider, contextUser, coAgentRunID, goal) {
|
|
105
|
+
if (!coAgentRunID) {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
try {
|
|
109
|
+
const rv = new RunView();
|
|
110
|
+
const countResult = await rv.RunView({ EntityName: 'MJ: AI Agent Run Steps', ExtraFilter: `AgentRunID='${coAgentRunID.replace(/'/g, "''")}'`, Fields: ['ID'], ResultType: 'simple' }, contextUser);
|
|
111
|
+
const stepNumber = (countResult.Success ? (countResult.Results?.length ?? 0) : 0) + 1;
|
|
112
|
+
const step = await provider.GetEntityObject('MJ: AI Agent Run Steps', contextUser);
|
|
113
|
+
step.NewRecord();
|
|
114
|
+
initAgentRunStep(step, { AgentRunID: coAgentRunID, StepNumber: stepNumber, StepType: 'Tool', StepName: goalStepName(goal) });
|
|
115
|
+
if (await step.Save()) {
|
|
116
|
+
return step;
|
|
117
|
+
}
|
|
118
|
+
LogError(`[RemoteBrowserGoalEngine] beginBrowserGoalStep save failed: ${step.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
119
|
+
return null;
|
|
120
|
+
}
|
|
121
|
+
catch (err) {
|
|
122
|
+
LogError(`[RemoteBrowserGoalEngine] beginBrowserGoalStep threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Finalizes the parent browser-goal step from the goal outcome — `Completed`/`Failed` with an `OutputData`
|
|
128
|
+
* envelope of strategy/status/step-count/url. A no-op when `step` is `null`. Best-effort (logged, never thrown).
|
|
129
|
+
*
|
|
130
|
+
* @param step The parent step from {@link beginBrowserGoalStep} (or `null`).
|
|
131
|
+
* @param result The goal outcome.
|
|
132
|
+
*/
|
|
133
|
+
export async function finalizeBrowserGoalStep(step, result) {
|
|
134
|
+
if (!step) {
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
try {
|
|
138
|
+
finalizeAgentRunStep(step, {
|
|
139
|
+
success: result.Success,
|
|
140
|
+
errorMessage: result.Success ? undefined : result.Detail,
|
|
141
|
+
outputData: { strategy: result.Strategy, status: result.Status, stepCount: result.StepCount, currentUrl: result.CurrentUrl },
|
|
142
|
+
});
|
|
143
|
+
if (!(await step.Save())) {
|
|
144
|
+
LogError(`[RemoteBrowserGoalEngine] finalizeBrowserGoalStep save failed: ${step.LatestResult?.CompleteMessage ?? 'unknown error'}`);
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
catch (err) {
|
|
148
|
+
LogError(`[RemoteBrowserGoalEngine] finalizeBrowserGoalStep threw: ${err instanceof Error ? err.message : String(err)}`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Binds the CDP goal-engine factory to {@link MJProgressComputerUseEngine}. Idempotent and safe to call at
|
|
153
|
+
* startup; failures are logged (never thrown) so a binding hiccup can't abort server boot — goal runs would
|
|
154
|
+
* simply fall back to the base engine.
|
|
155
|
+
*/
|
|
156
|
+
export function BindRemoteBrowserGoalEngine() {
|
|
157
|
+
try {
|
|
158
|
+
CdpRemoteBrowserSession.SetGoalEngineFactory(() => new MJProgressComputerUseEngine());
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
LogError(`[RemoteBrowserGoalEngine] Failed to bind MJ computer-use goal engine: ${err instanceof Error ? err.message : String(err)}`);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
//# sourceMappingURL=remoteBrowserGoalEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remoteBrowserGoalEngine.js","sourceRoot":"","sources":["../../src/agentSessions/remoteBrowserGoalEngine.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { BaseSingleton } from '@memberjunction/global';
|
|
2
|
+
/**
|
|
3
|
+
* Terminal/structural outcome of a remote-browser goal run — the fields the client needs to render
|
|
4
|
+
* the result, decoupled from the GraphQL `RemoteBrowserGoalResultType` (avoids a resolver↔registry
|
|
5
|
+
* import cycle) and from the engine's `RemoteBrowserGoalResult` (whose `Strategy` is a string union).
|
|
6
|
+
*/
|
|
7
|
+
export interface RemoteBrowserGoalOutcome {
|
|
8
|
+
Success: boolean;
|
|
9
|
+
Strategy?: string;
|
|
10
|
+
CurrentUrl?: string;
|
|
11
|
+
Status?: string;
|
|
12
|
+
StepCount?: number;
|
|
13
|
+
Detail?: string;
|
|
14
|
+
}
|
|
15
|
+
type GoalRunStatus = 'Running' | 'Complete';
|
|
16
|
+
/** One tracked goal run: its lifecycle status plus the terminal outcome once it finishes. */
|
|
17
|
+
export interface GoalRunRecord {
|
|
18
|
+
GoalRunID: string;
|
|
19
|
+
/** Lowercased `AIAgentSession` id the goal runs against (one in-flight goal per session). */
|
|
20
|
+
AgentSessionID: string;
|
|
21
|
+
Status: GoalRunStatus;
|
|
22
|
+
Outcome?: RemoteBrowserGoalOutcome;
|
|
23
|
+
StartedAt: number;
|
|
24
|
+
CompletedAt?: number;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Process-local registry of in-flight + recently-completed remote-browser GOAL runs.
|
|
28
|
+
*
|
|
29
|
+
* ## Why this exists
|
|
30
|
+
* A goal-driven browser run (computer-use loop) can take many minutes. Running it inside a single
|
|
31
|
+
* synchronous GraphQL mutation means the client holds one long-lived HTTP request open for the whole
|
|
32
|
+
* loop — fragile against browser fetch timeouts, proxy/ngrok idle limits, and session-janitor churn.
|
|
33
|
+
* Observed symptom: the loop completes successfully server-side but the client's request has already
|
|
34
|
+
* died, so the agent gets "no response from the server" and never learns the outcome.
|
|
35
|
+
*
|
|
36
|
+
* The fix is async: the start mutation kicks the goal off and registers it here (status `Running`),
|
|
37
|
+
* returning a `GoalRunID` immediately; the client then POLLS a short query that reads this registry
|
|
38
|
+
* until the run is `Complete`. Every request stays short, so no transport boundary times out.
|
|
39
|
+
*
|
|
40
|
+
* Keyed by `AIAgentSession` id (at most one in-flight goal per session, mirroring the engine's
|
|
41
|
+
* per-session abort registry). Process-local is correct: the browser session — and thus the goal —
|
|
42
|
+
* is pinned to the MJAPI instance hosting its CDP connection, the same instance the client's
|
|
43
|
+
* session-scoped mutations already target.
|
|
44
|
+
*/
|
|
45
|
+
export declare class RemoteBrowserGoalRegistry extends BaseSingleton<RemoteBrowserGoalRegistry> {
|
|
46
|
+
private runs;
|
|
47
|
+
protected constructor();
|
|
48
|
+
static get Instance(): RemoteBrowserGoalRegistry;
|
|
49
|
+
private key;
|
|
50
|
+
/** Registers a newly-started goal as `Running`, replacing any prior record for the session. */
|
|
51
|
+
Begin(agentSessionID: string, goalRunID: string): void;
|
|
52
|
+
/**
|
|
53
|
+
* Marks a goal run `Complete` with its terminal outcome. No-op when the session's current record is
|
|
54
|
+
* for a DIFFERENT `goalRunID` (a newer goal superseded it) — the stale completion is dropped.
|
|
55
|
+
*/
|
|
56
|
+
Complete(agentSessionID: string, goalRunID: string, outcome: RemoteBrowserGoalOutcome): void;
|
|
57
|
+
/**
|
|
58
|
+
* Returns the tracked record for a session, or `undefined` when none exists or `goalRunID` is
|
|
59
|
+
* supplied and doesn't match the current run (so a poll for an expired/superseded id reads nothing).
|
|
60
|
+
*/
|
|
61
|
+
Get(agentSessionID: string, goalRunID?: string): GoalRunRecord | undefined;
|
|
62
|
+
/** Drops completed records past their TTL and never-completing records past the safety cap. */
|
|
63
|
+
private sweep;
|
|
64
|
+
}
|
|
65
|
+
export {};
|
|
66
|
+
//# sourceMappingURL=remoteBrowserGoalRegistry.d.ts.map
|