@resolveio/server-lib 22.1.9 → 22.1.11
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/methods/ai-terminal.js
CHANGED
|
@@ -352,8 +352,59 @@ var AI_ASSISTANT_COLLECTION_DOMAIN_TOKENS = new Set([
|
|
|
352
352
|
'orders',
|
|
353
353
|
'delivery',
|
|
354
354
|
'deliveries',
|
|
355
|
+
'asset',
|
|
356
|
+
'assets',
|
|
357
|
+
'treatment',
|
|
358
|
+
'treatments',
|
|
359
|
+
'treatmentplan',
|
|
360
|
+
'treatmentplans',
|
|
361
|
+
'dispatch',
|
|
362
|
+
'driver',
|
|
363
|
+
'drivers',
|
|
364
|
+
'treater',
|
|
365
|
+
'specialty',
|
|
366
|
+
'specialtyjob',
|
|
367
|
+
'specialtyjobs',
|
|
368
|
+
'bol',
|
|
369
|
+
'bols',
|
|
370
|
+
'lading',
|
|
371
|
+
'pso',
|
|
372
|
+
'psos',
|
|
373
|
+
'po',
|
|
374
|
+
'pos',
|
|
375
|
+
'ats',
|
|
376
|
+
'automated',
|
|
377
|
+
'automation',
|
|
378
|
+
'continuous',
|
|
379
|
+
'isotank',
|
|
380
|
+
'isotanks',
|
|
381
|
+
'trailer',
|
|
382
|
+
'trailers',
|
|
383
|
+
'chemicaltrailer',
|
|
384
|
+
'chemicaltrailers',
|
|
385
|
+
'vac',
|
|
386
|
+
'vactruck',
|
|
387
|
+
'vactrucks',
|
|
388
|
+
'purchase',
|
|
389
|
+
'purchasing',
|
|
390
|
+
'purchaseorder',
|
|
391
|
+
'purchaseorders',
|
|
392
|
+
'batchjob',
|
|
393
|
+
'batchjobs',
|
|
394
|
+
'production',
|
|
395
|
+
'salesorder',
|
|
396
|
+
'salesorders',
|
|
355
397
|
'truck',
|
|
398
|
+
'trucktreat',
|
|
399
|
+
'trucktreating',
|
|
400
|
+
'product',
|
|
401
|
+
'products',
|
|
402
|
+
'item',
|
|
403
|
+
'items',
|
|
404
|
+
'inventory',
|
|
356
405
|
'treating',
|
|
406
|
+
'batchtreat',
|
|
407
|
+
'batchtreating',
|
|
357
408
|
'route',
|
|
358
409
|
'routes',
|
|
359
410
|
'well',
|
|
@@ -403,6 +454,21 @@ var AI_ASSISTANT_TERM_SYNONYMS = [
|
|
|
403
454
|
label: 'support tickets',
|
|
404
455
|
pattern: /\bsupport[\s-]*tickets?\b/i,
|
|
405
456
|
expansions: ['support-tickets', 'support ticket', 'ticket hours', 'billable hours']
|
|
457
|
+
},
|
|
458
|
+
{
|
|
459
|
+
label: 'delivery aliases',
|
|
460
|
+
pattern: /\b(bols?|bills?\s+of\s+lading|pso(?:s)?|production\s+sales\s+orders?|sales\s+orders?|truck[\s_-]+treat(?:ing)?|treater[\s_-]+truck|batch[\s_-]+(?:treat(?:ing)?|jobs?)|specialty[\s_-]+jobs?|continuous|ats|automated[\s_-]+treatment[\s_-]+system|isotanks?|chemical[\s_-]+trailers?|vac[\s_-]+trucks?|assets?|treatment[\s_-]+plans?|treatments?)\b/i,
|
|
461
|
+
expansions: ['delivery', 'deliveries', 'dispatch', 'route', 'work-order-dynamics', 'work order dynamics', 'work-orders', 'jobs', 'treatments', 'treatment-plans', 'assets']
|
|
462
|
+
},
|
|
463
|
+
{
|
|
464
|
+
label: 'purchase order aliases',
|
|
465
|
+
pattern: /\b(po(?:s)?|purchase[\s_-]+orders?)\b/i,
|
|
466
|
+
expansions: ['orders', 'purchase-orders', 'purchase orders', 'purchase order']
|
|
467
|
+
},
|
|
468
|
+
{
|
|
469
|
+
label: 'chemical catalog aliases',
|
|
470
|
+
pattern: /\b(chemicals?|products?|items?)\b/i,
|
|
471
|
+
expansions: ['chemical', 'chemicals', 'product', 'products', 'item', 'items', 'inventory']
|
|
406
472
|
}
|
|
407
473
|
];
|
|
408
474
|
var AI_ASSISTANT_REPORT_BUILDER_EXPERT_PLAYBOOK = [
|
|
@@ -2243,6 +2309,7 @@ function executeAiAssistantCodexRun(payload, context) {
|
|
|
2243
2309
|
case 45:
|
|
2244
2310
|
_j = _13.sent();
|
|
2245
2311
|
assistantContent = buildAssistantToolFallbackResponse(toolPayload.result);
|
|
2312
|
+
assistantContent = applyAssistantDisplayTableToResponse(assistantContent, toolPayload.result.output.display);
|
|
2246
2313
|
return [3 /*break*/, 46];
|
|
2247
2314
|
case 46: return [3 /*break*/, 48];
|
|
2248
2315
|
case 47:
|
|
@@ -2549,7 +2616,7 @@ function executeAiAssistantReportIssue(payload, context) {
|
|
|
2549
2616
|
}
|
|
2550
2617
|
function executeAiAssistantMongoRead(payload, context) {
|
|
2551
2618
|
return __awaiter(this, void 0, void 0, function () {
|
|
2552
|
-
var input, rawCollection, retryState, triedCollections, crossCollectionRetryEnabled, dbName, db, collectionResolution, collection, bridgeCollection, retryRootCollection, schemaFields, effectivePermissionView, _a, user, isSuperAdmin, customerId, fallbackMeta, baseQuery, stripped, userId, normalizedClient, shouldScopeByClient, _b, strippedClient, clientScopedQuery, scopedQuery, normalized, findOptions, runFindWithRepair, initialRead, documents, executedQuery, probeDocs, dateFallback, fallbackQuery, fallbackRead, fallbackDocs, expanded, fallbackRead, fallbackDocs, nameFallback, fallbackRead, fallbackDocs, _c, chemicalLookup, fallbackRead, fallbackDocs, queryFields, _d, aliases, rewrittenQuery, fallbackRead, fallbackDocs, _e, activeFallback, fallbackRead, fallbackDocs, _f, idLookup, fallbackRead, fallbackDocs, baseCollection, fallbackPayload, fallbackResult, existingFallbacks, crossCollectionCandidates, crossCollectionCandidates_1, crossCollectionCandidates_1_1, candidateCollection, fallbackPayload, fallbackResult, fallbackDocs, existingFallbacks, rejectedQuality, e_1_1, nameFields, dateFields, diagnostics, queryNoName, _g, queryNoDate, _h, _j, _k, _l, allCollections, base, alt, altCount, _m, total, sanitizedDocuments, requestedFields, missingFields, _o, projectionAliases, expandedProjection, refreshedDocs, includeIds, fieldAliases, displayDocs, idLookupDisplay, priorityFields, displayMaxRows, display;
|
|
2619
|
+
var input, rawCollection, retryState, triedCollections, crossCollectionRetryEnabled, dbName, db, collectionResolution, collection, bridgeCollection, retryRootCollection, schemaFields, effectivePermissionView, _a, user, isSuperAdmin, customerId, fallbackMeta, baseQuery, stripped, userId, normalizedClient, shouldScopeByClient, _b, strippedClient, clientScopedQuery, scopedQuery, normalized, findOptions, runFindWithRepair, initialRead, documents, executedQuery, probeDocs, dateFallback, fallbackQuery, fallbackRead, fallbackDocs, expanded, fallbackRead, fallbackDocs, nameFallback, fallbackRead, fallbackDocs, _c, chemicalLookup, fallbackRead, fallbackDocs, queryFields, _d, aliases, rewrittenQuery, fallbackRead, fallbackDocs, _e, activeFallback, fallbackRead, fallbackDocs, _f, idLookup, fallbackRead, fallbackDocs, baseCollection, fallbackPayload, fallbackResult, existingFallbacks, hasActiveStatusFilters, crossCollectionCandidates, crossCollectionCandidates_1, crossCollectionCandidates_1_1, candidateCollection, fallbackPayload, fallbackResult, fallbackDocs, existingFallbacks, rejectedQuality, e_1_1, nameFields, dateFields, diagnostics, queryNoName, _g, queryNoDate, _h, _j, _k, _l, allCollections, base, alt, altCount, _m, total, sanitizedDocuments, requestedFields, missingFields, _o, projectionAliases, expandedProjection, refreshedDocs, includeIds, fieldAliases, displayDocs, idLookupDisplay, priorityFields, displayMaxRows, display;
|
|
2553
2620
|
var e_1, _p;
|
|
2554
2621
|
var _this = this;
|
|
2555
2622
|
var _q, _r;
|
|
@@ -2845,7 +2912,7 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
2845
2912
|
_s.label = 24;
|
|
2846
2913
|
case 24:
|
|
2847
2914
|
probeDocs = _e;
|
|
2848
|
-
activeFallback = resolveReadActiveStatusFallback(executedQuery, probeDocs || []);
|
|
2915
|
+
activeFallback = resolveReadActiveStatusFallback(executedQuery, probeDocs || [], schemaFields);
|
|
2849
2916
|
if (!activeFallback) return [3 /*break*/, 26];
|
|
2850
2917
|
fallbackMeta.activeStatus = {
|
|
2851
2918
|
fields: activeFallback.fields,
|
|
@@ -2934,7 +3001,8 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
2934
3001
|
}
|
|
2935
3002
|
_s.label = 34;
|
|
2936
3003
|
case 34:
|
|
2937
|
-
|
|
3004
|
+
hasActiveStatusFilters = collectAssistantActiveMatchFields(executedQuery).length > 0;
|
|
3005
|
+
if (!(!documents.length && crossCollectionRetryEnabled && !hasActiveStatusFilters)) return [3 /*break*/, 44];
|
|
2938
3006
|
return [4 /*yield*/, resolveAssistantAvailableCrossCollectionFallbacks(db, dbName, collection, triedCollections)];
|
|
2939
3007
|
case 35:
|
|
2940
3008
|
crossCollectionCandidates = _s.sent();
|
|
@@ -3003,8 +3071,20 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3003
3071
|
}
|
|
3004
3072
|
finally { if (e_1) throw e_1.error; }
|
|
3005
3073
|
return [7 /*endfinally*/];
|
|
3006
|
-
case 43:
|
|
3007
|
-
|
|
3074
|
+
case 43: return [3 /*break*/, 45];
|
|
3075
|
+
case 44:
|
|
3076
|
+
if (!documents.length && crossCollectionRetryEnabled && hasActiveStatusFilters && isSuperAdmin) {
|
|
3077
|
+
fallbackMeta.collectionRetry = {
|
|
3078
|
+
from: collection,
|
|
3079
|
+
root: retryRootCollection,
|
|
3080
|
+
attempted: false,
|
|
3081
|
+
skipped: true,
|
|
3082
|
+
reason: 'active_status_query_preserved'
|
|
3083
|
+
};
|
|
3084
|
+
}
|
|
3085
|
+
_s.label = 45;
|
|
3086
|
+
case 45:
|
|
3087
|
+
if (!(!documents.length && isSuperAdmin)) return [3 /*break*/, 62];
|
|
3008
3088
|
nameFields = collectMatchFieldsByCondition(executedQuery, function (field, condition) { return isRegexMatchCondition(condition)
|
|
3009
3089
|
|| (typeof condition === 'string' && shouldApplyAssistantNameRegex(field)); });
|
|
3010
3090
|
dateFields = collectMatchFieldsByCondition(executedQuery, function (_field, condition) { return isDateCondition(condition); });
|
|
@@ -3012,36 +3092,36 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3012
3092
|
nameFields: nameFields.length ? nameFields : undefined,
|
|
3013
3093
|
dateFields: dateFields.length ? dateFields : undefined
|
|
3014
3094
|
};
|
|
3015
|
-
_s.label =
|
|
3016
|
-
case
|
|
3017
|
-
_s.trys.push([
|
|
3018
|
-
if (!nameFields.length) return [3 /*break*/,
|
|
3095
|
+
_s.label = 46;
|
|
3096
|
+
case 46:
|
|
3097
|
+
_s.trys.push([46, 51, , 52]);
|
|
3098
|
+
if (!nameFields.length) return [3 /*break*/, 48];
|
|
3019
3099
|
queryNoName = stripMatchFields(executedQuery, nameFields);
|
|
3020
3100
|
_g = diagnostics;
|
|
3021
3101
|
return [4 /*yield*/, db.collection(collection).countDocuments(queryNoName, {
|
|
3022
3102
|
readPreference: AI_ASSISTANT_READ_PREFERENCE
|
|
3023
3103
|
})];
|
|
3024
|
-
case
|
|
3104
|
+
case 47:
|
|
3025
3105
|
_g.recentCount = _s.sent();
|
|
3026
|
-
_s.label =
|
|
3027
|
-
case
|
|
3028
|
-
if (!dateFields.length) return [3 /*break*/,
|
|
3106
|
+
_s.label = 48;
|
|
3107
|
+
case 48:
|
|
3108
|
+
if (!dateFields.length) return [3 /*break*/, 50];
|
|
3029
3109
|
queryNoDate = stripMatchFields(executedQuery, dateFields);
|
|
3030
3110
|
_h = diagnostics;
|
|
3031
3111
|
return [4 /*yield*/, db.collection(collection).countDocuments(queryNoDate, {
|
|
3032
3112
|
readPreference: AI_ASSISTANT_READ_PREFERENCE
|
|
3033
3113
|
})];
|
|
3034
|
-
case 47:
|
|
3035
|
-
_h.nameMatchCount = _s.sent();
|
|
3036
|
-
_s.label = 48;
|
|
3037
|
-
case 48: return [3 /*break*/, 50];
|
|
3038
3114
|
case 49:
|
|
3115
|
+
_h.nameMatchCount = _s.sent();
|
|
3116
|
+
_s.label = 50;
|
|
3117
|
+
case 50: return [3 /*break*/, 52];
|
|
3118
|
+
case 51:
|
|
3039
3119
|
_j = _s.sent();
|
|
3040
|
-
return [3 /*break*/,
|
|
3041
|
-
case
|
|
3042
|
-
_s.trys.push([
|
|
3120
|
+
return [3 /*break*/, 52];
|
|
3121
|
+
case 52:
|
|
3122
|
+
_s.trys.push([52, 55, , 56]);
|
|
3043
3123
|
_k = probeDocs;
|
|
3044
|
-
if (_k) return [3 /*break*/,
|
|
3124
|
+
if (_k) return [3 /*break*/, 54];
|
|
3045
3125
|
return [4 /*yield*/, fetchAssistantProbeDocs({
|
|
3046
3126
|
db: db,
|
|
3047
3127
|
collection: collection,
|
|
@@ -3050,56 +3130,56 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3050
3130
|
isSuperAdmin: isSuperAdmin,
|
|
3051
3131
|
includeClientScope: shouldScopeByClient
|
|
3052
3132
|
})];
|
|
3053
|
-
case
|
|
3133
|
+
case 53:
|
|
3054
3134
|
_k = (_s.sent());
|
|
3055
|
-
_s.label =
|
|
3056
|
-
case
|
|
3135
|
+
_s.label = 54;
|
|
3136
|
+
case 54:
|
|
3057
3137
|
probeDocs = _k;
|
|
3058
3138
|
if (probeDocs.length && nameFields.length) {
|
|
3059
3139
|
diagnostics.chemicalIdDetected = detectChemicalIdFromProbe(probeDocs, nameFields);
|
|
3060
3140
|
}
|
|
3061
|
-
return [3 /*break*/,
|
|
3062
|
-
case
|
|
3141
|
+
return [3 /*break*/, 56];
|
|
3142
|
+
case 55:
|
|
3063
3143
|
_l = _s.sent();
|
|
3064
|
-
return [3 /*break*/,
|
|
3065
|
-
case
|
|
3066
|
-
_s.trys.push([
|
|
3144
|
+
return [3 /*break*/, 56];
|
|
3145
|
+
case 56:
|
|
3146
|
+
_s.trys.push([56, 60, , 61]);
|
|
3067
3147
|
return [4 /*yield*/, listAssistantCollections(db, dbName)];
|
|
3068
|
-
case
|
|
3148
|
+
case 57:
|
|
3069
3149
|
allCollections = _s.sent();
|
|
3070
3150
|
base = stripVersionSuffix(collection.startsWith('report-') ? collection.slice('report-'.length) : collection);
|
|
3071
3151
|
alt = collection.startsWith('report-') ? base : "report-".concat(base);
|
|
3072
|
-
if (!(alt && alt !== collection && allCollections.includes(alt))) return [3 /*break*/,
|
|
3152
|
+
if (!(alt && alt !== collection && allCollections.includes(alt))) return [3 /*break*/, 59];
|
|
3073
3153
|
return [4 /*yield*/, db.collection(alt).countDocuments({}, { readPreference: AI_ASSISTANT_READ_PREFERENCE })];
|
|
3074
|
-
case
|
|
3154
|
+
case 58:
|
|
3075
3155
|
altCount = _s.sent();
|
|
3076
3156
|
diagnostics.alternateCollection = alt;
|
|
3077
3157
|
diagnostics.alternateCollectionCount = altCount;
|
|
3078
|
-
_s.label =
|
|
3079
|
-
case
|
|
3080
|
-
case
|
|
3158
|
+
_s.label = 59;
|
|
3159
|
+
case 59: return [3 /*break*/, 61];
|
|
3160
|
+
case 60:
|
|
3081
3161
|
_m = _s.sent();
|
|
3082
|
-
return [3 /*break*/,
|
|
3083
|
-
case
|
|
3162
|
+
return [3 /*break*/, 61];
|
|
3163
|
+
case 61:
|
|
3084
3164
|
fallbackMeta.zeroDiagnostics = diagnostics;
|
|
3085
|
-
_s.label =
|
|
3086
|
-
case
|
|
3165
|
+
_s.label = 62;
|
|
3166
|
+
case 62:
|
|
3087
3167
|
total = null;
|
|
3088
|
-
if (!normalized.includeTotal) return [3 /*break*/,
|
|
3168
|
+
if (!normalized.includeTotal) return [3 /*break*/, 64];
|
|
3089
3169
|
return [4 /*yield*/, db.collection(collection).countDocuments(executedQuery, { readPreference: AI_ASSISTANT_READ_PREFERENCE })];
|
|
3090
|
-
case
|
|
3170
|
+
case 63:
|
|
3091
3171
|
total = _s.sent();
|
|
3092
|
-
_s.label =
|
|
3093
|
-
case
|
|
3172
|
+
_s.label = 64;
|
|
3173
|
+
case 64:
|
|
3094
3174
|
sanitizedDocuments = isSuperAdmin
|
|
3095
3175
|
? documents
|
|
3096
3176
|
: documents.map(function (doc) { return redactSensitiveFields((0, common_1.deepCopy)(doc)); });
|
|
3097
3177
|
requestedFields = resolveProjectionRequestedFields(findOptions.projection);
|
|
3098
|
-
if (!(sanitizedDocuments.length && requestedFields.length)) return [3 /*break*/,
|
|
3178
|
+
if (!(sanitizedDocuments.length && requestedFields.length)) return [3 /*break*/, 68];
|
|
3099
3179
|
missingFields = requestedFields.filter(function (field) { return !hasNonEmptyValue(sanitizedDocuments, field, { treatObjectLikeAsEmpty: true }); });
|
|
3100
|
-
if (!missingFields.length) return [3 /*break*/,
|
|
3180
|
+
if (!missingFields.length) return [3 /*break*/, 68];
|
|
3101
3181
|
_o = probeDocs;
|
|
3102
|
-
if (_o) return [3 /*break*/,
|
|
3182
|
+
if (_o) return [3 /*break*/, 66];
|
|
3103
3183
|
return [4 /*yield*/, fetchAssistantProbeDocs({
|
|
3104
3184
|
db: db,
|
|
3105
3185
|
collection: collection,
|
|
@@ -3108,25 +3188,25 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3108
3188
|
isSuperAdmin: isSuperAdmin,
|
|
3109
3189
|
includeClientScope: shouldScopeByClient
|
|
3110
3190
|
})];
|
|
3111
|
-
case
|
|
3191
|
+
case 65:
|
|
3112
3192
|
_o = (_s.sent());
|
|
3113
|
-
_s.label =
|
|
3114
|
-
case
|
|
3193
|
+
_s.label = 66;
|
|
3194
|
+
case 66:
|
|
3115
3195
|
probeDocs = _o;
|
|
3116
|
-
if (!probeDocs.length) return [3 /*break*/,
|
|
3196
|
+
if (!probeDocs.length) return [3 /*break*/, 68];
|
|
3117
3197
|
projectionAliases = resolveFieldAliases(probeDocs, missingFields, schemaFields);
|
|
3118
|
-
if (!Object.keys(projectionAliases).length) return [3 /*break*/,
|
|
3198
|
+
if (!Object.keys(projectionAliases).length) return [3 /*break*/, 68];
|
|
3119
3199
|
fallbackMeta.projectionAliases = {
|
|
3120
3200
|
aliases: projectionAliases,
|
|
3121
3201
|
attempted: true,
|
|
3122
3202
|
used: false
|
|
3123
3203
|
};
|
|
3124
3204
|
expandedProjection = expandProjectionWithAliases(findOptions.projection, projectionAliases);
|
|
3125
|
-
if (!(expandedProjection && expandedProjection !== findOptions.projection)) return [3 /*break*/,
|
|
3205
|
+
if (!(expandedProjection && expandedProjection !== findOptions.projection)) return [3 /*break*/, 68];
|
|
3126
3206
|
findOptions = __assign(__assign({}, findOptions), { projection: expandedProjection });
|
|
3127
3207
|
normalized.findOptions.projection = expandedProjection;
|
|
3128
3208
|
return [4 /*yield*/, db.collection(collection).find(executedQuery, findOptions).toArray()];
|
|
3129
|
-
case
|
|
3209
|
+
case 67:
|
|
3130
3210
|
refreshedDocs = _s.sent();
|
|
3131
3211
|
if (refreshedDocs.length) {
|
|
3132
3212
|
documents = refreshedDocs;
|
|
@@ -3135,8 +3215,8 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3135
3215
|
: refreshedDocs.map(function (doc) { return redactSensitiveFields((0, common_1.deepCopy)(doc)); });
|
|
3136
3216
|
fallbackMeta.projectionAliases.used = true;
|
|
3137
3217
|
}
|
|
3138
|
-
_s.label =
|
|
3139
|
-
case
|
|
3218
|
+
_s.label = 68;
|
|
3219
|
+
case 68:
|
|
3140
3220
|
includeIds = ((_r = input.options) === null || _r === void 0 ? void 0 : _r.includeIds) === true;
|
|
3141
3221
|
fieldAliases = resolveFieldAliases(sanitizedDocuments, requestedFields, schemaFields);
|
|
3142
3222
|
displayDocs = Object.keys(fieldAliases).length
|
|
@@ -3151,7 +3231,7 @@ function executeAiAssistantMongoRead(payload, context) {
|
|
|
3151
3231
|
idCustomer: customerId,
|
|
3152
3232
|
isSuperAdmin: isSuperAdmin
|
|
3153
3233
|
})];
|
|
3154
|
-
case
|
|
3234
|
+
case 69:
|
|
3155
3235
|
idLookupDisplay = _s.sent();
|
|
3156
3236
|
if (idLookupDisplay === null || idLookupDisplay === void 0 ? void 0 : idLookupDisplay.docs) {
|
|
3157
3237
|
displayDocs = idLookupDisplay.docs;
|
|
@@ -3308,7 +3388,7 @@ function executeAiAssistantMongoAggregate(payload, context) {
|
|
|
3308
3388
|
}
|
|
3309
3389
|
aggregateOptions = __assign(__assign({}, normalizedOptions.aggregateOptions), { readPreference: AI_ASSISTANT_READ_PREFERENCE });
|
|
3310
3390
|
runAggregateWithRepair = function (pipeline, stage) { return __awaiter(_this, void 0, void 0, function () {
|
|
3311
|
-
var docs, error_7, isDateRepair, isRankSortByRepair, repaired, docs;
|
|
3391
|
+
var docs, error_7, isDateRepair, isRankSortByRepair, isDottedOutputFieldRepair, repaired, docs;
|
|
3312
3392
|
return __generator(this, function (_a) {
|
|
3313
3393
|
switch (_a.label) {
|
|
3314
3394
|
case 0:
|
|
@@ -3323,12 +3403,15 @@ function executeAiAssistantMongoAggregate(payload, context) {
|
|
|
3323
3403
|
error_7 = _a.sent();
|
|
3324
3404
|
isDateRepair = isAssistantDateArithmeticArgumentError(error_7);
|
|
3325
3405
|
isRankSortByRepair = isAssistantRankSortByError(error_7);
|
|
3326
|
-
|
|
3406
|
+
isDottedOutputFieldRepair = isAssistantDottedOutputFieldError(error_7);
|
|
3407
|
+
if (!isDateRepair && !isRankSortByRepair && !isDottedOutputFieldRepair) {
|
|
3327
3408
|
throw error_7;
|
|
3328
3409
|
}
|
|
3329
3410
|
repaired = isDateRepair
|
|
3330
3411
|
? repairAssistantDateArithmeticInPipeline(pipeline)
|
|
3331
|
-
:
|
|
3412
|
+
: isRankSortByRepair
|
|
3413
|
+
? repairAssistantRankSortByInPipeline(pipeline)
|
|
3414
|
+
: repairAssistantDottedOutputFieldNamesInPipeline(pipeline);
|
|
3332
3415
|
if (!repaired.changed || containsForbiddenMongoOperators(repaired.pipeline)) {
|
|
3333
3416
|
throw error_7;
|
|
3334
3417
|
}
|
|
@@ -3353,6 +3436,14 @@ function executeAiAssistantMongoAggregate(payload, context) {
|
|
|
3353
3436
|
reason: 'normalized_rank_sortby_single_key'
|
|
3354
3437
|
};
|
|
3355
3438
|
}
|
|
3439
|
+
if (isDottedOutputFieldRepair) {
|
|
3440
|
+
fallbackMeta.outputFieldPath = {
|
|
3441
|
+
attempted: true,
|
|
3442
|
+
used: true,
|
|
3443
|
+
stage: stage,
|
|
3444
|
+
reason: 'normalized_dotted_output_field_names'
|
|
3445
|
+
};
|
|
3446
|
+
}
|
|
3356
3447
|
return [2 /*return*/, { documents: docs, pipeline: repaired.pipeline }];
|
|
3357
3448
|
case 4: return [2 /*return*/];
|
|
3358
3449
|
}
|
|
@@ -8427,31 +8518,127 @@ function ensureAssistantMinimumDisplayColumns(display) {
|
|
|
8427
8518
|
: rows.length;
|
|
8428
8519
|
return __assign(__assign({}, display), { columns: [primary, 'Count'], rows: [(_a = {}, _a[primary] = uniqueLabels[0], _a.Count = totalCount, _a)], rowCount: 1, truncated: false });
|
|
8429
8520
|
}
|
|
8521
|
+
function resolveAssistantDisplayTemporalLabelHint(value) {
|
|
8522
|
+
var text = normalizeOptionalString(value).toLowerCase();
|
|
8523
|
+
if (!text) {
|
|
8524
|
+
return '';
|
|
8525
|
+
}
|
|
8526
|
+
var explicitCustomerGrouping = /\b(?:by|per)\s+(?:each\s+)?customer\b/.test(text)
|
|
8527
|
+
|| /\bcustomer\s+breakdown\b/.test(text)
|
|
8528
|
+
|| /\brevenue\s+by\s+customer\b/.test(text);
|
|
8529
|
+
if (explicitCustomerGrouping) {
|
|
8530
|
+
return 'Customer';
|
|
8531
|
+
}
|
|
8532
|
+
if (/\b(year|yearly|per year|by year)\b/.test(text)) {
|
|
8533
|
+
return 'Year';
|
|
8534
|
+
}
|
|
8535
|
+
if (/\b(quarter|quarterly|per quarter|by quarter)\b/.test(text)) {
|
|
8536
|
+
return 'Quarter';
|
|
8537
|
+
}
|
|
8538
|
+
if (/\b(month|monthly|per month|by month)\b/.test(text)) {
|
|
8539
|
+
return 'Month';
|
|
8540
|
+
}
|
|
8541
|
+
if (/\b(week|weekly|per week|by week)\b/.test(text)) {
|
|
8542
|
+
return 'Week';
|
|
8543
|
+
}
|
|
8544
|
+
if (/\b(day|daily|per day|by day|date)\b/.test(text)) {
|
|
8545
|
+
return 'Day';
|
|
8546
|
+
}
|
|
8547
|
+
if (/\b(customer|client)\b/.test(text)) {
|
|
8548
|
+
return 'Customer';
|
|
8549
|
+
}
|
|
8550
|
+
return '';
|
|
8551
|
+
}
|
|
8552
|
+
function renameAssistantDisplayColumn(display, fromColumn, toColumn) {
|
|
8553
|
+
var from = normalizeOptionalString(fromColumn);
|
|
8554
|
+
var to = normalizeOptionalString(toColumn);
|
|
8555
|
+
if (!from || !to || from === to || !Array.isArray(display === null || display === void 0 ? void 0 : display.columns)) {
|
|
8556
|
+
return display;
|
|
8557
|
+
}
|
|
8558
|
+
var index = display.columns.findIndex(function (column) { return normalizeOptionalString(column).toLowerCase() === from.toLowerCase(); });
|
|
8559
|
+
if (index === -1) {
|
|
8560
|
+
return display;
|
|
8561
|
+
}
|
|
8562
|
+
var sourceColumn = display.columns[index];
|
|
8563
|
+
var columns = __spreadArray([], __read(display.columns), false);
|
|
8564
|
+
columns[index] = to;
|
|
8565
|
+
var rows = Array.isArray(display.rows)
|
|
8566
|
+
? display.rows.map(function (row) {
|
|
8567
|
+
var next = __assign({}, (row || {}));
|
|
8568
|
+
if (Object.prototype.hasOwnProperty.call(next, sourceColumn) && !Object.prototype.hasOwnProperty.call(next, to)) {
|
|
8569
|
+
next[to] = next[sourceColumn];
|
|
8570
|
+
delete next[sourceColumn];
|
|
8571
|
+
}
|
|
8572
|
+
return next;
|
|
8573
|
+
})
|
|
8574
|
+
: [];
|
|
8575
|
+
return __assign(__assign({}, display), { columns: columns, rows: rows });
|
|
8576
|
+
}
|
|
8577
|
+
function applyAssistantDisplayColumnHints(value, display) {
|
|
8578
|
+
if (!display || !Array.isArray(display.columns) || !display.columns.length) {
|
|
8579
|
+
return display;
|
|
8580
|
+
}
|
|
8581
|
+
var firstColumn = normalizeOptionalString(display.columns[0]).toLowerCase();
|
|
8582
|
+
if (firstColumn !== 'group' && firstColumn !== 'result') {
|
|
8583
|
+
return display;
|
|
8584
|
+
}
|
|
8585
|
+
var labelHint = resolveAssistantDisplayTemporalLabelHint(value);
|
|
8586
|
+
if (!labelHint) {
|
|
8587
|
+
return display;
|
|
8588
|
+
}
|
|
8589
|
+
return renameAssistantDisplayColumn(display, display.columns[0], labelHint);
|
|
8590
|
+
}
|
|
8591
|
+
function resolveAssistantEmptyDisplayColumns(value) {
|
|
8592
|
+
var labelHint = resolveAssistantDisplayTemporalLabelHint(value);
|
|
8593
|
+
if (labelHint) {
|
|
8594
|
+
if (labelHint === 'Customer') {
|
|
8595
|
+
var requestedMonths = resolveAssistantRequestedMonthBucketsFromMessage(value);
|
|
8596
|
+
if (requestedMonths.length >= 3) {
|
|
8597
|
+
return __spreadArray([labelHint], __read(requestedMonths), false);
|
|
8598
|
+
}
|
|
8599
|
+
var looseMonthMatch = value.match(/\b(?:last|past|previous|over\s+the\s+last)\s+(\d+)\s+(?:full\s+calendar\s+|calendar\s+|full\s+)?months?\b/i);
|
|
8600
|
+
var looseMonthCount = (looseMonthMatch === null || looseMonthMatch === void 0 ? void 0 : looseMonthMatch[1]) ? Number(looseMonthMatch[1]) : Number.NaN;
|
|
8601
|
+
if (Number.isFinite(looseMonthCount) && looseMonthCount > 0) {
|
|
8602
|
+
var inferred = buildAssistantExpectedMonthBuckets((0, common_1.round)(looseMonthCount), 'full_month');
|
|
8603
|
+
if (inferred.length >= 3) {
|
|
8604
|
+
return __spreadArray([labelHint], __read(inferred), false);
|
|
8605
|
+
}
|
|
8606
|
+
}
|
|
8607
|
+
return [labelHint, 'Details'];
|
|
8608
|
+
}
|
|
8609
|
+
return [labelHint, 'Total Revenue'];
|
|
8610
|
+
}
|
|
8611
|
+
if (hasAssistantDeliveryAliasTerms(value)) {
|
|
8612
|
+
return ['Delivery', 'Details'];
|
|
8613
|
+
}
|
|
8614
|
+
return ['Result', 'Details'];
|
|
8615
|
+
}
|
|
8430
8616
|
function applyAssistantDisplayTableToResponse(value, display) {
|
|
8617
|
+
var _a;
|
|
8431
8618
|
if (!display || !Array.isArray(display.rows)) {
|
|
8432
8619
|
return value;
|
|
8433
8620
|
}
|
|
8434
|
-
var normalizedDisplay = ensureAssistantMinimumDisplayColumns(display);
|
|
8621
|
+
var normalizedDisplay = applyAssistantDisplayColumnHints(value, ensureAssistantMinimumDisplayColumns(display));
|
|
8435
8622
|
if (!display.rows.length) {
|
|
8436
8623
|
var cleaned_1 = stripAssistantMarkdownTables(value);
|
|
8437
8624
|
var rowCount = typeof normalizedDisplay.rowCount === 'number' && normalizedDisplay.rowCount > 0
|
|
8438
8625
|
? normalizedDisplay.rowCount
|
|
8439
8626
|
: 0;
|
|
8440
|
-
var
|
|
8441
|
-
?
|
|
8442
|
-
|
|
8443
|
-
|
|
8444
|
-
|
|
8445
|
-
|
|
8446
|
-
|
|
8447
|
-
|
|
8448
|
-
|
|
8449
|
-
|
|
8450
|
-
|
|
8451
|
-
|
|
8452
|
-
|
|
8453
|
-
|
|
8454
|
-
|
|
8627
|
+
var fallbackColumns = Array.isArray(normalizedDisplay.columns) && normalizedDisplay.columns.length
|
|
8628
|
+
? normalizedDisplay.columns
|
|
8629
|
+
: resolveAssistantEmptyDisplayColumns(cleaned_1 || value);
|
|
8630
|
+
var normalizedColumns = fallbackColumns.length === 1
|
|
8631
|
+
? __spreadArray(__spreadArray([], __read(fallbackColumns), false), ['Value'], false) : fallbackColumns;
|
|
8632
|
+
var rowSummary = rowCount > 0
|
|
8633
|
+
? [(_a = {}, _a[normalizedColumns[0]] = 'Rows matched', _a[normalizedColumns[1]] = rowCount, _a)]
|
|
8634
|
+
: [];
|
|
8635
|
+
var tableDisplay = {
|
|
8636
|
+
columns: normalizedColumns,
|
|
8637
|
+
rows: rowSummary,
|
|
8638
|
+
rowCount: rowCount,
|
|
8639
|
+
truncated: false,
|
|
8640
|
+
includeIds: false
|
|
8641
|
+
};
|
|
8455
8642
|
var emptyTable = formatDisplayTableMarkdown(tableDisplay);
|
|
8456
8643
|
if (!emptyTable) {
|
|
8457
8644
|
return cleaned_1 || value;
|
|
@@ -9226,10 +9413,63 @@ function normalizeAssistantDateArithmeticArgs(expression) {
|
|
|
9226
9413
|
}
|
|
9227
9414
|
expression.$let = nextArgs;
|
|
9228
9415
|
};
|
|
9416
|
+
var normalizeDatePartArgs = function () {
|
|
9417
|
+
var operators = ['$year', '$month', '$week', '$isoWeek', '$isoWeekYear', '$dayOfMonth', '$dayOfYear'];
|
|
9418
|
+
var looksLikeDateOperand = function (candidate) {
|
|
9419
|
+
if (candidate instanceof Date) {
|
|
9420
|
+
return true;
|
|
9421
|
+
}
|
|
9422
|
+
if (typeof candidate === 'string') {
|
|
9423
|
+
return candidate.startsWith('$$') || candidate.startsWith('$');
|
|
9424
|
+
}
|
|
9425
|
+
if (candidate && typeof candidate === 'object' && !Array.isArray(candidate)) {
|
|
9426
|
+
return Object.keys(candidate).some(function (op) { return op.startsWith('$'); });
|
|
9427
|
+
}
|
|
9428
|
+
return false;
|
|
9429
|
+
};
|
|
9430
|
+
operators.forEach(function (operator) {
|
|
9431
|
+
if (!Object.prototype.hasOwnProperty.call(expression, operator)) {
|
|
9432
|
+
return;
|
|
9433
|
+
}
|
|
9434
|
+
var rawArgs = expression[operator];
|
|
9435
|
+
if (!rawArgs || typeof rawArgs !== 'object' || Array.isArray(rawArgs)) {
|
|
9436
|
+
return;
|
|
9437
|
+
}
|
|
9438
|
+
if (rawArgs instanceof Date || rawArgs instanceof RegExp || isMongoObjectId(rawArgs)) {
|
|
9439
|
+
return;
|
|
9440
|
+
}
|
|
9441
|
+
var nextArgs = __assign({}, rawArgs);
|
|
9442
|
+
if (!Object.prototype.hasOwnProperty.call(nextArgs, 'date')) {
|
|
9443
|
+
var dateCandidateKey = Object.keys(nextArgs).find(function (key) {
|
|
9444
|
+
if (key === 'timezone') {
|
|
9445
|
+
return false;
|
|
9446
|
+
}
|
|
9447
|
+
return looksLikeDateOperand(nextArgs[key]);
|
|
9448
|
+
});
|
|
9449
|
+
if (dateCandidateKey) {
|
|
9450
|
+
nextArgs.date = nextArgs[dateCandidateKey];
|
|
9451
|
+
delete nextArgs[dateCandidateKey];
|
|
9452
|
+
}
|
|
9453
|
+
}
|
|
9454
|
+
if (!Object.prototype.hasOwnProperty.call(nextArgs, 'date')) {
|
|
9455
|
+
return;
|
|
9456
|
+
}
|
|
9457
|
+
var allowedKeys = new Set(['date', 'timezone']);
|
|
9458
|
+
Object.keys(nextArgs).forEach(function (key) {
|
|
9459
|
+
if (!allowedKeys.has(key)) {
|
|
9460
|
+
delete nextArgs[key];
|
|
9461
|
+
}
|
|
9462
|
+
});
|
|
9463
|
+
expression[operator] = Object.prototype.hasOwnProperty.call(nextArgs, 'timezone')
|
|
9464
|
+
? nextArgs
|
|
9465
|
+
: nextArgs.date;
|
|
9466
|
+
});
|
|
9467
|
+
};
|
|
9229
9468
|
normalizeOperatorArgs('$dateAdd');
|
|
9230
9469
|
normalizeOperatorArgs('$dateSubtract');
|
|
9231
9470
|
normalizeDateTruncArgs();
|
|
9232
9471
|
normalizeLetArgs();
|
|
9472
|
+
normalizeDatePartArgs();
|
|
9233
9473
|
return expression;
|
|
9234
9474
|
}
|
|
9235
9475
|
function normalizeAssistantNowExprPlaceholdersDeep(value) {
|
|
@@ -9262,6 +9502,13 @@ function isAssistantDateArithmeticArgumentError(error) {
|
|
|
9262
9502
|
return message.includes('unrecognized argument to $datesubtract:')
|
|
9263
9503
|
|| message.includes('unrecognized argument to $dateadd:')
|
|
9264
9504
|
|| message.includes('unrecognized argument to $datetrunc:')
|
|
9505
|
+
|| message.includes('unrecognized option to $year:')
|
|
9506
|
+
|| message.includes('unrecognized option to $month:')
|
|
9507
|
+
|| message.includes('unrecognized option to $week:')
|
|
9508
|
+
|| message.includes('unrecognized option to $isoweek:')
|
|
9509
|
+
|| message.includes('unrecognized option to $isoweekyear:')
|
|
9510
|
+
|| message.includes('unrecognized option to $dayofmonth:')
|
|
9511
|
+
|| message.includes('unrecognized option to $dayofyear:')
|
|
9265
9512
|
|| message.includes('unrecognized parameter to $let:')
|
|
9266
9513
|
|| message.includes("missing 'in' parameter to $let")
|
|
9267
9514
|
|| message.includes("missing 'unit' parameter to $datetrunc")
|
|
@@ -9295,6 +9542,13 @@ function isAssistantRankSortByError(error) {
|
|
|
9295
9542
|
return message.includes('$rank must be specified with a top level sortby expression with exactly one element')
|
|
9296
9543
|
|| message.includes('$denserank must be specified with a top level sortby expression with exactly one element');
|
|
9297
9544
|
}
|
|
9545
|
+
function isAssistantDottedOutputFieldError(error) {
|
|
9546
|
+
var message = normalizeOptionalString(error === null || error === void 0 ? void 0 : error.message).toLowerCase();
|
|
9547
|
+
if (!message) {
|
|
9548
|
+
return false;
|
|
9549
|
+
}
|
|
9550
|
+
return message.includes("fieldpath field names may not contain '.'");
|
|
9551
|
+
}
|
|
9298
9552
|
function didAssistantValueChange(before, after) {
|
|
9299
9553
|
try {
|
|
9300
9554
|
return JSON.stringify(before) !== JSON.stringify(after);
|
|
@@ -9340,6 +9594,49 @@ function repairAssistantRankSortByInPipeline(pipeline) {
|
|
|
9340
9594
|
changed: didAssistantValueChange(pipeline, repaired)
|
|
9341
9595
|
};
|
|
9342
9596
|
}
|
|
9597
|
+
function repairAssistantDottedOutputFieldNamesInPipeline(pipeline) {
|
|
9598
|
+
var rewriteStageOutputFields = function (value) {
|
|
9599
|
+
if (Array.isArray(value)) {
|
|
9600
|
+
return value.map(function (entry) { return rewriteStageOutputFields(entry); });
|
|
9601
|
+
}
|
|
9602
|
+
if (!value || typeof value !== 'object' || value instanceof Date || value instanceof RegExp || isMongoObjectId(value)) {
|
|
9603
|
+
return value;
|
|
9604
|
+
}
|
|
9605
|
+
var next = {};
|
|
9606
|
+
Object.keys(value).forEach(function (field) {
|
|
9607
|
+
var safeField = field.startsWith('$') || field === '_id'
|
|
9608
|
+
? field
|
|
9609
|
+
: field.replace(/\./g, '_');
|
|
9610
|
+
next[safeField] = rewriteStageOutputFields(value[field]);
|
|
9611
|
+
});
|
|
9612
|
+
return next;
|
|
9613
|
+
};
|
|
9614
|
+
var repaired = Array.isArray(pipeline)
|
|
9615
|
+
? pipeline.map(function (stage) {
|
|
9616
|
+
if (!stage || typeof stage !== 'object' || Array.isArray(stage)) {
|
|
9617
|
+
return stage;
|
|
9618
|
+
}
|
|
9619
|
+
var next = __assign({}, stage);
|
|
9620
|
+
if (stage.$project && typeof stage.$project === 'object' && !Array.isArray(stage.$project)) {
|
|
9621
|
+
next.$project = rewriteStageOutputFields(stage.$project);
|
|
9622
|
+
}
|
|
9623
|
+
if (stage.$addFields && typeof stage.$addFields === 'object' && !Array.isArray(stage.$addFields)) {
|
|
9624
|
+
next.$addFields = rewriteStageOutputFields(stage.$addFields);
|
|
9625
|
+
}
|
|
9626
|
+
if (stage.$set && typeof stage.$set === 'object' && !Array.isArray(stage.$set)) {
|
|
9627
|
+
next.$set = rewriteStageOutputFields(stage.$set);
|
|
9628
|
+
}
|
|
9629
|
+
if (stage.$group && typeof stage.$group === 'object' && !Array.isArray(stage.$group)) {
|
|
9630
|
+
next.$group = rewriteStageOutputFields(stage.$group);
|
|
9631
|
+
}
|
|
9632
|
+
return next;
|
|
9633
|
+
})
|
|
9634
|
+
: pipeline;
|
|
9635
|
+
return {
|
|
9636
|
+
pipeline: repaired,
|
|
9637
|
+
changed: didAssistantValueChange(pipeline, repaired)
|
|
9638
|
+
};
|
|
9639
|
+
}
|
|
9343
9640
|
function isMatchExpressionOperand(value) {
|
|
9344
9641
|
if (typeof value === 'string') {
|
|
9345
9642
|
return value.startsWith('$$');
|
|
@@ -10964,12 +11261,22 @@ function collectAssistantActiveMatchFields(query) {
|
|
|
10964
11261
|
var fields = collectMatchFieldsByCondition(query, function (field, condition) { return isAssistantActiveFieldPath(field) && isAssistantActiveCondition(condition); });
|
|
10965
11262
|
return Array.from(new Set(fields));
|
|
10966
11263
|
}
|
|
10967
|
-
function resolveReadActiveStatusFallback(query, probeDocs) {
|
|
11264
|
+
function resolveReadActiveStatusFallback(query, probeDocs, schemaFields) {
|
|
11265
|
+
var _a;
|
|
10968
11266
|
var fields = collectAssistantActiveMatchFields(query);
|
|
10969
|
-
|
|
11267
|
+
var hasProbeDocs = Array.isArray(probeDocs) && probeDocs.length > 0;
|
|
11268
|
+
var normalizedSchemaFields = Array.isArray(schemaFields)
|
|
11269
|
+
? new Set(schemaFields
|
|
11270
|
+
.map(function (field) { return normalizeOptionalString(field).toLowerCase(); })
|
|
11271
|
+
.filter(Boolean)
|
|
11272
|
+
.map(function (field) { return field.split('.').pop() || field; }))
|
|
11273
|
+
: new Set();
|
|
11274
|
+
if (!fields.length || (!hasProbeDocs && !normalizedSchemaFields.size)) {
|
|
10970
11275
|
return null;
|
|
10971
11276
|
}
|
|
10972
|
-
var hasAnyFieldData =
|
|
11277
|
+
var hasAnyFieldData = hasProbeDocs
|
|
11278
|
+
? fields.some(function (field) { return hasNonEmptyValue(probeDocs, field, { treatObjectLikeAsEmpty: true }); })
|
|
11279
|
+
: false;
|
|
10973
11280
|
if (hasAnyFieldData) {
|
|
10974
11281
|
return null;
|
|
10975
11282
|
}
|
|
@@ -10977,6 +11284,38 @@ function resolveReadActiveStatusFallback(query, probeDocs) {
|
|
|
10977
11284
|
if (!stripped.changed || !stripped.value || typeof stripped.value !== 'object') {
|
|
10978
11285
|
return null;
|
|
10979
11286
|
}
|
|
11287
|
+
var fallbackActiveCandidates = [
|
|
11288
|
+
{ field: 'status', condition: { $regex: '^active$', $options: 'i' } },
|
|
11289
|
+
{ field: 'state', condition: { $regex: '^active$', $options: 'i' } },
|
|
11290
|
+
{ field: 'active', condition: true },
|
|
11291
|
+
{ field: 'is_active', condition: true },
|
|
11292
|
+
{ field: 'isactive', condition: true },
|
|
11293
|
+
{ field: 'enabled', condition: true },
|
|
11294
|
+
{ field: 'is_enabled', condition: true },
|
|
11295
|
+
{ field: 'isenabled', condition: true }
|
|
11296
|
+
].filter(function (entry) {
|
|
11297
|
+
if (!entry.field || fields.includes(entry.field)) {
|
|
11298
|
+
return false;
|
|
11299
|
+
}
|
|
11300
|
+
var hasProbeData = hasProbeDocs
|
|
11301
|
+
? hasNonEmptyValue(probeDocs, entry.field, { treatObjectLikeAsEmpty: true })
|
|
11302
|
+
: false;
|
|
11303
|
+
return hasProbeData || normalizedSchemaFields.has(entry.field);
|
|
11304
|
+
});
|
|
11305
|
+
if (fallbackActiveCandidates.length) {
|
|
11306
|
+
var activeMatch = fallbackActiveCandidates.length === 1
|
|
11307
|
+
? (_a = {}, _a[fallbackActiveCandidates[0].field] = fallbackActiveCandidates[0].condition, _a) : { $or: fallbackActiveCandidates.map(function (entry) {
|
|
11308
|
+
var _a;
|
|
11309
|
+
return (_a = {}, _a[entry.field] = entry.condition, _a);
|
|
11310
|
+
}) };
|
|
11311
|
+
var baseQuery = stripped.value;
|
|
11312
|
+
return {
|
|
11313
|
+
query: Object.keys(baseQuery).length
|
|
11314
|
+
? { $and: [baseQuery, activeMatch] }
|
|
11315
|
+
: activeMatch,
|
|
11316
|
+
fields: __spreadArray(__spreadArray([], __read(fields), false), __read(fallbackActiveCandidates.map(function (entry) { return entry.field; })), false)
|
|
11317
|
+
};
|
|
11318
|
+
}
|
|
10980
11319
|
return {
|
|
10981
11320
|
query: stripped.value,
|
|
10982
11321
|
fields: fields
|
|
@@ -12185,6 +12524,62 @@ function mergeAssistantHintValues() {
|
|
|
12185
12524
|
});
|
|
12186
12525
|
return result;
|
|
12187
12526
|
}
|
|
12527
|
+
function hasAssistantDeliveryAliasTerms(value) {
|
|
12528
|
+
var normalized = normalizeOptionalString(value).toLowerCase();
|
|
12529
|
+
if (!normalized) {
|
|
12530
|
+
return false;
|
|
12531
|
+
}
|
|
12532
|
+
return /\b(deliver(?:y|ies)|dispatch|driver|bols?|bills?\s+of\s+lading|pso(?:s)?|production\s+sales\s+orders?|sales\s+orders?|truck[\s_-]+treat(?:ing)?|treater[\s_-]+truck|batch[\s_-]+(?:treat(?:ing)?|jobs?)|specialty[\s_-]+jobs?|continuous|ats|automated[\s_-]+treatment[\s_-]+system|isotanks?|chemical[\s_-]+trailers?|vac[\s_-]+trucks?|assets?|treatment[\s_-]+plans?|treatments?)\b/i.test(normalized);
|
|
12533
|
+
}
|
|
12534
|
+
function hasAssistantDeliveryAliasPathTerms(value) {
|
|
12535
|
+
var normalized = normalizeOptionalString(value).toLowerCase();
|
|
12536
|
+
if (!normalized) {
|
|
12537
|
+
return false;
|
|
12538
|
+
}
|
|
12539
|
+
return /\b(deliver(?:y|ies)?|route|dispatch|driver|bols?|bills?[-_/ ]?of[-_/ ]?lading|pso(?:s)?|production[-_/ ]?sales[-_/ ]?orders?|sales[-_/ ]?orders?|truck[-_/ ]?treat(?:ing)?|treater[-_/ ]?truck|batch[-_/ ]?(?:treat(?:ing)?|jobs?)|specialty[-_/ ]?jobs?|continuous|ats|automated[-_/ ]?treatment[-_/ ]?system|isotanks?|chemical[-_/ ]?trailers?|vac[-_/ ]?trucks?|assets?|treatment[-_/ ]?plans?|treatments?)\b/i.test(normalized);
|
|
12540
|
+
}
|
|
12541
|
+
function hasAssistantPurchaseOrderAliasTerms(value) {
|
|
12542
|
+
var normalized = normalizeOptionalString(value).toLowerCase();
|
|
12543
|
+
if (!normalized) {
|
|
12544
|
+
return false;
|
|
12545
|
+
}
|
|
12546
|
+
return /\b(po(?:s)?|purchase[\s_-]+orders?)\b/i.test(normalized);
|
|
12547
|
+
}
|
|
12548
|
+
function hasAssistantPurchaseOrderAliasPathTerms(value) {
|
|
12549
|
+
var normalized = normalizeOptionalString(value).toLowerCase();
|
|
12550
|
+
if (!normalized) {
|
|
12551
|
+
return false;
|
|
12552
|
+
}
|
|
12553
|
+
return /\b(po(?:s)?|purchase[-_/ ]?orders?)\b/i.test(normalized);
|
|
12554
|
+
}
|
|
12555
|
+
function hasAssistantChemicalCatalogAliasTerms(value) {
|
|
12556
|
+
var normalized = normalizeOptionalString(value).toLowerCase();
|
|
12557
|
+
if (!normalized) {
|
|
12558
|
+
return false;
|
|
12559
|
+
}
|
|
12560
|
+
return /\b(chemicals?|products?|items?)\b/i.test(normalized);
|
|
12561
|
+
}
|
|
12562
|
+
var AI_ASSISTANT_DELIVERY_HINT_CANDIDATES = [
|
|
12563
|
+
'work-order-dynamics',
|
|
12564
|
+
'work-orders',
|
|
12565
|
+
'deliveries',
|
|
12566
|
+
'jobs',
|
|
12567
|
+
'treatments',
|
|
12568
|
+
'treatment-plans',
|
|
12569
|
+
'assets',
|
|
12570
|
+
'orders'
|
|
12571
|
+
];
|
|
12572
|
+
var AI_ASSISTANT_PURCHASE_HINT_CANDIDATES = [
|
|
12573
|
+
'orders',
|
|
12574
|
+
'purchase-orders'
|
|
12575
|
+
];
|
|
12576
|
+
var AI_ASSISTANT_CHEMICAL_HINT_CANDIDATES = [
|
|
12577
|
+
'chemicals',
|
|
12578
|
+
'products',
|
|
12579
|
+
'items',
|
|
12580
|
+
'inventory',
|
|
12581
|
+
'blends'
|
|
12582
|
+
];
|
|
12188
12583
|
function resolveCollectionHintsFromRoute(route, collectionNames) {
|
|
12189
12584
|
var normalizedRoute = normalizeOptionalString(route);
|
|
12190
12585
|
if (!normalizedRoute || !collectionNames.length) {
|
|
@@ -12233,6 +12628,15 @@ function resolveAssistantDefaultCollectionHints(message) {
|
|
|
12233
12628
|
if (/\busers?\b/.test(text)) {
|
|
12234
12629
|
push('users');
|
|
12235
12630
|
}
|
|
12631
|
+
if (hasAssistantDeliveryAliasTerms(text)) {
|
|
12632
|
+
AI_ASSISTANT_DELIVERY_HINT_CANDIDATES.forEach(push);
|
|
12633
|
+
}
|
|
12634
|
+
if (hasAssistantPurchaseOrderAliasTerms(text)) {
|
|
12635
|
+
AI_ASSISTANT_PURCHASE_HINT_CANDIDATES.forEach(push);
|
|
12636
|
+
}
|
|
12637
|
+
if (hasAssistantChemicalCatalogAliasTerms(text)) {
|
|
12638
|
+
AI_ASSISTANT_CHEMICAL_HINT_CANDIDATES.forEach(push);
|
|
12639
|
+
}
|
|
12236
12640
|
return hints;
|
|
12237
12641
|
}
|
|
12238
12642
|
function buildCollectionRankingDebugFromTokens(tokens, collectionNames, max) {
|
|
@@ -12433,8 +12837,27 @@ function isAssistantCollectionRefinementOf(currentCollection, genericCollection)
|
|
|
12433
12837
|
|| current.endsWith("_".concat(generic))
|
|
12434
12838
|
|| current.includes("_".concat(generic, "_"));
|
|
12435
12839
|
}
|
|
12840
|
+
function resolveAssistantCollectionScore(collectionRanking, collectionName) {
|
|
12841
|
+
var _a;
|
|
12842
|
+
var ranked = Array.isArray(collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.ranked) ? collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.ranked : [];
|
|
12843
|
+
var rankedScore = (_a = ranked.find(function (entry) { return (entry === null || entry === void 0 ? void 0 : entry.name) === collectionName; })) === null || _a === void 0 ? void 0 : _a.score;
|
|
12844
|
+
if (typeof rankedScore === 'number') {
|
|
12845
|
+
return rankedScore;
|
|
12846
|
+
}
|
|
12847
|
+
var tokens = Array.isArray(collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.tokens)
|
|
12848
|
+
? collectionRanking.tokens.filter(function (token) { return typeof token === 'string' && !!token; })
|
|
12849
|
+
: [];
|
|
12850
|
+
if (!tokens.length) {
|
|
12851
|
+
return 0;
|
|
12852
|
+
}
|
|
12853
|
+
var rankingWeights = collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.tokenWeights;
|
|
12854
|
+
var hasRankingWeights = rankingWeights && typeof rankingWeights === 'object';
|
|
12855
|
+
var weights = hasRankingWeights
|
|
12856
|
+
? rankingWeights
|
|
12857
|
+
: computeCollectionTokenWeights(tokens).weights;
|
|
12858
|
+
return scoreCollectionMatch(tokens, collectionName, weights);
|
|
12859
|
+
}
|
|
12436
12860
|
function resolveAssistantCollectionOverride(collectionRanking, currentCollection) {
|
|
12437
|
-
var _a, _b;
|
|
12438
12861
|
var ranked = Array.isArray(collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.ranked) ? collectionRanking === null || collectionRanking === void 0 ? void 0 : collectionRanking.ranked : [];
|
|
12439
12862
|
if (!ranked.length) {
|
|
12440
12863
|
return null;
|
|
@@ -12456,7 +12879,7 @@ function resolveAssistantCollectionOverride(collectionRanking, currentCollection
|
|
|
12456
12879
|
if (current === top.name) {
|
|
12457
12880
|
return null;
|
|
12458
12881
|
}
|
|
12459
|
-
var currentScore = (
|
|
12882
|
+
var currentScore = resolveAssistantCollectionScore(collectionRanking, current);
|
|
12460
12883
|
if (currentScore >= AI_ASSISTANT_COLLECTION_OVERRIDE_MIN_SCORE
|
|
12461
12884
|
&& isAssistantGenericCollectionName(top.name)
|
|
12462
12885
|
&& isAssistantCollectionRefinementOf(current, top.name)) {
|
|
@@ -12465,7 +12888,7 @@ function resolveAssistantCollectionOverride(collectionRanking, currentCollection
|
|
|
12465
12888
|
var scoreGap = top.score - currentScore;
|
|
12466
12889
|
var currentIsVersion = isVersionCollectionName(current);
|
|
12467
12890
|
var topIsVersion = isVersionCollectionName(top.name);
|
|
12468
|
-
if (scoreGap
|
|
12891
|
+
if (scoreGap <= AI_ASSISTANT_COLLECTION_OVERRIDE_SCORE_GAP && !(currentIsVersion && !topIsVersion)) {
|
|
12469
12892
|
return null;
|
|
12470
12893
|
}
|
|
12471
12894
|
var reason = currentIsVersion && !topIsVersion
|
|
@@ -12495,7 +12918,7 @@ function findBestCollectionMatch(requested, collectionNames) {
|
|
|
12495
12918
|
}
|
|
12496
12919
|
function resolveAssistantCollectionName(db, dbName, requested) {
|
|
12497
12920
|
return __awaiter(this, void 0, void 0, function () {
|
|
12498
|
-
var trimmed, collectionNames, best, candidates;
|
|
12921
|
+
var trimmed, collectionNames, aliasCandidates, matchedAlias, best, candidates;
|
|
12499
12922
|
return __generator(this, function (_a) {
|
|
12500
12923
|
switch (_a.label) {
|
|
12501
12924
|
case 0:
|
|
@@ -12509,6 +12932,11 @@ function resolveAssistantCollectionName(db, dbName, requested) {
|
|
|
12509
12932
|
if (collectionNames.includes(trimmed)) {
|
|
12510
12933
|
return [2 /*return*/, { name: trimmed, matched: true, candidates: [], score: 100 }];
|
|
12511
12934
|
}
|
|
12935
|
+
aliasCandidates = resolveAssistantBridgeCollectionAliasCandidates(trimmed);
|
|
12936
|
+
matchedAlias = aliasCandidates.find(function (candidate) { return collectionNames.includes(candidate); });
|
|
12937
|
+
if (matchedAlias) {
|
|
12938
|
+
return [2 /*return*/, { name: matchedAlias, matched: true, candidates: [], score: 95 }];
|
|
12939
|
+
}
|
|
12512
12940
|
best = findBestCollectionMatch(trimmed, collectionNames);
|
|
12513
12941
|
if (best && best.score >= 20) {
|
|
12514
12942
|
return [2 /*return*/, { name: best.name, matched: true, candidates: [], score: best.score }];
|
|
@@ -12526,11 +12954,150 @@ function resolveAssistantCollectionName(db, dbName, requested) {
|
|
|
12526
12954
|
}
|
|
12527
12955
|
var AI_ASSISTANT_BRIDGE_COLLECTION_ALIASES = {
|
|
12528
12956
|
user: 'users',
|
|
12957
|
+
client: 'customers',
|
|
12958
|
+
clients: 'customers',
|
|
12959
|
+
customer: 'customers',
|
|
12960
|
+
delivery: 'work-order-dynamics',
|
|
12961
|
+
deliveries: 'work-order-dynamics',
|
|
12962
|
+
bol: 'work-order-dynamics',
|
|
12963
|
+
bols: 'work-order-dynamics',
|
|
12964
|
+
billoflading: 'work-order-dynamics',
|
|
12965
|
+
billsoflading: 'work-order-dynamics',
|
|
12966
|
+
pso: 'work-order-dynamics',
|
|
12967
|
+
psos: 'work-order-dynamics',
|
|
12968
|
+
productionsalesorder: 'work-order-dynamics',
|
|
12969
|
+
productionsalesorders: 'work-order-dynamics',
|
|
12970
|
+
salesorder: 'work-order-dynamics',
|
|
12971
|
+
salesorders: 'work-order-dynamics',
|
|
12972
|
+
batchjob: 'jobs',
|
|
12973
|
+
batchjobs: 'jobs',
|
|
12974
|
+
continuous: 'work-order-dynamics',
|
|
12975
|
+
ats: 'work-order-dynamics',
|
|
12976
|
+
automatedtreatmentsystem: 'work-order-dynamics',
|
|
12977
|
+
trucktreat: 'work-order-dynamics',
|
|
12978
|
+
trucktreating: 'work-order-dynamics',
|
|
12979
|
+
treatertruck: 'work-order-dynamics',
|
|
12980
|
+
batchtreat: 'work-order-dynamics',
|
|
12981
|
+
batchtreating: 'work-order-dynamics',
|
|
12982
|
+
specialtyjob: 'work-order-dynamics',
|
|
12983
|
+
specialtyjobs: 'work-order-dynamics',
|
|
12984
|
+
isotank: 'assets',
|
|
12985
|
+
isotanks: 'assets',
|
|
12986
|
+
chemicaltrailer: 'assets',
|
|
12987
|
+
chemicaltrailers: 'assets',
|
|
12988
|
+
vactruck: 'assets',
|
|
12989
|
+
vactrucks: 'assets',
|
|
12990
|
+
asset: 'assets',
|
|
12991
|
+
assets: 'assets',
|
|
12992
|
+
treatmentplan: 'treatment-plans',
|
|
12993
|
+
treatmentplans: 'treatment-plans',
|
|
12994
|
+
treatment: 'treatments',
|
|
12995
|
+
treatments: 'treatments',
|
|
12996
|
+
chemical: 'chemicals',
|
|
12997
|
+
chemicals: 'chemicals',
|
|
12998
|
+
product: 'products',
|
|
12999
|
+
products: 'products',
|
|
13000
|
+
item: 'items',
|
|
13001
|
+
items: 'items',
|
|
13002
|
+
po: 'orders',
|
|
13003
|
+
pos: 'orders',
|
|
13004
|
+
purchaseorder: 'orders',
|
|
13005
|
+
purchaseorders: 'orders',
|
|
12529
13006
|
supportticket: 'support-tickets',
|
|
12530
13007
|
supporttickets: 'support-tickets',
|
|
12531
13008
|
ticket: 'support-tickets',
|
|
12532
13009
|
tickets: 'support-tickets'
|
|
12533
13010
|
};
|
|
13011
|
+
var AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES = [
|
|
13012
|
+
'work-order-dynamics',
|
|
13013
|
+
'work-orders',
|
|
13014
|
+
'deliveries',
|
|
13015
|
+
'jobs',
|
|
13016
|
+
'treatments',
|
|
13017
|
+
'treatment-plans',
|
|
13018
|
+
'assets',
|
|
13019
|
+
'orders'
|
|
13020
|
+
];
|
|
13021
|
+
var AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES = [
|
|
13022
|
+
'treatments',
|
|
13023
|
+
'treatment-plans',
|
|
13024
|
+
'work-order-dynamics',
|
|
13025
|
+
'work-orders',
|
|
13026
|
+
'jobs',
|
|
13027
|
+
'assets',
|
|
13028
|
+
'orders'
|
|
13029
|
+
];
|
|
13030
|
+
var AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES = [
|
|
13031
|
+
'assets',
|
|
13032
|
+
'equipment',
|
|
13033
|
+
'trailers',
|
|
13034
|
+
'trucks',
|
|
13035
|
+
'isotanks',
|
|
13036
|
+
'tanks',
|
|
13037
|
+
'work-order-dynamics',
|
|
13038
|
+
'work-orders',
|
|
13039
|
+
'jobs'
|
|
13040
|
+
];
|
|
13041
|
+
var AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES = [
|
|
13042
|
+
'chemicals',
|
|
13043
|
+
'products',
|
|
13044
|
+
'items',
|
|
13045
|
+
'inventory',
|
|
13046
|
+
'blends',
|
|
13047
|
+
'orders'
|
|
13048
|
+
];
|
|
13049
|
+
var AI_ASSISTANT_PURCHASE_COLLECTION_ALIAS_CANDIDATES = [
|
|
13050
|
+
'orders',
|
|
13051
|
+
'purchase-orders'
|
|
13052
|
+
];
|
|
13053
|
+
var AI_ASSISTANT_BRIDGE_COLLECTION_ALIAS_OPTIONS = {
|
|
13054
|
+
delivery: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13055
|
+
deliveries: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13056
|
+
bol: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13057
|
+
bols: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13058
|
+
billoflading: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13059
|
+
billsoflading: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13060
|
+
pso: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13061
|
+
psos: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13062
|
+
productionsalesorder: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13063
|
+
productionsalesorders: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13064
|
+
salesorder: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13065
|
+
salesorders: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13066
|
+
trucktreat: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13067
|
+
trucktreating: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13068
|
+
treatertruck: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13069
|
+
batchtreat: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13070
|
+
batchtreating: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13071
|
+
batchjob: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13072
|
+
batchjobs: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13073
|
+
specialtyjob: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13074
|
+
specialtyjobs: AI_ASSISTANT_DELIVERY_COLLECTION_ALIAS_CANDIDATES,
|
|
13075
|
+
continuous: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13076
|
+
ats: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13077
|
+
automatedtreatmentsystem: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13078
|
+
treatmentplan: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13079
|
+
treatmentplans: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13080
|
+
treatment: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13081
|
+
treatments: AI_ASSISTANT_TREATMENT_COLLECTION_ALIAS_CANDIDATES,
|
|
13082
|
+
asset: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13083
|
+
assets: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13084
|
+
isotank: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13085
|
+
isotanks: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13086
|
+
chemicaltrailer: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13087
|
+
chemicaltrailers: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13088
|
+
vactruck: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13089
|
+
vactrucks: AI_ASSISTANT_ASSET_COLLECTION_ALIAS_CANDIDATES,
|
|
13090
|
+
chemical: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13091
|
+
chemicals: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13092
|
+
product: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13093
|
+
products: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13094
|
+
item: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13095
|
+
items: AI_ASSISTANT_CHEMICAL_COLLECTION_ALIAS_CANDIDATES,
|
|
13096
|
+
po: AI_ASSISTANT_PURCHASE_COLLECTION_ALIAS_CANDIDATES,
|
|
13097
|
+
pos: AI_ASSISTANT_PURCHASE_COLLECTION_ALIAS_CANDIDATES,
|
|
13098
|
+
purchaseorder: AI_ASSISTANT_PURCHASE_COLLECTION_ALIAS_CANDIDATES,
|
|
13099
|
+
purchaseorders: AI_ASSISTANT_PURCHASE_COLLECTION_ALIAS_CANDIDATES
|
|
13100
|
+
};
|
|
12534
13101
|
var AI_ASSISTANT_DIRECT_COLLECTION_FALLBACK_ALLOWLIST = new Set([]);
|
|
12535
13102
|
var AI_ASSISTANT_SUPPORT_COLLECTION_FALLBACKS = [
|
|
12536
13103
|
'support-tickets',
|
|
@@ -12597,9 +13164,8 @@ function resolveAssistantCrossCollectionFallbackCandidates(collection) {
|
|
|
12597
13164
|
}
|
|
12598
13165
|
candidates.add(candidate);
|
|
12599
13166
|
};
|
|
12600
|
-
var
|
|
12601
|
-
|
|
12602
|
-
addCandidate(alias);
|
|
13167
|
+
var aliasCandidates = mergeAssistantHintValues(resolveAssistantBridgeCollectionAliasCandidates(normalized), resolveAssistantBridgeCollectionAliasCandidates(normalizeCollectionKey(normalized)));
|
|
13168
|
+
aliasCandidates.forEach(addCandidate);
|
|
12603
13169
|
if (AI_ASSISTANT_SUPPORT_COLLECTION_FALLBACKS.includes(normalized)
|
|
12604
13170
|
|| normalized.includes('ticket')
|
|
12605
13171
|
|| normalized.includes('support')) {
|
|
@@ -12916,10 +13482,7 @@ function resolveAssistantNestedPrefixCollectionCandidates(params) {
|
|
|
12916
13482
|
}
|
|
12917
13483
|
candidates.push(preferred);
|
|
12918
13484
|
};
|
|
12919
|
-
|
|
12920
|
-
if (alias) {
|
|
12921
|
-
push(alias);
|
|
12922
|
-
}
|
|
13485
|
+
resolveAssistantBridgeCollectionAliasCandidates(normalizedPrefix).forEach(push);
|
|
12923
13486
|
push(normalizedPrefix);
|
|
12924
13487
|
resolveAssistantAvailableCrossCollectionFallbacksFromNames(normalizedPrefix, params.triedCollections, params.collectionNames).forEach(push);
|
|
12925
13488
|
var tokenizedPrefix = tokenizeCollectionText(normalizedPrefix);
|
|
@@ -13007,9 +13570,25 @@ function resolveAssistantNestedAggregateFallbacks(params) {
|
|
|
13007
13570
|
});
|
|
13008
13571
|
});
|
|
13009
13572
|
}
|
|
13010
|
-
function
|
|
13573
|
+
function resolveAssistantBridgeCollectionAliasCandidates(value) {
|
|
13011
13574
|
var key = normalizeCollectionKey(value);
|
|
13012
|
-
|
|
13575
|
+
if (!key) {
|
|
13576
|
+
return [];
|
|
13577
|
+
}
|
|
13578
|
+
var candidates = [];
|
|
13579
|
+
var push = function (candidate) {
|
|
13580
|
+
var normalized = normalizeOptionalString(candidate);
|
|
13581
|
+
if (!normalized || candidates.includes(normalized)) {
|
|
13582
|
+
return;
|
|
13583
|
+
}
|
|
13584
|
+
candidates.push(normalized);
|
|
13585
|
+
};
|
|
13586
|
+
var aliasOptions = AI_ASSISTANT_BRIDGE_COLLECTION_ALIAS_OPTIONS[key];
|
|
13587
|
+
if (Array.isArray(aliasOptions)) {
|
|
13588
|
+
aliasOptions.forEach(push);
|
|
13589
|
+
}
|
|
13590
|
+
push(AI_ASSISTANT_BRIDGE_COLLECTION_ALIASES[key]);
|
|
13591
|
+
return candidates;
|
|
13013
13592
|
}
|
|
13014
13593
|
function isAssistantDirectCollectionFallbackAllowed(collection) {
|
|
13015
13594
|
var normalized = normalizeOptionalString(collection);
|
|
@@ -13046,7 +13625,7 @@ function doesAssistantCollectionExistInDb(db, collection) {
|
|
|
13046
13625
|
}
|
|
13047
13626
|
function resolveAssistantReportBuilderBridgeCollection(collection_1, db_1) {
|
|
13048
13627
|
return __awaiter(this, arguments, void 0, function (collection, db, dbName) {
|
|
13049
|
-
var normalized, alias, manager, hasManager, candidates, pushCandidate, base, reportCandidate, candidates_5, candidates_5_1, candidate, model, resolved, resolvedName, resolvedModel, _a, candidates_6, candidates_6_1, candidate, e_34_1, candidates_7, candidates_7_1, candidate;
|
|
13628
|
+
var normalized, aliasCandidates, alias, manager, hasManager, candidates, pushCandidate, base, reportCandidate, candidates_5, candidates_5_1, candidate, model, resolved, resolvedName, resolvedModel, _a, candidates_6, candidates_6_1, candidate, e_34_1, candidates_7, candidates_7_1, candidate;
|
|
13050
13629
|
var e_35, _b, e_34, _c, e_36, _d;
|
|
13051
13630
|
var _e;
|
|
13052
13631
|
if (dbName === void 0) { dbName = ''; }
|
|
@@ -13057,7 +13636,8 @@ function resolveAssistantReportBuilderBridgeCollection(collection_1, db_1) {
|
|
|
13057
13636
|
if (!normalized) {
|
|
13058
13637
|
throw new Error('AI assistant report builder bridge: Collection is required.');
|
|
13059
13638
|
}
|
|
13060
|
-
|
|
13639
|
+
aliasCandidates = resolveAssistantBridgeCollectionAliasCandidates(normalized);
|
|
13640
|
+
alias = aliasCandidates[0] || '';
|
|
13061
13641
|
manager = (_e = resolveio_server_app_1.ResolveIOServer.getMongoManager) === null || _e === void 0 ? void 0 : _e.call(resolveio_server_app_1.ResolveIOServer);
|
|
13062
13642
|
hasManager = !!(manager && typeof manager.collection === 'function');
|
|
13063
13643
|
candidates = [];
|
|
@@ -13069,9 +13649,7 @@ function resolveAssistantReportBuilderBridgeCollection(collection_1, db_1) {
|
|
|
13069
13649
|
candidates.push(value);
|
|
13070
13650
|
};
|
|
13071
13651
|
pushCandidate(normalized);
|
|
13072
|
-
|
|
13073
|
-
pushCandidate(alias);
|
|
13074
|
-
}
|
|
13652
|
+
aliasCandidates.forEach(pushCandidate);
|
|
13075
13653
|
base = stripVersionSuffix(normalized.startsWith('report-') ? normalized.slice('report-'.length) : normalized);
|
|
13076
13654
|
if (base && base !== normalized) {
|
|
13077
13655
|
pushCandidate(base);
|
|
@@ -14214,6 +14792,8 @@ function buildAssistantWorkspaceRootCandidates(params) {
|
|
|
14214
14792
|
var pathCandidates = [
|
|
14215
14793
|
serverConfig['AI_ASSISTANT_WORKSPACE_ROOT'],
|
|
14216
14794
|
env['AI_ASSISTANT_WORKSPACE_ROOT'],
|
|
14795
|
+
serverConfig['AI_ASSISTANT_ROOT_WORKSPACE'],
|
|
14796
|
+
env['AI_ASSISTANT_ROOT_WORKSPACE'],
|
|
14217
14797
|
serverConfig['AI_TERMINAL_WORKSPACE_ROOT'],
|
|
14218
14798
|
env['AI_TERMINAL_WORKSPACE_ROOT'],
|
|
14219
14799
|
serverConfig['AI_DASHBOARD_WORKSPACE_ROOT'],
|
|
@@ -15764,16 +16344,16 @@ function resolveAssistantChangeModulesFromText(message) {
|
|
|
15764
16344
|
if (/\b(invoice|invoices|invoicing|revenue|billing|payment|payments|paid)\b/i.test(text)) {
|
|
15765
16345
|
push('invoice');
|
|
15766
16346
|
}
|
|
15767
|
-
if (/\b(work[\s-]*order|wo)\b/i.test(text)) {
|
|
16347
|
+
if (/\b(work[\s-]*order|wo)\b/i.test(text) || hasAssistantPurchaseOrderAliasTerms(text)) {
|
|
15768
16348
|
push('work_order');
|
|
15769
16349
|
}
|
|
15770
|
-
if (/\
|
|
16350
|
+
if (/\broute\b/i.test(text) || hasAssistantDeliveryAliasTerms(text)) {
|
|
15771
16351
|
push('delivery');
|
|
15772
16352
|
}
|
|
15773
16353
|
if (/\b(blend|blending)\b/i.test(text)) {
|
|
15774
16354
|
push('blend');
|
|
15775
16355
|
}
|
|
15776
|
-
if (
|
|
16356
|
+
if (hasAssistantChemicalCatalogAliasTerms(text)) {
|
|
15777
16357
|
push('chemical');
|
|
15778
16358
|
}
|
|
15779
16359
|
if (/\b(job|jobs)\b/i.test(text)) {
|
|
@@ -15801,16 +16381,16 @@ function resolveAssistantChangeModulesFromPath(filePath) {
|
|
|
15801
16381
|
if (/\binvoices?\b/.test(normalized)) {
|
|
15802
16382
|
push('invoice');
|
|
15803
16383
|
}
|
|
15804
|
-
if (/\bwork[-_/ ]?order|wo[-_/ ]|orders?\b/.test(normalized)) {
|
|
16384
|
+
if (/\bwork[-_/ ]?order|wo[-_/ ]|orders?\b/.test(normalized) || hasAssistantPurchaseOrderAliasPathTerms(normalized)) {
|
|
15805
16385
|
push('work_order');
|
|
15806
16386
|
}
|
|
15807
|
-
if (
|
|
16387
|
+
if (hasAssistantDeliveryAliasPathTerms(normalized)) {
|
|
15808
16388
|
push('delivery');
|
|
15809
16389
|
}
|
|
15810
16390
|
if (/\bblend\b/.test(normalized)) {
|
|
15811
16391
|
push('blend');
|
|
15812
16392
|
}
|
|
15813
|
-
if (/\
|
|
16393
|
+
if (/\b(chemical|product|item)\b/.test(normalized)) {
|
|
15814
16394
|
push('chemical');
|
|
15815
16395
|
}
|
|
15816
16396
|
if (/\bjobs?\b/.test(normalized)) {
|
|
@@ -15842,13 +16422,13 @@ function userHasAssistantChangeModuleAccess(user, module) {
|
|
|
15842
16422
|
case 'invoice':
|
|
15843
16423
|
return userHasInvoiceAccess(user);
|
|
15844
16424
|
case 'work_order':
|
|
15845
|
-
return userHasViewTokenPermission(user, /work[-_/ ]?order|dispatch|operations|field|delivery|route/i);
|
|
16425
|
+
return userHasViewTokenPermission(user, /work[-_/ ]?order|dispatch|operations|field|delivery|route|bol|pso|sales[-_/ ]?order|purchase[-_/ ]?order|\bpo\b|\bpos\b|continuous|ats|treat(?:ment|ing)|asset/i);
|
|
15846
16426
|
case 'delivery':
|
|
15847
|
-
return userHasViewTokenPermission(user, /delivery|route|dispatch|work[-_/ ]?order/i);
|
|
16427
|
+
return userHasViewTokenPermission(user, /delivery|route|dispatch|work[-_/ ]?order|bol|pso|sales[-_/ ]?order|truck[-_/ ]?treat(?:ing)?|treater|specialty|batch[-_/ ]?(?:treat(?:ing)?|job)|continuous|ats|automated[-_/ ]?treatment[-_/ ]?system|isotank|chemical[-_/ ]?trailer|vac[-_/ ]?truck|asset|treatment[-_/ ]?plan|treatments?/i);
|
|
15848
16428
|
case 'blend':
|
|
15849
16429
|
return userHasViewTokenPermission(user, /blend|chemical|mix/i);
|
|
15850
16430
|
case 'chemical':
|
|
15851
|
-
return userHasViewTokenPermission(user, /chemical|blend/i);
|
|
16431
|
+
return userHasViewTokenPermission(user, /chemical|blend|product|item|inventory/i);
|
|
15852
16432
|
case 'job':
|
|
15853
16433
|
return userHasViewTokenPermission(user, /job|work[-_/ ]?order/i);
|
|
15854
16434
|
case 'portal':
|