@resolveio/server-lib 20.15.0 → 20.15.2

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.
@@ -9,6 +9,7 @@ export type AiAssistantMongoReadInput = {
9
9
  skip?: number;
10
10
  includeTotal?: boolean;
11
11
  includeIds?: boolean;
12
+ export?: boolean;
12
13
  };
13
14
  permissionView?: string;
14
15
  id_client?: string;
@@ -29,6 +30,7 @@ export type AiAssistantMongoAggregateInput = {
29
30
  maxTimeMS?: number;
30
31
  limit?: number;
31
32
  includeIds?: boolean;
33
+ export?: boolean;
32
34
  };
33
35
  permissionView?: string;
34
36
  id_client?: string;
@@ -137,6 +137,7 @@ var DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';
137
137
  var DEFAULT_CODEX_TIMEOUT_MS = 180000;
138
138
  var AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;
139
139
  var AI_ASSISTANT_MONGO_MAX_LIMIT = 200;
140
+ var AI_ASSISTANT_MONGO_EXPORT_MAX_LIMIT = 5000;
140
141
  var AI_ASSISTANT_TOOL_MAX_STEPS = 1;
141
142
  var AI_ASSISTANT_DISPLAY_MAX_COLUMNS = 12;
142
143
  var AI_ASSISTANT_DISPLAY_PREVIEW_MAX_ROWS = 20;
@@ -159,6 +160,8 @@ var AI_ASSISTANT_DISPLAY_PRIORITY_FIELDS = [
159
160
  'updatedAt',
160
161
  'date_updated',
161
162
  'date_completed',
163
+ 'date_invoice',
164
+ 'date_invoiced',
162
165
  'id_customer',
163
166
  'id_client',
164
167
  'id_user',
@@ -166,7 +169,9 @@ var AI_ASSISTANT_DISPLAY_PRIORITY_FIELDS = [
166
169
  ];
167
170
  var AI_ASSISTANT_DATE_FALLBACKS = {
168
171
  date_created: 'createdAt',
169
- createdAt: 'date_created'
172
+ createdAt: 'date_created',
173
+ date_invoice: 'date_invoiced',
174
+ date_invoiced: 'date_invoice'
170
175
  };
171
176
  var AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([
172
177
  'user-groups',
@@ -890,7 +895,7 @@ function executeAiAssistantCodexRun(payload, context) {
890
895
  workingDirectory: workspaceRoot,
891
896
  sandboxMode: 'read-only',
892
897
  skipGitRepoCheck: true,
893
- modelReasoningEffort: 'low',
898
+ modelReasoningEffort: 'medium',
894
899
  networkAccessEnabled: false,
895
900
  webSearchMode: 'disabled',
896
901
  webSearchEnabled: false,
@@ -1100,7 +1105,7 @@ function executeAiAssistantMongoRead(payload, context) {
1100
1105
  }
1101
1106
  function executeAiAssistantMongoAggregate(payload, context) {
1102
1107
  return __awaiter(this, void 0, void 0, function () {
1103
- var input, collection, _a, user, isSuperAdmin, customerId, dbName, db, baseQuery, userId, normalizedClient, shouldScopeByClient, _b, clientScopedQuery, scopedQuery, normalizedPipeline, pipelineWithScope, normalizedOptions, limitedPipeline, documents, executedPipeline, fallbackMeta, fallback, fallbackPipeline, fallbackDocs, unwindFallback, fallbackPipeline, fallbackDocs, sanitizedDocuments, includeIds, display;
1108
+ var input, collection, _a, user, isSuperAdmin, customerId, dbName, db, baseQuery, userId, normalizedClient, shouldScopeByClient, _b, clientScopedQuery, scopedQuery, normalizedPipeline, pipelineWithScope, normalizedOptions, limitedPipeline, dateField, documents, executedPipeline, fallbackMeta, fallback, fallbackPipeline, fallbackDocs, createdFallback, createdPipeline, createdDocs, unwindFallback, fallbackPipeline, fallbackDocs, sanitizedDocuments, includeIds, display;
1104
1109
  var _c, _d;
1105
1110
  return __generator(this, function (_e) {
1106
1111
  switch (_e.label) {
@@ -1147,7 +1152,8 @@ function executeAiAssistantMongoAggregate(payload, context) {
1147
1152
  normalizedPipeline = normalizeAssistantAggregatePipeline(input.pipeline);
1148
1153
  pipelineWithScope = buildAssistantAggregatePipeline(scopedQuery, normalizedPipeline);
1149
1154
  normalizedOptions = normalizeAssistantAggregateOptions(input.options);
1150
- limitedPipeline = applyAssistantAggregateLimit(pipelineWithScope, normalizedOptions.limit);
1155
+ limitedPipeline = applyAssistantAggregateLimit(pipelineWithScope, normalizedOptions.limit, normalizedOptions.maxLimit, normalizedOptions.defaultLimit);
1156
+ dateField = findAggregateDateField(limitedPipeline);
1151
1157
  if (containsForbiddenMongoOperators(limitedPipeline)) {
1152
1158
  throw new Error('AI assistant mongo aggregate: Pipeline contains restricted operators.');
1153
1159
  }
@@ -1158,7 +1164,7 @@ function executeAiAssistantMongoAggregate(payload, context) {
1158
1164
  documents = _e.sent();
1159
1165
  executedPipeline = limitedPipeline;
1160
1166
  fallbackMeta = {};
1161
- if (!!documents.length) return [3 /*break*/, 7];
1167
+ if (!(!documents.length && dateField)) return [3 /*break*/, 9];
1162
1168
  fallback = resolveAggregateDateFieldFallback(limitedPipeline);
1163
1169
  if (!fallback) return [3 /*break*/, 7];
1164
1170
  fallbackMeta.dateField = __assign(__assign({}, fallback), { attempted: true, used: false });
@@ -1176,24 +1182,41 @@ function executeAiAssistantMongoAggregate(payload, context) {
1176
1182
  }
1177
1183
  _e.label = 7;
1178
1184
  case 7:
1179
- if (!(documents.length <= 1)) return [3 /*break*/, 9];
1185
+ if (!(!documents.length && dateField !== 'createdAt')) return [3 /*break*/, 9];
1186
+ createdFallback = { from: dateField, to: 'createdAt', attempted: true, used: false };
1187
+ createdPipeline = replaceAggregateDateField(limitedPipeline, dateField, 'createdAt');
1188
+ fallbackMeta.dateFieldCreatedAt = createdFallback;
1189
+ if (!!containsForbiddenMongoOperators(createdPipeline)) return [3 /*break*/, 9];
1190
+ return [4 /*yield*/, db.collection(collection)
1191
+ .aggregate(createdPipeline, normalizedOptions.aggregateOptions)
1192
+ .toArray()];
1193
+ case 8:
1194
+ createdDocs = _e.sent();
1195
+ if (createdDocs.length) {
1196
+ documents = createdDocs;
1197
+ executedPipeline = createdPipeline;
1198
+ fallbackMeta.dateFieldCreatedAt.used = true;
1199
+ }
1200
+ _e.label = 9;
1201
+ case 9:
1202
+ if (!(documents.length <= 1)) return [3 /*break*/, 11];
1180
1203
  unwindFallback = resolveAggregateUnwindFallback(executedPipeline);
1181
- if (!unwindFallback) return [3 /*break*/, 9];
1204
+ if (!unwindFallback) return [3 /*break*/, 11];
1182
1205
  fallbackMeta.unwind = { path: unwindFallback.path, attempted: true, used: false };
1183
1206
  fallbackPipeline = buildAggregateUnwindFallbackPipeline(executedPipeline, unwindFallback);
1184
- if (!!containsForbiddenMongoOperators(fallbackPipeline)) return [3 /*break*/, 9];
1207
+ if (!!containsForbiddenMongoOperators(fallbackPipeline)) return [3 /*break*/, 11];
1185
1208
  return [4 /*yield*/, db.collection(collection)
1186
1209
  .aggregate(fallbackPipeline, normalizedOptions.aggregateOptions)
1187
1210
  .toArray()];
1188
- case 8:
1211
+ case 10:
1189
1212
  fallbackDocs = _e.sent();
1190
1213
  if (fallbackDocs.length > documents.length) {
1191
1214
  documents = fallbackDocs;
1192
1215
  executedPipeline = fallbackPipeline;
1193
1216
  fallbackMeta.unwind.used = true;
1194
1217
  }
1195
- _e.label = 9;
1196
- case 9:
1218
+ _e.label = 11;
1219
+ case 11:
1197
1220
  sanitizedDocuments = isSuperAdmin
1198
1221
  ? documents
1199
1222
  : documents.map(function (doc) { return redactSensitiveFields((0, common_1.deepCopy)(doc)); });
@@ -1933,11 +1956,14 @@ function resolveAssistantDatabaseName(database, mongoConfig) {
1933
1956
  }
1934
1957
  function normalizeAssistantFindOptions(options) {
1935
1958
  var normalized = options || {};
1959
+ var exportMode = normalized.export === true;
1960
+ var maxLimit = exportMode ? AI_ASSISTANT_MONGO_EXPORT_MAX_LIMIT : AI_ASSISTANT_MONGO_MAX_LIMIT;
1961
+ var defaultLimit = exportMode ? AI_ASSISTANT_MONGO_EXPORT_MAX_LIMIT : AI_ASSISTANT_MONGO_DEFAULT_LIMIT;
1936
1962
  var projection = sanitizeAssistantProjection(normalized.projection);
1937
1963
  var sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;
1938
1964
  var limit = typeof normalized.limit === 'number'
1939
- ? Math.min(Math.max(normalized.limit, 0), AI_ASSISTANT_MONGO_MAX_LIMIT)
1940
- : AI_ASSISTANT_MONGO_DEFAULT_LIMIT;
1965
+ ? Math.min(Math.max(normalized.limit, 0), maxLimit)
1966
+ : defaultLimit;
1941
1967
  var skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;
1942
1968
  return {
1943
1969
  findOptions: {
@@ -1998,13 +2024,16 @@ function buildAssistantAggregatePipeline(query, pipeline) {
1998
2024
  }
1999
2025
  function normalizeAssistantAggregateOptions(options) {
2000
2026
  var normalized = options || {};
2027
+ var exportMode = normalized.export === true;
2028
+ var maxLimit = exportMode ? AI_ASSISTANT_MONGO_EXPORT_MAX_LIMIT : AI_ASSISTANT_MONGO_MAX_LIMIT;
2029
+ var defaultLimit = exportMode ? AI_ASSISTANT_MONGO_EXPORT_MAX_LIMIT : AI_ASSISTANT_MONGO_DEFAULT_LIMIT;
2001
2030
  var allowDiskUse = normalized.allowDiskUse === true ? true : undefined;
2002
2031
  var maxTimeMS = typeof normalized.maxTimeMS === 'number' && normalized.maxTimeMS > 0
2003
2032
  ? (0, common_1.round)(normalized.maxTimeMS)
2004
2033
  : undefined;
2005
2034
  var limit = typeof normalized.limit === 'number'
2006
- ? Math.min(Math.max((0, common_1.round)(normalized.limit), 0), AI_ASSISTANT_MONGO_MAX_LIMIT)
2007
- : undefined;
2035
+ ? Math.min(Math.max((0, common_1.round)(normalized.limit), 0), maxLimit)
2036
+ : defaultLimit;
2008
2037
  var aggregateOptions = {};
2009
2038
  if (allowDiskUse !== undefined) {
2010
2039
  aggregateOptions.allowDiskUse = allowDiskUse;
@@ -2014,7 +2043,9 @@ function normalizeAssistantAggregateOptions(options) {
2014
2043
  }
2015
2044
  return {
2016
2045
  aggregateOptions: aggregateOptions,
2017
- limit: limit
2046
+ limit: limit,
2047
+ maxLimit: maxLimit,
2048
+ defaultLimit: defaultLimit
2018
2049
  };
2019
2050
  }
2020
2051
  function findAggregateLimit(pipeline) {
@@ -2030,12 +2061,13 @@ function findAggregateLimit(pipeline) {
2030
2061
  }
2031
2062
  return null;
2032
2063
  }
2033
- function applyAssistantAggregateLimit(pipeline, limit) {
2064
+ function applyAssistantAggregateLimit(pipeline, limit, maxLimit, defaultLimit) {
2065
+ if (maxLimit === void 0) { maxLimit = AI_ASSISTANT_MONGO_MAX_LIMIT; }
2066
+ if (defaultLimit === void 0) { defaultLimit = AI_ASSISTANT_MONGO_DEFAULT_LIMIT; }
2034
2067
  var normalizedPipeline = Array.isArray(pipeline) ? __spreadArray([], __read(pipeline), false) : [];
2035
- var maxLimit = AI_ASSISTANT_MONGO_MAX_LIMIT;
2036
2068
  var requestedLimit = typeof limit === 'number' && limit > 0
2037
2069
  ? Math.min(limit, maxLimit)
2038
- : AI_ASSISTANT_MONGO_DEFAULT_LIMIT;
2070
+ : defaultLimit;
2039
2071
  var existingLimit = findAggregateLimit(normalizedPipeline);
2040
2072
  if (existingLimit === null) {
2041
2073
  normalizedPipeline.push({ $limit: requestedLimit });