@resolveio/server-lib 20.15.9 → 22.0.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/managers/websocket.manager.d.ts +4 -0
- package/managers/websocket.manager.js +37 -0
- package/managers/websocket.manager.js.map +1 -1
- package/managers/worker-dispatcher.manager.d.ts +14 -0
- package/managers/worker-dispatcher.manager.js +251 -26
- package/managers/worker-dispatcher.manager.js.map +1 -1
- package/methods/ai-terminal.js +1679 -279
- package/methods/ai-terminal.js.map +1 -1
- package/methods/publications.js +36 -8
- package/methods/publications.js.map +1 -1
- package/models/method.model.d.ts +1 -0
- package/models/method.model.js.map +1 -1
- package/package.json +4 -1
- package/server-app.d.ts +5 -0
- package/server-app.js +81 -3
- package/server-app.js.map +1 -1
package/methods/publications.js
CHANGED
|
@@ -1,4 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
+
var __assign = (this && this.__assign) || function () {
|
|
3
|
+
__assign = Object.assign || function(t) {
|
|
4
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
5
|
+
s = arguments[i];
|
|
6
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
7
|
+
t[p] = s[p];
|
|
8
|
+
}
|
|
9
|
+
return t;
|
|
10
|
+
};
|
|
11
|
+
return __assign.apply(this, arguments);
|
|
12
|
+
};
|
|
2
13
|
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
14
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
15
|
return new (P || (P = Promise))(function (resolve, reject) {
|
|
@@ -65,6 +76,23 @@ exports.loadPublicationMethods = loadPublicationMethods;
|
|
|
65
76
|
var resolveio_server_app_1 = require("../resolveio-server-app");
|
|
66
77
|
var subscription_manager_1 = require("../managers/subscription.manager");
|
|
67
78
|
var subscription_dependency_context_1 = require("../util/subscription-dependency-context");
|
|
79
|
+
function normalizeOptionalString(value) {
|
|
80
|
+
if (value === null || value === undefined) {
|
|
81
|
+
return '';
|
|
82
|
+
}
|
|
83
|
+
return String(value).trim();
|
|
84
|
+
}
|
|
85
|
+
function resolveSingleWorkerTarget(value) {
|
|
86
|
+
var normalized = normalizeOptionalString(value);
|
|
87
|
+
if (!normalized) {
|
|
88
|
+
return '';
|
|
89
|
+
}
|
|
90
|
+
var parts = normalized.split(',').map(function (part) { return part.trim(); }).filter(Boolean);
|
|
91
|
+
if (parts.length !== 1) {
|
|
92
|
+
return '';
|
|
93
|
+
}
|
|
94
|
+
return parts[0];
|
|
95
|
+
}
|
|
68
96
|
function normalizeSubscriptionData(subscriptionData) {
|
|
69
97
|
if (!Array.isArray(subscriptionData)) {
|
|
70
98
|
return [];
|
|
@@ -85,13 +113,14 @@ function getPublication(manager, publication) {
|
|
|
85
113
|
return pub;
|
|
86
114
|
}
|
|
87
115
|
function loadPublicationMethods(methodManager) {
|
|
116
|
+
var publicationWorkerIndex = resolveSingleWorkerTarget(process.env.SUBSCRIPTION_WORKER_INDEX
|
|
117
|
+
|| process.env.PUBLICATION_WORKER_INDEX
|
|
118
|
+
|| process.env.WORKER_PUBLICATION_INDEX);
|
|
119
|
+
var publicationWorkerInstance = resolveSingleWorkerTarget(process.env.SUBSCRIPTION_WORKER_INSTANCE
|
|
120
|
+
|| process.env.PUBLICATION_WORKER_INSTANCE
|
|
121
|
+
|| process.env.WORKER_PUBLICATION_INSTANCE);
|
|
88
122
|
methodManager.methods({
|
|
89
|
-
runPublication: {
|
|
90
|
-
skipValidation: true,
|
|
91
|
-
workerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1,
|
|
92
|
-
maxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined,
|
|
93
|
-
maxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined,
|
|
94
|
-
function: function (publication_1) {
|
|
123
|
+
runPublication: __assign(__assign(__assign({ skipValidation: true, workerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1, maxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined, maxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined, workerQueue: 'publication' }, (publicationWorkerIndex ? { targetWorkerIndex: publicationWorkerIndex } : {})), (publicationWorkerInstance ? { targetWorkerInstance: publicationWorkerInstance } : {})), { function: function (publication_1) {
|
|
95
124
|
return __awaiter(this, arguments, void 0, function (publication, subscriptionData, userId) {
|
|
96
125
|
var manager, pub, normalizedData, context, valObj, valKeys, rootKeys, i, metadata, execution, _a, response;
|
|
97
126
|
if (subscriptionData === void 0) { subscriptionData = []; }
|
|
@@ -147,8 +176,7 @@ function loadPublicationMethods(methodManager) {
|
|
|
147
176
|
}
|
|
148
177
|
});
|
|
149
178
|
});
|
|
150
|
-
}
|
|
151
|
-
}
|
|
179
|
+
} })
|
|
152
180
|
});
|
|
153
181
|
}
|
|
154
182
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/methods/publications.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"sources":["../../src/methods/publications.ts"],"names":[],"mappings":"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","file":"publications.js","sourcesContent":["import { ResolveIOServer } from '../resolveio-server-app';\nimport { SubscriptionManager } from '../managers/subscription.manager';\nimport { SubscriptionPubModel } from '../models/subscription.model';\nimport { serializeDependencySnapshot, withDependencyTracking } from '../util/subscription-dependency-context';\n\ninterface PublicationWorkerResponse {\n\t__publicationResponse: true;\n\tpublication: string;\n\tsubscriptionData: any[];\n\tuserSpecific: boolean;\n\tpayload: any;\n\tsnapshot: ReturnType<typeof serializeDependencySnapshot>;\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tif (value === null || value === undefined) {\n\t\treturn '';\n\t}\n\treturn String(value).trim();\n}\n\nfunction resolveSingleWorkerTarget(value: any): string {\n\tconst normalized = normalizeOptionalString(value);\n\tif (!normalized) {\n\t\treturn '';\n\t}\n\tconst parts = normalized.split(',').map(part => part.trim()).filter(Boolean);\n\tif (parts.length !== 1) {\n\t\treturn '';\n\t}\n\treturn parts[0];\n}\n\nfunction normalizeSubscriptionData(subscriptionData: any[]): any[] {\n\tif (!Array.isArray(subscriptionData)) {\n\t\treturn [];\n\t}\n\n\treturn subscriptionData;\n}\n\nfunction resolvePublicationContext(manager: SubscriptionManager) {\n\treturn Object.assign({}, manager, SubscriptionManager.prototype);\n}\n\nfunction getPublication(manager: SubscriptionManager, publication: string): SubscriptionPubModel {\n\tif (!manager || typeof manager.getPublication !== 'function') {\n\t\tthrow new Error(`Subscription manager not available for publication: ${publication}`);\n\t}\n\n\tconst pub = manager.getPublication(publication);\n\tif (!pub) {\n\t\tthrow new Error(`Publication not found: ${publication}`);\n\t}\n\n\treturn pub;\n}\n\nexport function loadPublicationMethods(methodManager) {\n\tconst publicationWorkerIndex = resolveSingleWorkerTarget(\n\t\tprocess.env.SUBSCRIPTION_WORKER_INDEX\n\t\t|| process.env.PUBLICATION_WORKER_INDEX\n\t\t|| process.env.WORKER_PUBLICATION_INDEX\n\t);\n\tconst publicationWorkerInstance = resolveSingleWorkerTarget(\n\t\tprocess.env.SUBSCRIPTION_WORKER_INSTANCE\n\t\t|| process.env.PUBLICATION_WORKER_INSTANCE\n\t\t|| process.env.WORKER_PUBLICATION_INSTANCE\n\t);\n\tmethodManager.methods({\n\t\trunPublication: {\n\t\t\tskipValidation: true,\n\t\t\tworkerTaskWeight: parseInt(process.env.SUBSCRIPTION_WORKER_TASK_WEIGHT || '', 10) || 1,\n\t\t\tmaxConcurrency: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY || '', 10) || undefined,\n\t\t\tmaxConcurrencyPerInstance: parseInt(process.env.SUBSCRIPTION_WORKER_MAX_CONCURRENCY_PER_INSTANCE || '', 10) || undefined,\n\t\t\tworkerQueue: 'publication',\n\t\t\t...(publicationWorkerIndex ? { targetWorkerIndex: publicationWorkerIndex } : {}),\n\t\t\t...(publicationWorkerInstance ? { targetWorkerInstance: publicationWorkerInstance } : {}),\n\t\t\tfunction: async function(publication: string, subscriptionData: any[] = [], userId?: string) {\n\t\t\t\tif (this.user && this.user !== 'Internal System') {\n\t\t\t\t\tthrow new Error('Unauthorized publication execution');\n\t\t\t\t}\n\n\t\t\t\tconst manager = ResolveIOServer.getMainServer().getSubscriptionManager();\n\t\t\t\tconst pub = getPublication(manager, publication);\n\t\t\t\tconst normalizedData = normalizeSubscriptionData(subscriptionData);\n\t\t\t\tconst context = resolvePublicationContext(manager);\n\n\t\t\t\tif (pub.check && pub.check._schema && (normalizedData.length > 1 || normalizedData[0])) {\n\t\t\t\t\tconst valObj = {};\n\t\t\t\t\tconst valKeys = Object.keys(pub.check._schema);\n\t\t\t\t\tconst rootKeys = valKeys.filter(a => !a.includes('.'));\n\t\t\t\t\tfor (let i = 0; i < normalizedData.length; i++) {\n\t\t\t\t\t\tvalObj[rootKeys[i]] = normalizedData[i];\n\t\t\t\t\t}\n\t\t\t\t\tpub.check.validate(valObj);\n\t\t\t\t}\n\n\t\t\t\tconst metadata = {\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData\n\t\t\t\t};\n\n\t\t\t\tconst execution = pub.user_specific\n\t\t\t\t\t? await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, userId || '', ...normalizedData),\n\t\t\t\t\t\tObject.assign({}, metadata, { userId })\n\t\t\t\t\t)\n\t\t\t\t\t: await withDependencyTracking(\n\t\t\t\t\t\t() => pub.function.call(context, ...normalizedData),\n\t\t\t\t\t\tmetadata\n\t\t\t\t\t);\n\n\t\t\t\tconst response: PublicationWorkerResponse = {\n\t\t\t\t\t__publicationResponse: true,\n\t\t\t\t\tpublication,\n\t\t\t\t\tsubscriptionData: normalizedData,\n\t\t\t\t\tuserSpecific: !!pub.user_specific,\n\t\t\t\t\tpayload: execution.result,\n\t\t\t\t\tsnapshot: serializeDependencySnapshot(execution.snapshot)\n\t\t\t\t};\n\n\t\t\t\treturn response;\n\t\t\t}\n\t\t}\n\t});\n}\n"]}
|
package/models/method.model.d.ts
CHANGED
|
@@ -14,6 +14,7 @@ export interface MethodAllModel {
|
|
|
14
14
|
workerTaskWeight?: number;
|
|
15
15
|
skipWorker?: boolean;
|
|
16
16
|
forceWorker?: boolean;
|
|
17
|
+
workerQueue?: 'publication' | 'codex' | 'default';
|
|
17
18
|
targetWorkerIndex?: string | number;
|
|
18
19
|
targetWorkerInstance?: string | number;
|
|
19
20
|
bypassSession?: boolean;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tforceWorker?: boolean;\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n\tmaxConcurrencyPerInstance?: number;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/models/method.model.ts"],"names":[],"mappings":"","file":"method.model.js","sourcesContent":["import SimpleSchema from 'simpl-schema';\nimport { MethodManager } from '../managers/method.manager';\n\nexport interface MethodModel {\n\t[key: string]: MethodAllModel;\n}\n\nexport interface MethodAllModel {\n\tcheck?: SimpleSchema;\n\t// eslint-disable-next-line no-unused-vars\n\tfunction: (this: MethodManager & {id_ws: string, id_user: string, user: string}, ...parameters: any[]) => Promise<any | any[]>;\n\tskipValidation?: boolean;\n\tworkerTaskWeight?: number;\n\tskipWorker?: boolean;\n\tforceWorker?: boolean;\n\tworkerQueue?: 'publication' | 'codex' | 'default';\n\ttargetWorkerIndex?: string | number;\n\ttargetWorkerInstance?: string | number;\n\tbypassSession?: boolean;\n\ttimeoutOverride?: number;\n\tmaxConcurrency?: number;\n\tmaxConcurrencyPerInstance?: number;\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@resolveio/server-lib",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "22.0.0",
|
|
4
4
|
"description": "",
|
|
5
5
|
"scripts": {
|
|
6
6
|
"package": "./build_package.sh",
|
|
@@ -14,6 +14,9 @@
|
|
|
14
14
|
},
|
|
15
15
|
"author": "",
|
|
16
16
|
"license": "ISC",
|
|
17
|
+
"engines": {
|
|
18
|
+
"node": ">=22.0.0 <23"
|
|
19
|
+
},
|
|
17
20
|
"dependencies": {
|
|
18
21
|
"@aws-sdk/client-s3": "3.948.0",
|
|
19
22
|
"@aws-sdk/client-sesv2": "3.950.0",
|
package/server-app.d.ts
CHANGED
|
@@ -50,6 +50,7 @@ export declare class ResolveIOMainServer {
|
|
|
50
50
|
private _timerDebugSampleRate;
|
|
51
51
|
private _timerDebugLogLimit;
|
|
52
52
|
private _timerDebugLogCount;
|
|
53
|
+
private _aiWorkerDebug;
|
|
53
54
|
private _serverStartTime;
|
|
54
55
|
private _lastErrorMsg;
|
|
55
56
|
private _debugMsgRecv;
|
|
@@ -102,6 +103,10 @@ export declare class ResolveIOMainServer {
|
|
|
102
103
|
private resolveTimerDebugMinDelayMs;
|
|
103
104
|
private resolveTimerDebugSampleRate;
|
|
104
105
|
private resolveTimerDebugLogLimit;
|
|
106
|
+
private normalizeWorkerSelectorValue;
|
|
107
|
+
private parseWorkerSelector;
|
|
108
|
+
private workerMatchesSelector;
|
|
109
|
+
private resolveWorkerRole;
|
|
105
110
|
private parsePositiveInt;
|
|
106
111
|
private parsePositiveFloat;
|
|
107
112
|
private startPerfDebug;
|
package/server-app.js
CHANGED
|
@@ -135,6 +135,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
135
135
|
this._timerDebugSampleRate = 1;
|
|
136
136
|
this._timerDebugLogLimit = 100;
|
|
137
137
|
this._timerDebugLogCount = 0;
|
|
138
|
+
this._aiWorkerDebug = false;
|
|
138
139
|
this._lastErrorMsg = null;
|
|
139
140
|
this._debugMsgRecv = 0;
|
|
140
141
|
this._debugMsgQueue = 0;
|
|
@@ -162,7 +163,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
162
163
|
};
|
|
163
164
|
ResolveIOMainServer.prototype.initialize = function () {
|
|
164
165
|
return __awaiter(this, void 0, void 0, function () {
|
|
165
|
-
var _a;
|
|
166
|
+
var _a, workerRole, workerIndex, workerInstance;
|
|
166
167
|
var _this = this;
|
|
167
168
|
return __generator(this, function (_b) {
|
|
168
169
|
switch (_b.label) {
|
|
@@ -182,6 +183,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
182
183
|
this._timerDebugMinDelayMs = this.resolveTimerDebugMinDelayMs();
|
|
183
184
|
this._timerDebugSampleRate = this.resolveTimerDebugSampleRate();
|
|
184
185
|
this._timerDebugLogLimit = this.resolveTimerDebugLogLimit();
|
|
186
|
+
this._aiWorkerDebug = this.parseDebugFlag(process.env.AI_ASSISTANT_WORKER_DEBUG);
|
|
185
187
|
_a = this;
|
|
186
188
|
return [4 /*yield*/, monitor_manager_1.MonitorManager.create()];
|
|
187
189
|
case 1:
|
|
@@ -392,7 +394,10 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
392
394
|
}
|
|
393
395
|
if (this._isWorkersEnabled) {
|
|
394
396
|
if (this._isWorkerInstance) {
|
|
395
|
-
|
|
397
|
+
workerRole = this.resolveWorkerRole();
|
|
398
|
+
workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX) || 'UNKNOWN';
|
|
399
|
+
workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE) || 'UNKNOWN';
|
|
400
|
+
console.log("Running as Worker: ".concat(workerRole), workerIndex, workerInstance);
|
|
396
401
|
this._methodManager = method_manager_1.MethodManager.create(null, this._monitorManagerFunction, this._isWorkersEnabled, this._isWorkerInstance);
|
|
397
402
|
this._subscriptionManager = subscription_manager_1.SubscriptionManager.createPublicationRegistry(resolveio_server_app_1.ResolveIOServer.getServerConfig());
|
|
398
403
|
this._workerServerManager = worker_server_manager_1.WorkerServerManager.create(this._methodManager, this.getServerConfig());
|
|
@@ -1310,6 +1315,55 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1310
1315
|
var raw = (_a = process.env.TIMER_DEBUG_LOG_LIMIT) !== null && _a !== void 0 ? _a : config === null || config === void 0 ? void 0 : config['TIMER_DEBUG_LOG_LIMIT'];
|
|
1311
1316
|
return this.parsePositiveInt(raw, this._timerDebugLogLimit);
|
|
1312
1317
|
};
|
|
1318
|
+
ResolveIOMainServer.prototype.normalizeWorkerSelectorValue = function (value) {
|
|
1319
|
+
if (value === null || value === undefined) {
|
|
1320
|
+
return null;
|
|
1321
|
+
}
|
|
1322
|
+
var normalized = String(value).trim();
|
|
1323
|
+
return normalized.length ? normalized : null;
|
|
1324
|
+
};
|
|
1325
|
+
ResolveIOMainServer.prototype.parseWorkerSelector = function (value) {
|
|
1326
|
+
if (value === null || value === undefined) {
|
|
1327
|
+
return null;
|
|
1328
|
+
}
|
|
1329
|
+
var raw = Array.isArray(value) ? value.join(',') : String(value);
|
|
1330
|
+
var parts = raw.split(',').map(function (part) { return part.trim(); }).filter(Boolean);
|
|
1331
|
+
if (!parts.length) {
|
|
1332
|
+
return null;
|
|
1333
|
+
}
|
|
1334
|
+
return new Set(parts);
|
|
1335
|
+
};
|
|
1336
|
+
ResolveIOMainServer.prototype.workerMatchesSelector = function (workerIndex, workerInstance, indexes, instances) {
|
|
1337
|
+
if (!indexes && !instances) {
|
|
1338
|
+
return false;
|
|
1339
|
+
}
|
|
1340
|
+
var indexMatch = indexes ? (workerIndex ? indexes.has(workerIndex) : false) : true;
|
|
1341
|
+
var instanceMatch = instances ? (workerInstance ? instances.has(workerInstance) : false) : true;
|
|
1342
|
+
return indexMatch && instanceMatch;
|
|
1343
|
+
};
|
|
1344
|
+
ResolveIOMainServer.prototype.resolveWorkerRole = function () {
|
|
1345
|
+
var workerIndex = this.normalizeWorkerSelectorValue(process.env.WORKER_INDEX);
|
|
1346
|
+
var workerInstance = this.normalizeWorkerSelectorValue(process.env.NODE_APP_INSTANCE);
|
|
1347
|
+
var publicationIndexes = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INDEX
|
|
1348
|
+
|| process.env.SUBSCRIPTION_WORKER_INDEX
|
|
1349
|
+
|| process.env.WORKER_PUBLICATION_INDEX);
|
|
1350
|
+
var publicationInstances = this.parseWorkerSelector(process.env.PUBLICATION_WORKER_INSTANCE
|
|
1351
|
+
|| process.env.SUBSCRIPTION_WORKER_INSTANCE
|
|
1352
|
+
|| process.env.WORKER_PUBLICATION_INSTANCE);
|
|
1353
|
+
var codexIndexes = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INDEX
|
|
1354
|
+
|| process.env.CODEX_WORKER_INDEX
|
|
1355
|
+
|| process.env.WORKER_CODEX_INDEX);
|
|
1356
|
+
var codexInstances = this.parseWorkerSelector(process.env.AI_ASSISTANT_CODEX_WORKER_INSTANCE
|
|
1357
|
+
|| process.env.CODEX_WORKER_INSTANCE
|
|
1358
|
+
|| process.env.WORKER_CODEX_INSTANCE);
|
|
1359
|
+
if (this.workerMatchesSelector(workerIndex, workerInstance, publicationIndexes, publicationInstances)) {
|
|
1360
|
+
return 'Subscription';
|
|
1361
|
+
}
|
|
1362
|
+
if (this.workerMatchesSelector(workerIndex, workerInstance, codexIndexes, codexInstances)) {
|
|
1363
|
+
return 'Codex';
|
|
1364
|
+
}
|
|
1365
|
+
return 'Other';
|
|
1366
|
+
};
|
|
1313
1367
|
ResolveIOMainServer.prototype.parsePositiveInt = function (value, fallback) {
|
|
1314
1368
|
var parsed = parseInt(value !== null && value !== void 0 ? value : '', 10);
|
|
1315
1369
|
if (Number.isNaN(parsed) || parsed <= 0) {
|
|
@@ -1606,7 +1660,7 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1606
1660
|
};
|
|
1607
1661
|
ResolveIOMainServer.prototype.handleClientMessage = function (ws, msg) {
|
|
1608
1662
|
return __awaiter(this, void 0, void 0, function () {
|
|
1609
|
-
var messageRoute_1, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy_1, date, msgId_1, msgType, methodName_1, ack, method, forceWorker, targetWorkerIndex, hasWorkerForMethod, isExcludedFromWorker, errorRes, shouldDispatchToWorker, errorRes, err_3;
|
|
1663
|
+
var messageRoute_1, messageDate, messageId, type, subType, pub, serverRes, offlineUpdates, i, update, data, updateRoute, updateDate, updateMessageId, updateType, method, serverResMethod, err_2, dataCopy_1, date, msgId_1, msgType, methodName_1, ack, method, forceWorker, targetWorkerIndex, targetWorkerInstance, hasWorkerForMethod, isAiCodex, isExcludedFromWorker, errorRes, shouldDispatchToWorker, queueSnapshot, errorRes, err_3;
|
|
1610
1664
|
var _a;
|
|
1611
1665
|
var _this = this;
|
|
1612
1666
|
return __generator(this, function (_b) {
|
|
@@ -1803,7 +1857,9 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1803
1857
|
method = this._methodManager.getMethod(methodName_1);
|
|
1804
1858
|
forceWorker = this._isWorkersEnabled && !!(method === null || method === void 0 ? void 0 : method.forceWorker);
|
|
1805
1859
|
targetWorkerIndex = this._isWorkersEnabled && method ? method.targetWorkerIndex : null;
|
|
1860
|
+
targetWorkerInstance = this._isWorkersEnabled && method ? method.targetWorkerInstance : null;
|
|
1806
1861
|
hasWorkerForMethod = this._workerDispatcherManager ? this._workerDispatcherManager.hasWorkersForMethod(methodName_1) : false;
|
|
1862
|
+
isAiCodex = methodName_1 === 'aiCoderTerminalRunCodex';
|
|
1807
1863
|
isExcludedFromWorker = (methodName_1 === 'find' ||
|
|
1808
1864
|
methodName_1 === 'insertDocument' ||
|
|
1809
1865
|
methodName_1 === 'countWithQuery' ||
|
|
@@ -1838,6 +1894,19 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1838
1894
|
this._workerDispatcherManager &&
|
|
1839
1895
|
(hasWorkerForMethod || forceWorker) &&
|
|
1840
1896
|
(forceWorker || !isExcludedFromWorker));
|
|
1897
|
+
if (isAiCodex && this._aiWorkerDebug) {
|
|
1898
|
+
queueSnapshot = this._workerDispatcherManager ? this._workerDispatcherManager.getQueueSnapshot() : null;
|
|
1899
|
+
console.log(new Date(), '[AI Worker Debug] dispatch check', {
|
|
1900
|
+
isWorkersEnabled: this._isWorkersEnabled,
|
|
1901
|
+
isWorkerInstance: this._isWorkerInstance,
|
|
1902
|
+
forceWorker: forceWorker,
|
|
1903
|
+
hasWorkerForMethod: hasWorkerForMethod,
|
|
1904
|
+
targetWorkerIndex: targetWorkerIndex || null,
|
|
1905
|
+
targetWorkerInstance: targetWorkerInstance || null,
|
|
1906
|
+
shouldDispatchToWorker: shouldDispatchToWorker,
|
|
1907
|
+
queueSnapshot: queueSnapshot
|
|
1908
|
+
});
|
|
1909
|
+
}
|
|
1841
1910
|
if (!shouldDispatchToWorker) return [3 /*break*/, 20];
|
|
1842
1911
|
this._workerDispatcherManager.sendClientTask(msgId_1, methodName_1, dataCopy_1, {
|
|
1843
1912
|
id_user: ws['id_user'],
|
|
@@ -1858,6 +1927,15 @@ var ResolveIOMainServer = /** @class */ (function () {
|
|
|
1858
1927
|
return [3 /*break*/, 24];
|
|
1859
1928
|
case 21:
|
|
1860
1929
|
if (!(methodName_1 === 'aiCoderTerminalRunCodex')) return [3 /*break*/, 22];
|
|
1930
|
+
if (this._aiWorkerDebug) {
|
|
1931
|
+
console.warn(new Date(), '[AI Worker Debug] codex running locally', {
|
|
1932
|
+
isWorkersEnabled: this._isWorkersEnabled,
|
|
1933
|
+
isWorkerInstance: this._isWorkerInstance,
|
|
1934
|
+
targetWorkerIndex: targetWorkerIndex || null,
|
|
1935
|
+
targetWorkerInstance: targetWorkerInstance || null,
|
|
1936
|
+
hasWorkerForMethod: hasWorkerForMethod
|
|
1937
|
+
});
|
|
1938
|
+
}
|
|
1861
1939
|
setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
|
|
1862
1940
|
var error_4;
|
|
1863
1941
|
return __generator(this, function (_a) {
|