@resolveio/server-lib 20.14.29 → 20.14.30

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.
@@ -125,6 +125,10 @@ var DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';
125
125
  var DEFAULT_CODEX_TIMEOUT_MS = 180000;
126
126
  var AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;
127
127
  var AI_ASSISTANT_MONGO_MAX_LIMIT = 200;
128
+ var AI_ASSISTANT_DATE_FALLBACKS = {
129
+ date_created: 'createdAt',
130
+ createdAt: 'date_created'
131
+ };
128
132
  var AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([
129
133
  'user-groups',
130
134
  'logged-in-users',
@@ -192,6 +196,7 @@ var AI_ASSISTANT_SYSTEM_PROMPT = [
192
196
  '- If the user lacks permission, answer without data and explain how to view it in the app or request access.',
193
197
  '- For simple counts or time-range totals, use MONGO_READ (includeTotal). For breakdowns, rankings, or sums grouped by a field, use MONGO_AGG.',
194
198
  '- Before issuing MONGO_READ or MONGO_AGG, verify the collection name and key fields by checking collection/model definitions in the current app (look for "collectionName:" and date fields like date_created/date_completed/createdAt). Do not invent collection names.',
199
+ '- For creation-date questions when both date_created and createdAt exist, match both with $or so results are not missed.',
195
200
  '- Use MONGO_READ/MONGO_AGG only to produce summaries/snapshots/health checks (not raw dumps) when permitted.',
196
201
  '- When referencing data, summarize it in bullets and avoid raw JSON or dumps.',
197
202
  '- Keep responses concise and use low reasoning effort.'
@@ -223,7 +228,7 @@ function loadAiTerminalMethods(methodManager) {
223
228
  case 0:
224
229
  now = new Date();
225
230
  doc = {
226
- id_client: normalizeOptionalString(payload.id_client),
231
+ id_client: resolveClientIdFromConfig(payload.id_client),
227
232
  id_app: normalizeOptionalString(payload.id_app),
228
233
  title: normalizeOptionalString(payload.title) || 'New Conversation',
229
234
  mode: normalizeConversationMode(payload.mode),
@@ -698,7 +703,7 @@ function executeAiFormPatch(payload, context) {
698
703
  case 1:
699
704
  response = _b.sent();
700
705
  usage = response.usage || estimateUsage(messages, response.content, response.model || openaiSettings.model);
701
- idClient = normalizeOptionalString(input.id_client);
706
+ idClient = resolveClientIdFromConfig(input.id_client);
702
707
  if (!idClient) return [3 /*break*/, 3];
703
708
  return [4 /*yield*/, (0, openai_usage_ledger_manager_1.recordOpenAIUsage)({
704
709
  id_client: idClient,
@@ -948,7 +953,7 @@ function executeAiAssistantMongoRead(payload, context) {
948
953
  }
949
954
  function executeAiAssistantMongoAggregate(payload, context) {
950
955
  return __awaiter(this, void 0, void 0, function () {
951
- var input, collection, _a, user, isSuperAdmin, customerId, dbName, db, baseQuery, userId, normalizedClient, shouldScopeByClient, _b, clientScopedQuery, scopedQuery, normalizedPipeline, pipelineWithScope, normalizedOptions, limitedPipeline, documents, sanitizedDocuments;
956
+ var input, collection, _a, user, isSuperAdmin, customerId, dbName, db, baseQuery, userId, normalizedClient, shouldScopeByClient, _b, clientScopedQuery, scopedQuery, normalizedPipeline, pipelineWithScope, normalizedOptions, limitedPipeline, documents, fallback, fallbackPipeline, fallbackDocs, sanitizedDocuments;
952
957
  var _c;
953
958
  return __generator(this, function (_d) {
954
959
  switch (_d.label) {
@@ -1004,6 +1009,21 @@ function executeAiAssistantMongoAggregate(payload, context) {
1004
1009
  .toArray()];
1005
1010
  case 5:
1006
1011
  documents = _d.sent();
1012
+ if (!!documents.length) return [3 /*break*/, 7];
1013
+ fallback = resolveAggregateDateFieldFallback(limitedPipeline);
1014
+ if (!fallback) return [3 /*break*/, 7];
1015
+ fallbackPipeline = replaceAggregateDateField(limitedPipeline, fallback.from, fallback.to);
1016
+ if (!!containsForbiddenMongoOperators(fallbackPipeline)) return [3 /*break*/, 7];
1017
+ return [4 /*yield*/, db.collection(collection)
1018
+ .aggregate(fallbackPipeline, normalizedOptions.aggregateOptions)
1019
+ .toArray()];
1020
+ case 6:
1021
+ fallbackDocs = _d.sent();
1022
+ if (fallbackDocs.length) {
1023
+ documents = fallbackDocs;
1024
+ }
1025
+ _d.label = 7;
1026
+ case 7:
1007
1027
  sanitizedDocuments = isSuperAdmin
1008
1028
  ? documents
1009
1029
  : documents.map(function (doc) { return redactSensitiveFields((0, common_1.deepCopy)(doc)); });
@@ -1160,6 +1180,92 @@ function applyAssistantAggregateLimit(pipeline, limit) {
1160
1180
  }
1161
1181
  return normalizedPipeline;
1162
1182
  }
1183
+ function resolveAggregateDateFieldFallback(pipeline) {
1184
+ var dateField = findAggregateDateField(pipeline);
1185
+ if (!dateField) {
1186
+ return null;
1187
+ }
1188
+ var fallback = AI_ASSISTANT_DATE_FALLBACKS[dateField];
1189
+ if (!fallback) {
1190
+ return null;
1191
+ }
1192
+ return { from: dateField, to: fallback };
1193
+ }
1194
+ function findAggregateDateField(pipeline) {
1195
+ var fields = new Set();
1196
+ (pipeline || []).forEach(function (stage) {
1197
+ if (!stage || typeof stage !== 'object') {
1198
+ return;
1199
+ }
1200
+ if (stage.$match && typeof stage.$match === 'object') {
1201
+ collectDateFieldsFromMatch(stage.$match, fields);
1202
+ }
1203
+ });
1204
+ if (fields.size !== 1) {
1205
+ return null;
1206
+ }
1207
+ return Array.from(fields)[0];
1208
+ }
1209
+ function collectDateFieldsFromMatch(value, fields) {
1210
+ if (!value || typeof value !== 'object') {
1211
+ return;
1212
+ }
1213
+ if (Array.isArray(value)) {
1214
+ value.forEach(function (entry) { return collectDateFieldsFromMatch(entry, fields); });
1215
+ return;
1216
+ }
1217
+ Object.keys(value).forEach(function (key) {
1218
+ var entry = value[key];
1219
+ if (Object.prototype.hasOwnProperty.call(AI_ASSISTANT_DATE_FALLBACKS, key)) {
1220
+ if (hasDateRangeOperators(entry) || entry instanceof Date) {
1221
+ fields.add(key);
1222
+ }
1223
+ return;
1224
+ }
1225
+ if (key.startsWith('$')) {
1226
+ collectDateFieldsFromMatch(entry, fields);
1227
+ return;
1228
+ }
1229
+ if (entry && typeof entry === 'object') {
1230
+ collectDateFieldsFromMatch(entry, fields);
1231
+ }
1232
+ });
1233
+ }
1234
+ function hasDateRangeOperators(value) {
1235
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
1236
+ return false;
1237
+ }
1238
+ return Object.prototype.hasOwnProperty.call(value, '$gte')
1239
+ || Object.prototype.hasOwnProperty.call(value, '$gt')
1240
+ || Object.prototype.hasOwnProperty.call(value, '$lte')
1241
+ || Object.prototype.hasOwnProperty.call(value, '$lt');
1242
+ }
1243
+ function replaceAggregateDateField(pipeline, fromField, toField) {
1244
+ var replacer = function (value) {
1245
+ if (Array.isArray(value)) {
1246
+ return value.map(function (entry) { return replacer(entry); });
1247
+ }
1248
+ if (value instanceof Date) {
1249
+ return value;
1250
+ }
1251
+ if (value && typeof value === 'object') {
1252
+ var next_1 = {};
1253
+ Object.keys(value).forEach(function (key) {
1254
+ var nextKey = key === fromField ? toField : key;
1255
+ next_1[nextKey] = replacer(value[key]);
1256
+ });
1257
+ return next_1;
1258
+ }
1259
+ if (typeof value === 'string') {
1260
+ if (value.startsWith("$".concat(fromField))) {
1261
+ return "$".concat(toField).concat(value.slice(fromField.length + 1));
1262
+ }
1263
+ return value;
1264
+ }
1265
+ return value;
1266
+ };
1267
+ return replacer(pipeline);
1268
+ }
1163
1269
  function normalizeMongoQuery(query) {
1164
1270
  var normalized = query && typeof query === 'object' ? query : {};
1165
1271
  if (containsForbiddenMongoOperators(normalized)) {
@@ -1821,6 +1927,10 @@ function sanitizeAssistantResponse(value) {
1821
1927
  }
1822
1928
  var withoutBlocks = raw.replace(/```[\\s\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();
1823
1929
  var stripEstimated = function (line) { return line.replace(/\bEstimated (human )?hours:\s*.*$/i, '').trimEnd(); };
1930
+ var isTentativeQueryLine = function (line) {
1931
+ var normalized = line.trim().replace(/^[-*•]+\s*/, '');
1932
+ return /^i\s+(can|will|['’]ll|am going to|['’]m going to)\s+(pull|run|query|get|fetch|look up|retrieve|grab)\b/i.test(normalized);
1933
+ };
1824
1934
  var cleanedLines = [];
1825
1935
  withoutBlocks.split('\n').forEach(function (line) {
1826
1936
  var trimmed = line.trim();
@@ -1828,6 +1938,9 @@ function sanitizeAssistantResponse(value) {
1828
1938
  cleanedLines.push(line);
1829
1939
  return;
1830
1940
  }
1941
+ if (isTentativeQueryLine(line)) {
1942
+ return;
1943
+ }
1831
1944
  if (/^work ticket summary:/i.test(trimmed)) {
1832
1945
  return;
1833
1946
  }
@@ -2206,6 +2319,12 @@ function sanitizeConfig(source) {
2206
2319
  max_tokens: normalizeOptionalNumber(source === null || source === void 0 ? void 0 : source.max_tokens)
2207
2320
  };
2208
2321
  }
2322
+ function resolveClientIdFromConfig(explicit) {
2323
+ var _a;
2324
+ var config = ((_a = resolveio_server_app_1.ResolveIOServer.getServerConfig) === null || _a === void 0 ? void 0 : _a.call(resolveio_server_app_1.ResolveIOServer)) || {};
2325
+ return normalizeOptionalString(explicit)
2326
+ || normalizeOptionalString(config['CLIENT_ID'] || config['client_id'] || process.env.CLIENT_ID || '');
2327
+ }
2209
2328
  function ensureConversation(input, mode) {
2210
2329
  return __awaiter(this, void 0, void 0, function () {
2211
2330
  var idConversation, existing, now, doc, result;
@@ -2224,7 +2343,7 @@ function ensureConversation(input, mode) {
2224
2343
  case 2:
2225
2344
  now = new Date();
2226
2345
  doc = {
2227
- id_client: normalizeOptionalString(input.id_client),
2346
+ id_client: resolveClientIdFromConfig(input.id_client),
2228
2347
  id_app: normalizeOptionalString(input.id_app),
2229
2348
  title: 'New Conversation',
2230
2349
  mode: mode,
@@ -2310,7 +2429,9 @@ function normalizeHistoryLimit(value) {
2310
2429
  return Math.min(Math.max((0, common_1.round)(parsed), 0), 30);
2311
2430
  }
2312
2431
  function resolveClientId(conversation, inputClientId) {
2313
- return normalizeOptionalString(inputClientId) || normalizeOptionalString(conversation === null || conversation === void 0 ? void 0 : conversation.id_client);
2432
+ return normalizeOptionalString(inputClientId)
2433
+ || normalizeOptionalString(conversation === null || conversation === void 0 ? void 0 : conversation.id_client)
2434
+ || resolveClientIdFromConfig();
2314
2435
  }
2315
2436
  function estimateUsage(messages, responseText, model) {
2316
2437
  var inputTokens = (0, tokenizer_1.countChatTokens)(messages, model);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/methods/ai-terminal.ts"],"names":[],"mappings":"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","file":"ai-terminal.js","sourcesContent":["import { promises as fs } from 'fs';\nimport { once } from 'events';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { setTimeout as sleepTimeout } from 'timers/promises';\nimport { Worker } from 'worker_threads';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { AiTerminalConversations } from '../collections/ai-terminal-conversation.collection';\nimport { AiTerminalMessages } from '../collections/ai-terminal-message.collection';\nimport { AiTerminalConversationModel, AiTerminalConversationStatus, AiTerminalMode } from '../models/ai-terminal-conversation.model';\nimport { AiTerminalMessageModel } from '../models/ai-terminal-message.model';\nimport { deepCopy, objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\nimport { OpenAIClient } from '../services/openai-client';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\nimport { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\n\nconst DEFAULT_MAX_FILE_MB = 50;\nconst DEFAULT_MAX_TOTAL_MB = 100;\nconst DEFAULT_MAX_ATTACHMENT_CHARS = 12000;\nconst DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS = 40000;\nconst DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';\nconst DEFAULT_CODEX_TIMEOUT_MS = 180000;\nconst AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;\nconst AI_ASSISTANT_MONGO_MAX_LIMIT = 200;\n\nconst AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([\n\t'user-groups',\n\t'logged-in-users',\n\t'ai-terminal-messages',\n\t'ai-terminal-conversations',\n\t'openai-usage-ledger',\n\t'logs',\n\t'notifications',\n\t'email-history'\n]);\n\nconst AI_ASSISTANT_SENSITIVE_FIELDS = [\n\t'password',\n\t'salt',\n\t'hash',\n\t'secret',\n\t'token',\n\t'api_key',\n\t'email',\n\t'phonenumber',\n\t'phone',\n\t'ssn',\n\t'address',\n\t'services',\n\t'roles'\n];\n\nconst AI_ASSISTANT_CLIENT_SCOPE_CACHE = new Map<string, boolean>();\n\nconst AI_ASSISTANT_SYSTEM_PROMPT = [\n\t'You are the ResolveIO in-app AI assistant running with read-only access to the codebase.',\n\t'- Never share code or file contents. All code is proprietary.',\n\t'- Do not modify files, run destructive commands, or access databases directly.',\n\t'- Read-only Mongo access is allowed only via the MONGO_READ directive (see below).',\n\t'- Do not access secrets, credentials, or user data.',\n\t'- If the user has a customer portal scope (other.id_customer), only discuss that customer\\'s data and what is visible in their customer portal. Never reference other customers or internal/admin-only data. If asked for anything outside the portal, say it isn\\'t available.',\n\t'- Do not assist with hacking, bypassing security, or abuse.',\n\t'- Prefer high-level explanations and point to routes instead of code. Only mention file paths if explicitly requested.',\n\t'- When asked where to do something, give the exact screen name and the in-app route as a standalone path starting with \"/\" so it can be clicked.',\n\t'- When asked \"why is this happening,\" respond with: cause, trigger, data source(s), and expected vs actual outcome.',\n\t'- For troubleshooting, ask clarifying questions only when needed to proceed; otherwise answer directly, then give a short decision tree (If X, do Y; If not, do Z).',\n\t'- Provide checklists for common tasks, highlighting required fields and common pitfalls.',\n\t'- If asked \"where is this set,\" give the screen/workflow name and navigation steps to reach it.',\n\t'- If asked \"what changed,\" summarize release notes if known; if not available, say so and suggest where to check or offer a support ticket.',\n\t'- After answering, optionally suggest 0-1 related next steps only when helpful. Do not ask for \"next steps\" every time.',\n\t'- If access is blocked, name the permission/role needed and how to request it.',\n\t'- Avoid vague labels like \"Operations app\"; use the specific screen/workflow name.',\n\t'- Do not mention other client projects or ask which client; stay within the current project context.',\n\t'- Respond with a single concise message. Do not add labels like \"Customer-facing summary\" or \"Work ticket summary\" and do not include estimated hours.',\n\t'- Use structured responses by default: short heading, then bullet points. For \"how do I\" questions, provide a step-by-step list (numbered) with explicit page/screen names and actions.',\n\t'- When giving steps, include navigation guidance like \"Go to <screen>\" and \"Click/Select/Enter <field>\" so the user can follow it exactly.',\n\t'- If context scope is provided (ex: current page), prioritize that screen in your answer.',\n\t'- If a request is out of scope, offer to create a support ticket with a short summary.',\n\t'- If the user explicitly asks to create/open/file a support ticket, end your response with a single line exactly in this format:',\n\t'- SUPPORT_TICKET_CREATE: <one-line summary>',\n\t'- Only include that line when the user clearly wants a ticket created. Do not claim a ticket is created unless you include that line.',\n\t'- Do not end responses with tentative phrasing like \"I could\" or \"I’m going to.\" Complete the request or state what is required to proceed.',\n\t'- Use the codebase context to choose correct collections/fields/workflows and use MONGO_READ/MONGO_AGG to answer with real data when needed.',\n\t'- For direct questions, answer first. Ask a single follow-up only if required to run a query or resolve missing details.',\n\t'- If you need database data to answer, end your response with a single line exactly in this format:',\n\t'- MONGO_READ: {\"collection\":\"<name>\",\"query\":{...},\"options\":{\"projection\":{...},\"sort\":{...},\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- If you need grouped/aggregated data (totals by user, rankings, trends), end your response with a single line exactly in this format:',\n\t'- MONGO_AGG: {\"collection\":\"<name>\",\"pipeline\":[...],\"options\":{\"allowDiskUse\":true,\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- For invoice data, set permissionView to an invoice route (ex: /invoice/list or /report/invoice).',\n\t'- Keep queries minimal, read-only, and avoid user/credential data unless the user is a super admin.',\n\t'- Assume you are not a super admin unless explicitly told otherwise.',\n\t'- Only request data when the user has permission for that module; invoice data requires invoice view access.',\n\t'- If the user lacks permission, answer without data and explain how to view it in the app or request access.',\n\t'- For simple counts or time-range totals, use MONGO_READ (includeTotal). For breakdowns, rankings, or sums grouped by a field, use MONGO_AGG.',\n\t'- Before issuing MONGO_READ or MONGO_AGG, verify the collection name and key fields by checking collection/model definitions in the current app (look for \"collectionName:\" and date fields like date_created/date_completed/createdAt). Do not invent collection names.',\n\t'- Use MONGO_READ/MONGO_AGG only to produce summaries/snapshots/health checks (not raw dumps) when permitted.',\n\t'- When referencing data, summarize it in bullets and avoid raw JSON or dumps.',\n\t'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nconst AI_FORM_PATCH_SYSTEM_PROMPT = [\n\t'You are the ResolveIO form patch assistant.',\n\t'- Your job is to map the user request to the provided form fields.',\n\t'- Only use the allowed fields and their types.',\n\t'- Return ONLY valid JSON and nothing else.',\n\t'- If you cannot map the request, return an empty patch with a short note.',\n\t'- Use ISO 8601 for dates and true/false for booleans.',\n\t'- Use medium reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: string };\ntype CodexWorkerResponse = { ok: boolean; result?: string; error?: string };\n\ntype AttachmentInput = {\n\tid?: string;\n\tname?: string;\n\ttype?: string;\n\tsize?: number;\n\tlocal_path?: string;\n};\n\ntype AiTerminalRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tprofile_id?: string;\n\tconfig?: {\n\t\tmode?: string;\n\t\tmodel?: string;\n\t\tsystem_prompt?: string;\n\t\tuser_prompt_template?: string;\n\t\tresponse_format?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n\tguardrails?: boolean;\n\tattachments?: AttachmentInput[];\n\tmax_history?: number;\n\tdelete_files_after_run?: boolean;\n};\n\ntype AiCodexRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tcontext?: {\n\t\tmode?: string;\n\t\troute?: string;\n\t};\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\n};\n\nexport type AiAssistantMongoReadInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\toptions?: {\n\t\tprojection?: Record<string, number>;\n\t\tsort?: Record<string, any>;\n\t\tlimit?: number;\n\t\tskip?: number;\n\t\tincludeTotal?: boolean;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\nexport type AiAssistantMongoAggregateInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\tpipeline?: Array<Record<string, any>>;\n\toptions?: {\n\t\tallowDiskUse?: boolean;\n\t\tmaxTimeMS?: number;\n\t\tlimit?: number;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\ntype AiFormPatchInput = {\n\tmessage: string;\n\tallowed_fields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tfields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tpatch_format?: string;\n\troute?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tconfig?: {\n\t\tmodel?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n};\n\ntype AiFormField = {\n\tname: string;\n\ttype?: string;\n\tlabel?: string;\n\tenums?: string[];\n};\n\nexport function loadAiTerminalMethods(methodManager) {\n\tmethodManager.methods({\n\t\taiTerminalConversationCreate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\t\t\t\tid_client: normalizeOptionalString(payload.id_client),\n\t\t\t\t\tid_app: normalizeOptionalString(payload.id_app),\n\t\t\t\t\ttitle: normalizeOptionalString(payload.title) || 'New Conversation',\n\t\t\t\t\tmode: normalizeConversationMode(payload.mode),\n\t\t\t\t\tbranch_enabled: payload.branch_enabled === true,\n\t\t\t\t\tbranch_name: normalizeOptionalString(payload.branch_name),\n\t\t\t\t\tstatus: normalizeConversationStatus(payload.status),\n\t\t\t\t\tprofile_id: normalizeOptionalString(payload.profile_id),\n\t\t\t\t\tmetadata: payload.metadata || {},\n\t\t\t\t\tlast_message_at: undefined,\n\t\t\t\t\tlast_message_id: undefined,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now\n\t\t\t\t};\n\t\t\t\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\t\t\t\treturn { id_conversation: result._id as string };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationUpdate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpatch: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, patch) {\n\t\t\t\tconst update: Partial<AiTerminalConversationModel> & { updatedAt: Date } = {\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t};\n\t\t\t\tif (patch.title !== undefined) {\n\t\t\t\t\tupdate.title = normalizeOptionalString(patch.title);\n\t\t\t\t}\n\t\t\t\t\tif (patch.status !== undefined) {\n\t\t\t\t\t\tupdate.status = normalizeConversationStatus(patch.status);\n\t\t\t\t\t}\n\t\t\t\tif (patch.branch_enabled !== undefined) {\n\t\t\t\t\tupdate.branch_enabled = !!patch.branch_enabled;\n\t\t\t\t}\n\t\t\t\tif (patch.branch_name !== undefined) {\n\t\t\t\t\tupdate.branch_name = normalizeOptionalString(patch.branch_name);\n\t\t\t\t}\n\t\t\t\tif (patch.profile_id !== undefined) {\n\t\t\t\t\tupdate.profile_id = normalizeOptionalString(patch.profile_id);\n\t\t\t\t}\n\t\t\t\tif (patch.metadata !== undefined) {\n\t\t\t\t\tupdate.metadata = patch.metadata || {};\n\t\t\t\t}\n\n\t\t\t\tawait AiTerminalConversations.updateOne({ _id: id_conversation }, { $set: update });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationDelete: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string) {\n\t\t\t\tawait AiTerminalMessages.deleteMany({ id_conversation });\n\t\t\t\tawait AiTerminalConversations.deleteOne({ _id: id_conversation });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\tconst limits = resolveUploadLimits();\n\t\t\t\tif (size > limits.maxFileBytes) {\n\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t}\n\t\t\t\tconst safeName = sanitizeFilename(file_name);\n\t\t\t\tconst uploadRoot = resolveUploadRoot();\n\t\t\t\tconst targetDir = path.join(uploadRoot, id_conversation);\n\t\t\t\tawait fs.mkdir(targetDir, { recursive: true });\n\t\t\t\tconst targetPath = path.join(targetDir, safeName);\n\t\t\t\t\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\t\t\t\t\tconst data = new Uint8Array(dataBuffer);\n\t\t\t\t\tif (data.byteLength !== size) {\n\t\t\t\t\t\tif (data.byteLength > limits.maxFileBytes) {\n\t\t\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait fs.writeFile(targetPath, data);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid_file: objectIdHexString(),\n\t\t\t\t\t\tname: safeName,\n\t\t\t\t\tsize: data.byteLength,\n\t\t\t\t\ttype: normalizeOptionalString(content_type),\n\t\t\t\t\tlocal_path: targetPath\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\taiTerminalRun: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiTerminalRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiFormPatch: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiFormPatch(payload, this);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\treturn await handleCodexUpload(id_conversation, file_name, content_base64, size, content_type);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalRunCodex: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tforceWorker: true,\n\t\t\tmaxConcurrencyPerInstance: 1,\n\t\t\ttimeoutOverride: resolveCodexTimeoutMs() + 15000,\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantCodexRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoRead: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantMongoRead(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoAggregate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantMongoAggregate(payload, this);\n\t\t\t}\n\t\t},\n\t\t\taiCoderTerminalDeployTest: {\n\t\t\t\tcheck: new SimpleSchema({\n\t\t\t\t\tid_conversation: {\n\t\t\t\t\t\ttype: String\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfunction: function() {\n\t\t\t\t\tthrow new Error('Test deploys are not supported for AI assistant sessions.');\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nasync function executeAiTerminalRun(payload: AiTerminalRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiTerminalRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\n\tconst isSuperAdmin = await resolveIsSuperAdmin(context?.id_user);\n\tconst guardrailsEnabled = input.guardrails !== false && !isSuperAdmin;\n\tif (guardrailsEnabled) {\n\t\tconst guardrail = evaluateGuardrails(message);\n\t\tif (guardrail?.blocked) {\n\t\t\tconst conversation = await ensureConversation(input, 'openai');\n\t\t\tconst now = new Date();\n\t\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: message,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'assistant',\n\t\t\t\tcontent: guardrail.response,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblocked: true,\n\t\t\t\t\treason: guardrail.reason\n\t\t\t\t},\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\t\tawait touchConversation(conversation._id, now);\n\t\t\treturn {\n\t\t\t\tconversation,\n\t\t\t\tmessage: assistantMsg,\n\t\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t\t};\n\t\t}\n\t}\n\n\tconst conversation = await ensureConversation(input, 'openai');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst config = sanitizeConfig(input.config || {});\n\tconst systemPrompt = normalizeOptionalString(config.system_prompt) || '';\n\tconst userPromptTemplate = normalizeOptionalString(config.user_prompt_template);\n\tconst userPrompt = buildUserPrompt(userPromptTemplate, message, attachmentData.promptText);\n\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\tif (systemPrompt) {\n\t\tmessages.push({ role: 'system', content: systemPrompt });\n\t}\n\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'assistant' : 'user';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\tmessages.push({ role, content });\n\t\t}\n\t});\n\n\tif (userPrompt) {\n\t\tmessages.push({ role: 'user', content: userPrompt });\n\t}\n\n\tconst openaiSettings = resolveOpenAISettings(config);\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: config.response_format });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, openaiSettings.model);\n\tconst idClient = resolveClientId(conversation, input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-terminal',\n\t\t\tid_conversation: conversation._id\n\t\t});\n\t}\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: response.content,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc,\n\t\tusage: assistantDoc.usage\n\t};\n}\n\nasync function executeAiFormPatch(payload: AiFormPatchInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiFormPatchInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst allowedFields = normalizeAiFormFields(input.allowed_fields || input.fields);\n\tif (!allowedFields.length) {\n\t\tthrow new Error('Allowed fields are required.');\n\t}\n\n\tconst guardrail = evaluateGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\treturn { error: guardrail.response, blocked: true };\n\t}\n\n\tconst systemPrompt = buildAiFormSystemPrompt();\n\tconst userPrompt = buildAiFormUserPrompt(message, allowedFields, input.patch_format, input.route);\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [\n\t\t{ role: 'system', content: systemPrompt },\n\t\t{ role: 'user', content: userPrompt }\n\t];\n\n\tconst openaiSettings = resolveOpenAISettings(input.config || {});\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: 'json_object' });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, response.model || openaiSettings.model);\n\tconst idClient = normalizeOptionalString(input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-form'\n\t\t});\n\t}\n\n\tconst parsed = parseJsonObject(response.content);\n\tif (!parsed || typeof parsed !== 'object') {\n\t\tthrow new Error('AI form patch response was not valid JSON.');\n\t}\n\n\treturn {\n\t\tpatch: parsed.patch ?? parsed,\n\t\tnotes: normalizeOptionalString(parsed.notes) || undefined,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t}\n\t};\n}\n\nasync function executeAiAssistantCodexRun(payload: AiCodexRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiCodexRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst guardrail = evaluateAssistantGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\tconst conversation = await ensureConversation(input as any, 'codex');\n\t\tconst now = new Date();\n\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'user',\n\t\t\tcontent: message,\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'assistant',\n\t\t\tcontent: guardrail.response,\n\t\t\tmetadata: {\n\t\t\t\tblocked: true,\n\t\t\t\treason: guardrail.reason\n\t\t\t},\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\tawait touchConversation(conversation._id, now);\n\t\treturn {\n\t\t\tconversation,\n\t\t\tmessage: assistantMsg,\n\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t};\n\t}\n\n\tconst user = await Users.findById(context?.id_user);\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst hasInvoiceAccess = userHasInvoiceAccess(user);\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\tconst conversation = await ensureConversation(input as any, 'codex');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst historyLines: string[] = [];\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'Assistant' : 'User';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\thistoryLines.push(`${role}: ${content}`);\n\t\t}\n\t});\n\n\tconst prompt = buildAssistantCodexPrompt(\n\t\tmessage,\n\t\tattachmentData.promptText,\n\t\thistoryLines.join('\\n'),\n\t\tbuildAssistantContext(input, { isSuperAdmin, hasInvoiceAccess, customerId })\n\t);\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexConfig = resolveCodexSettings();\n\tconst runOptions: CodexRunOptions = {\n\t\ttimeoutMs: resolveCodexTimeoutMs(),\n\t\tthreadOptions: {\n\t\t\tworkingDirectory: workspaceRoot,\n\t\t\tsandboxMode: 'read-only',\n\t\t\tskipGitRepoCheck: true,\n\t\t\tmodelReasoningEffort: 'low',\n\t\t\tnetworkAccessEnabled: false,\n\t\t\twebSearchMode: 'disabled',\n\t\t\twebSearchEnabled: false,\n\t\t\tapprovalPolicy: 'never'\n\t\t}\n\t};\n\n\tconst responseText = await runCodexInWorkerThread(prompt, runOptions, codexConfig);\n\tconst assistantContent = sanitizeAssistantResponse(responseText);\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: assistantContent,\n\t\tmetadata: {\n\t\t\tmodel: resolveCodexModel()\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc\n\t};\n}\n\nexport async function executeAiAssistantMongoRead(payload: AiAssistantMongoReadInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoReadInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo read: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst normalizedClient = normalizeOptionalString(input.id_client);\n\tconst shouldScopeByClient = !isSuperAdmin && normalizedClient\n\t\t? await collectionHasClientIndex(db, dbName, collection)\n\t\t: false;\n\tconst clientScopedQuery = shouldScopeByClient\n\t\t? applyClientScopeFilter(baseQuery, normalizedClient, isSuperAdmin)\n\t\t: baseQuery;\n\tconst scopedQuery = applyCustomerScopeFilter(clientScopedQuery, collection, customerId, isSuperAdmin);\n\tconst normalized = normalizeAssistantFindOptions(input.options);\n\tconst documents = await db.collection(collection).find(scopedQuery, normalized.findOptions).toArray();\n\tlet total = null;\n\tif (normalized.includeTotal) {\n\t\ttotal = await db.collection(collection).countDocuments(scopedQuery);\n\t}\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments,\n\t\ttotal\n\t};\n}\n\nexport async function executeAiAssistantMongoAggregate(payload: AiAssistantMongoAggregateInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoAggregateInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo aggregate: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo aggregate: Access denied.');\n\t}\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo aggregate: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst normalizedClient = normalizeOptionalString(input.id_client);\n\tconst shouldScopeByClient = !isSuperAdmin && normalizedClient\n\t\t? await collectionHasClientIndex(db, dbName, collection)\n\t\t: false;\n\tconst clientScopedQuery = shouldScopeByClient\n\t\t? applyClientScopeFilter(baseQuery, normalizedClient, isSuperAdmin)\n\t\t: baseQuery;\n\tconst scopedQuery = applyCustomerScopeFilter(clientScopedQuery, collection, customerId, isSuperAdmin);\n\n\tconst normalizedPipeline = normalizeAssistantAggregatePipeline(input.pipeline);\n\tconst pipelineWithScope = buildAssistantAggregatePipeline(scopedQuery, normalizedPipeline);\n\tconst normalizedOptions = normalizeAssistantAggregateOptions(input.options);\n\tconst limitedPipeline = applyAssistantAggregateLimit(pipelineWithScope, normalizedOptions.limit);\n\tif (containsForbiddenMongoOperators(limitedPipeline)) {\n\t\tthrow new Error('AI assistant mongo aggregate: Pipeline contains restricted operators.');\n\t}\n\n\tconst documents = await db.collection(collection)\n\t\t.aggregate(limitedPipeline, normalizedOptions.aggregateOptions)\n\t\t.toArray();\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments\n\t};\n}\n\nasync function ensureAssistantReadAccess(context: any, permissionView?: string, collection?: string): Promise<{ user: any; isSuperAdmin: boolean }> {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst user = await Users.findById(idUser);\n\tif (!user) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst normalizedPermission = normalizeOptionalString(permissionView);\n\tif (!isSuperAdmin) {\n\t\tif (!normalizedPermission) {\n\t\t\tthrow new Error('AI assistant mongo read: Permission scope required.');\n\t\t}\n\t\tif (!userHasViewPermission(user, normalizedPermission)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tconst normalizedCollection = normalizeOptionalString(collection);\n\t\tif (normalizedCollection && requiresInvoicePermission(normalizedCollection) && !userHasInvoiceAccess(user)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t}\n\telse if (normalizedPermission && !userHasViewPermission(user, normalizedPermission)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\treturn { user, isSuperAdmin };\n}\n\nfunction resolveAssistantDatabaseName(database?: string, mongoConfig?: AiAssistantMongoReadInput['mongo']): string {\n\tconst defaultDb = normalizeOptionalString(mongoConfig?.database) || ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = normalizeOptionalString(database) || defaultDb;\n\tif (!dbName) {\n\t\tthrow new Error('AI assistant mongo read: Database is required.');\n\t}\n\tconst allowedFromConfig = Array.isArray(mongoConfig?.databases)\n\t\t? mongoConfig?.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tif (allowedFromConfig.length && !allowedFromConfig.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\treturn dbName;\n}\n\nfunction normalizeAssistantFindOptions(options?: AiAssistantMongoReadInput['options']) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number'\n\t\t? Math.min(Math.max(normalized.limit, 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction normalizeAssistantAggregatePipeline(pipeline?: Array<Record<string, any>>): Array<Record<string, any>> {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn [];\n\t}\n\treturn pipeline.filter(stage => stage && typeof stage === 'object' && !Array.isArray(stage));\n}\n\nfunction buildAssistantAggregatePipeline(query: Record<string, any>, pipeline: Array<Record<string, any>>): Array<Record<string, any>> {\n\tconst scopedPipeline = Array.isArray(pipeline) ? [...pipeline] : [];\n\tif (!query || !Object.keys(query).length) {\n\t\treturn scopedPipeline;\n\t}\n\tif (scopedPipeline.length && scopedPipeline[0]?.$geoNear && typeof scopedPipeline[0].$geoNear === 'object') {\n\t\tconst geoNearStage = { ...scopedPipeline[0].$geoNear };\n\t\tconst existingQuery = geoNearStage.query && typeof geoNearStage.query === 'object' ? geoNearStage.query : {};\n\t\tgeoNearStage.query = { $and: [existingQuery, query] };\n\t\treturn [{ $geoNear: geoNearStage }, ...scopedPipeline.slice(1)];\n\t}\n\treturn [{ $match: query }, ...scopedPipeline];\n}\n\nfunction normalizeAssistantAggregateOptions(options?: AiAssistantMongoAggregateInput['options']) {\n\tconst normalized = options || {};\n\tconst allowDiskUse = normalized.allowDiskUse === true ? true : undefined;\n\tconst maxTimeMS = typeof normalized.maxTimeMS === 'number' && normalized.maxTimeMS > 0\n\t\t? round(normalized.maxTimeMS)\n\t\t: undefined;\n\tconst limit = typeof normalized.limit === 'number'\n\t\t? Math.min(Math.max(round(normalized.limit), 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: undefined;\n\tconst aggregateOptions: Record<string, any> = {};\n\tif (allowDiskUse !== undefined) {\n\t\taggregateOptions.allowDiskUse = allowDiskUse;\n\t}\n\tif (maxTimeMS !== undefined) {\n\t\taggregateOptions.maxTimeMS = maxTimeMS;\n\t}\n\treturn {\n\t\taggregateOptions,\n\t\tlimit\n\t};\n}\n\nfunction findAggregateLimit(pipeline: Array<Record<string, any>>): number | null {\n\tfor (let i = 0; i < pipeline.length; i += 1) {\n\t\tconst stage = pipeline[i];\n\t\tif (!stage || typeof stage !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\t\tconst limit = (stage as any).$limit;\n\t\tif (typeof limit === 'number' && Number.isFinite(limit)) {\n\t\t\treturn limit;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction applyAssistantAggregateLimit(pipeline: Array<Record<string, any>>, limit?: number): Array<Record<string, any>> {\n\tconst normalizedPipeline = Array.isArray(pipeline) ? [...pipeline] : [];\n\tconst maxLimit = AI_ASSISTANT_MONGO_MAX_LIMIT;\n\tconst requestedLimit = typeof limit === 'number' && limit > 0\n\t\t? Math.min(limit, maxLimit)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst existingLimit = findAggregateLimit(normalizedPipeline);\n\tif (existingLimit === null) {\n\t\tnormalizedPipeline.push({ $limit: requestedLimit });\n\t\treturn normalizedPipeline;\n\t}\n\tif (existingLimit > maxLimit) {\n\t\tnormalizedPipeline.push({ $limit: maxLimit });\n\t}\n\treturn normalizedPipeline;\n}\n\nfunction normalizeMongoQuery(query?: Record<string, any>) {\n\tconst normalized = query && typeof query === 'object' ? query : {};\n\tif (containsForbiddenMongoOperators(normalized)) {\n\t\tthrow new Error('AI assistant mongo read: Query contains restricted operators.');\n\t}\n\treturn normalized;\n}\n\nfunction containsForbiddenMongoOperators(value: any): boolean {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.some(entry => containsForbiddenMongoOperators(entry));\n\t}\n\tfor (const key of Object.keys(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (normalized === '$where' || normalized === '$function' || normalized === '$accumulator') {\n\t\t\treturn true;\n\t\t}\n\t\tif (containsForbiddenMongoOperators(value[key])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction buildClientScopeCacheKey(dbName: string, collection: string): string {\n\tconst normalizedDb = normalizeOptionalString(dbName).toLowerCase();\n\tconst normalizedCollection = normalizeOptionalString(collection).toLowerCase();\n\treturn `${normalizedDb || 'db'}:${normalizedCollection}`;\n}\n\nasync function collectionHasClientIndex(db: any, dbName: string, collection: string): Promise<boolean> {\n\tconst normalizedCollection = normalizeOptionalString(collection);\n\tif (!normalizedCollection) {\n\t\treturn false;\n\t}\n\tconst cacheKey = buildClientScopeCacheKey(dbName, normalizedCollection);\n\tconst cached = AI_ASSISTANT_CLIENT_SCOPE_CACHE.get(cacheKey);\n\tif (typeof cached === 'boolean') {\n\t\treturn cached;\n\t}\n\ttry {\n\t\tconst indexes = await db.collection(normalizedCollection).indexes();\n\t\tconst hasIndex = Array.isArray(indexes)\n\t\t\t&& indexes.some((entry: any) => entry?.key && Object.prototype.hasOwnProperty.call(entry.key, 'id_client'));\n\t\tAI_ASSISTANT_CLIENT_SCOPE_CACHE.set(cacheKey, hasIndex);\n\t\treturn hasIndex;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction applyClientScopeFilter(query: Record<string, any>, idClient?: string, isSuperAdmin = false): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedClient = normalizeOptionalString(idClient);\n\tif (!normalizedClient) {\n\t\treturn query;\n\t}\n\treturn {\n\t\t$and: [query, { id_client: normalizedClient }]\n\t};\n}\n\nfunction applyCustomerScopeFilter(\n\tquery: Record<string, any>,\n\tcollection: string,\n\tidCustomer?: string,\n\tisSuperAdmin = false\n): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedCustomer = normalizeOptionalString(idCustomer);\n\tif (!normalizedCustomer) {\n\t\treturn query;\n\t}\n\tconst normalizedCollection = normalizeOptionalString(collection).toLowerCase();\n\tconst customerField = normalizedCollection === 'users' || normalizedCollection === 'user-versions'\n\t\t? 'other.id_customer'\n\t\t: 'id_customer';\n\treturn {\n\t\t$and: [query, { [customerField]: normalizedCustomer }]\n\t};\n}\n\nfunction userHasViewPermission(user: any, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction userHasAnyViewPermission(user: any, views: string[]): boolean {\n\tif (!user || !Array.isArray(views)) {\n\t\treturn false;\n\t}\n\treturn views.some(view => view && userHasViewPermission(user, view));\n}\n\nfunction userHasInvoiceAccess(user: any): boolean {\n\treturn userHasAnyViewPermission(user, ['/invoice', '/report/invoice']);\n}\n\nfunction requiresInvoicePermission(collection: string): boolean {\n\tconst normalized = normalizeOptionalString(collection).toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn normalized.includes('invoice');\n}\n\nfunction redactSensitiveFields(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(entry => redactSensitiveFields(entry));\n\t}\n\tif (!value || typeof value !== 'object') {\n\t\treturn value;\n\t}\n\tconst result: Record<string, any> = {};\n\tObject.keys(value).forEach((key) => {\n\t\tif (shouldRedactField(key)) {\n\t\t\treturn;\n\t\t}\n\t\tresult[key] = redactSensitiveFields(value[key]);\n\t});\n\treturn result;\n}\n\nfunction shouldRedactField(key: string): boolean {\n\tconst normalized = String(key || '').trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn AI_ASSISTANT_SENSITIVE_FIELDS.some((field) => normalized === field || normalized.includes(field));\n}\n\nfunction resolveCodexTimeoutMs(): number {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalNumber(config['AI_ASSISTANT_CODEX_TIMEOUT_MS'] || process.env.AI_ASSISTANT_CODEX_TIMEOUT_MS);\n\tif (raw && raw > 0) {\n\t\treturn round(raw);\n\t}\n\treturn DEFAULT_CODEX_TIMEOUT_MS;\n}\n\nfunction resolveCodexWorkerThreadEnabled(): boolean {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_USE_WORKER_THREAD']\n\t\t|| process.env.AI_ASSISTANT_CODEX_USE_WORKER_THREAD\n\t\t|| config['AI_ASSISTANT_CODEX_WORKER_THREAD']\n\t\t|| process.env.AI_ASSISTANT_CODEX_WORKER_THREAD\n\t);\n\tconst normalized = normalizeOptionalBoolean(raw);\n\tif (typeof normalized === 'boolean') {\n\t\treturn normalized;\n\t}\n\treturn process.env.IS_WORKER_INSTANCE !== 'true';\n}\n\nfunction resolveCodexModel(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t\t|| config['AI_TERMINAL_CODEX_MODEL']\n\t\t|| process.env.AI_TERMINAL_CODEX_MODEL\n\t\t|| config['AI_DASHBOARD_CODEX_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_MODEL\n\t);\n\treturn raw || DEFAULT_CODEX_MODEL;\n}\n\nfunction resolveCodexSettings(): CodexConfig {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: resolveCodexModel(),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction getAssistantCodexClient(): CodexClient {\n\tif (!assistantCodexClient) {\n\t\tassistantCodexClient = new CodexClient(resolveCodexSettings());\n\t}\n\treturn assistantCodexClient;\n}\n\nclass CodexWorkerBootstrapError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'CodexWorkerBootstrapError';\n\t}\n}\n\nasync function runCodexInWorkerThread(prompt: string, runOptions: CodexRunOptions, config: CodexConfig): Promise<string> {\n\tif (!resolveCodexWorkerThreadEnabled()) {\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n\n\tconst workerPath = await resolveCodexWorkerPath();\n\tif (!workerPath) {\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n\n\ttry {\n\t\treturn await runCodexInWorkerThreadInternal(workerPath, prompt, runOptions, config);\n\t}\n\tcatch (error) {\n\t\tif (!(error instanceof CodexWorkerBootstrapError)) {\n\t\t\tthrow error;\n\t\t}\n\t\tconsole.error('Codex worker bootstrap failed, falling back to in-process run.', error);\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n}\n\nasync function runCodexInWorkerThreadInternal(workerPath: string, prompt: string, runOptions: CodexRunOptions, config: CodexConfig): Promise<string> {\n\tconst sanitizedOptions = sanitizeCodexRunOptions(runOptions);\n\tlet worker: Worker;\n\n\ttry {\n\t\tworker = new Worker(workerPath, {\n\t\t\tworkerData: {\n\t\t\t\tprompt,\n\t\t\t\trunOptions: sanitizedOptions,\n\t\t\t\tconfig\n\t\t\t}\n\t\t});\n\t}\n\tcatch (error) {\n\t\tconst wrapped = new CodexWorkerBootstrapError('Failed to start codex worker.');\n\t\tif (error instanceof Error && error.stack) {\n\t\t\twrapped.stack = error.stack;\n\t\t}\n\t\tthrow wrapped;\n\t}\n\n\tconst timeoutMs = (sanitizedOptions?.timeoutMs || resolveCodexTimeoutMs()) + 15000;\n\tconst timeoutController = new AbortController();\n\tconst timeoutPromise = (async () => {\n\t\ttry {\n\t\t\tawait sleepTimeout(timeoutMs, null, { signal: timeoutController.signal });\n\t\t\treturn { type: 'timeout' as const };\n\t\t}\n\t\tcatch (error: any) {\n\t\t\tif (error?.name === 'AbortError') {\n\t\t\t\treturn { type: 'aborted' as const };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t})();\n\n\tconst messagePromise = (async () => {\n\t\tconst [message] = await once(worker, 'message');\n\t\treturn { type: 'message' as const, message: message as CodexWorkerResponse };\n\t})();\n\tconst errorPromise = (async () => {\n\t\tconst [error] = await once(worker, 'error');\n\t\treturn { type: 'error' as const, error: error as Error };\n\t})();\n\tconst exitPromise = (async () => {\n\t\tconst [code] = await once(worker, 'exit');\n\t\treturn { type: 'exit' as const, code: code as number };\n\t})();\n\n\tlet outcome: { type: 'message'; message: CodexWorkerResponse }\n\t\t| { type: 'error'; error: Error }\n\t\t| { type: 'exit'; code: number }\n\t\t| { type: 'timeout' }\n\t\t| { type: 'aborted' };\n\n\ttry {\n\t\toutcome = await Promise.race([messagePromise, errorPromise, exitPromise, timeoutPromise]);\n\t}\n\tfinally {\n\t\ttimeoutController.abort();\n\t\tworker.removeAllListeners('message');\n\t\tworker.removeAllListeners('error');\n\t\tworker.removeAllListeners('exit');\n\t}\n\n\tif (outcome.type === 'message') {\n\t\tawait terminateWorker(worker);\n\t\tif (outcome.message && outcome.message.ok) {\n\t\t\treturn outcome.message.result || '';\n\t\t}\n\t\tthrow new Error(outcome.message?.error || 'Codex worker failed.');\n\t}\n\n\tif (outcome.type === 'timeout') {\n\t\tawait terminateWorker(worker);\n\t\tthrow new CodexWorkerBootstrapError('Codex worker timed out.');\n\t}\n\n\tif (outcome.type === 'error') {\n\t\tawait terminateWorker(worker);\n\t\tconst wrapped = new CodexWorkerBootstrapError('Codex worker errored before completing.');\n\t\tif (outcome.error?.stack) {\n\t\t\twrapped.stack = outcome.error.stack;\n\t\t}\n\t\tthrow wrapped;\n\t}\n\n\tif (outcome.type === 'exit') {\n\t\tthrow new CodexWorkerBootstrapError(`Codex worker exited before completing (code ${outcome.code}).`);\n\t}\n\n\tthrow new CodexWorkerBootstrapError('Codex worker aborted before completing.');\n}\n\nasync function terminateWorker(worker: Worker): Promise<void> {\n\ttry {\n\t\tawait worker.terminate();\n\t}\n\tcatch {\n\t\t// Ignore termination errors.\n\t}\n}\n\nfunction sanitizeCodexRunOptions(options: CodexRunOptions): CodexRunOptions {\n\tif (!options) {\n\t\treturn {};\n\t}\n\treturn {\n\t\ttimeoutMs: options.timeoutMs,\n\t\tthreadOptions: options.threadOptions,\n\t\tthreadKey: options.threadKey,\n\t\treuseThread: options.reuseThread\n\t};\n}\n\nasync function resolveCodexWorkerPath(): Promise<string | null> {\n\tconst jsPath = path.join(__dirname, '../workers/codex-runner.worker.js');\n\tif (await pathExists(jsPath)) {\n\t\treturn jsPath;\n\t}\n\tconst tsPath = path.join(__dirname, '../workers/codex-runner.worker.ts');\n\tif (await pathExists(tsPath)) {\n\t\treturn tsPath;\n\t}\n\treturn null;\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n\ttry {\n\t\tconst stat = await fs.stat(target);\n\t\treturn stat.isFile();\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nasync function resolveAssistantWorkspaceRoot(): Promise<string> {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_WORKSPACE_ROOT']\n\t\t|| process.env.AI_ASSISTANT_WORKSPACE_ROOT\n\t\t|| config['CODEX_WORKSPACE_ROOT']\n\t\t|| process.env.CODEX_WORKSPACE_ROOT\n\t);\n\tconst candidate = configured || ResolveIOServer.getClientDir() || process.cwd();\n\tlet stat = null;\n\ttry {\n\t\tstat = await fs.stat(candidate);\n\t}\n\tcatch {\n\t\tstat = null;\n\t}\n\tif (!stat || !stat.isDirectory()) {\n\t\tthrow new Error('AI assistant workspace root not found.');\n\t}\n\treturn candidate;\n}\n\nfunction buildAssistantCodexPrompt(message: string, attachmentText: string, historyText: string, contextText?: string): string {\n\tconst trimmedContext = normalizeOptionalString(contextText);\n\tconst contextBlock = trimmedContext ? `\\n\\nContext:\\n${trimmedContext}` : '';\n\tconst trimmedHistory = normalizeOptionalString(historyText);\n\tconst historyBlock = trimmedHistory ? `\\n\\nConversation so far:\\n${trimmedHistory}` : '';\n\treturn `System:\\n${AI_ASSISTANT_SYSTEM_PROMPT}${contextBlock}${historyBlock}\\n\\nUser:\\n${message}${attachmentText || ''}`.trim();\n}\n\nfunction buildAssistantContext(\n\tinput: AiCodexRunInput,\n\tuserContext?: { isSuperAdmin?: boolean; hasInvoiceAccess?: boolean; customerId?: string }\n): string {\n\tconst lines: string[] = [];\n\tconst idApp = normalizeOptionalString(input?.id_app);\n\tif (idApp) {\n\t\tlines.push(`Current app id: ${idApp}`);\n\t}\n\tif (typeof userContext?.isSuperAdmin === 'boolean') {\n\t\tlines.push(`User is super admin: ${userContext.isSuperAdmin ? 'yes' : 'no'}`);\n\t}\n\tif (typeof userContext?.hasInvoiceAccess === 'boolean') {\n\t\tlines.push(`User has invoice access: ${userContext.hasInvoiceAccess ? 'yes' : 'no'}`);\n\t}\n\tconst customerId = normalizeOptionalString(userContext?.customerId);\n\tif (customerId) {\n\t\tlines.push('Customer portal scope: yes');\n\t\tlines.push(`Customer id: ${customerId}`);\n\t}\n\tconst contextMode = normalizeOptionalString(input?.context?.mode);\n\tconst contextRoute = normalizeOptionalString(input?.context?.route);\n\tif (contextMode) {\n\t\tlines.push(`Context scope: ${contextMode === 'current' ? 'current page' : contextMode}`);\n\t}\n\tif (contextRoute) {\n\t\tlines.push(`Current page route: ${contextRoute}`);\n\t}\n\tconst mongoDb = normalizeOptionalString(input?.mongo?.database);\n\tconst mongoDbs = Array.isArray(input?.mongo?.databases)\n\t\t? input.mongo.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tconst mongoAccess = normalizeOptionalString(input?.mongo?.access)\n\t\t|| (input?.mongo?.readonly === true ? 'read' : '');\n\tif (mongoDb) {\n\t\tlines.push(`Mongo database: ${mongoDb}`);\n\t}\n\tif (mongoDbs.length) {\n\t\tlines.push(`Mongo databases allowed: ${mongoDbs.join(', ')}`);\n\t}\n\tif (mongoAccess) {\n\t\tlines.push(`Mongo access: ${mongoAccess}`);\n\t}\n\treturn lines.join('\\n');\n}\n\ntype ClientRouteIndex = {\n\tset: Set<string>;\n\tmap: Map<string, string>;\n\tsize: number;\n};\n\nlet cachedClientRouteIndex: ClientRouteIndex | null = null;\n\nfunction normalizeRouteKey(value: string): string {\n\tconst trimmed = normalizeOptionalString(value);\n\tif (!trimmed) {\n\t\treturn '';\n\t}\n\tconst withSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n\treturn withSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeRouteMatchKey(value: string): string {\n\treturn normalizeRouteKey(value).toLowerCase();\n}\n\nfunction buildClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tconst set = new Set<string>();\n\tconst map = new Map<string, string>();\n\tfor (const route of routes) {\n\t\tconst normalized = normalizeRouteKey(route);\n\t\tif (!normalized) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst matchKey = normalized.toLowerCase();\n\t\tset.add(matchKey);\n\t\tif (!map.has(matchKey)) {\n\t\t\tmap.set(matchKey, normalized);\n\t\t}\n\t}\n\treturn { set, map, size: routes.length };\n}\n\nfunction getClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tif (cachedClientRouteIndex && cachedClientRouteIndex.size === routes.length) {\n\t\treturn cachedClientRouteIndex;\n\t}\n\tcachedClientRouteIndex = buildClientRouteIndex();\n\treturn cachedClientRouteIndex;\n}\n\nfunction splitRouteSuffix(value: string): { base: string; suffix: string } {\n\tconst matchIndex = value.search(/[?#]/);\n\tif (matchIndex === -1) {\n\t\treturn { base: value, suffix: '' };\n\t}\n\treturn { base: value.slice(0, matchIndex), suffix: value.slice(matchIndex) };\n}\n\nfunction isClientRoute(value: string, index: ClientRouteIndex): boolean {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (index.set.has(normalized)) {\n\t\treturn true;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\twhile (parts.length > 1) {\n\t\tparts.pop();\n\t\tconst prefix = `/${parts.join('/')}`;\n\t\tif (index.set.has(prefix)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction getCanonicalRoute(value: string, index: ClientRouteIndex): string | null {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn index.map.get(normalized) || null;\n}\n\nfunction swapTwoSegmentRoute(value: string): string | null {\n\tconst normalized = normalizeRouteKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\tif (parts.length !== 2) {\n\t\treturn null;\n\t}\n\treturn `/${parts[1]}/${parts[0]}`;\n}\n\nfunction normalizeAssistantRoutes(value: string): string {\n\tconst index = getClientRouteIndex();\n\tif (!index.set.size) {\n\t\treturn value;\n\t}\n\tconst routePattern = /\\/[a-z0-9][a-z0-9/_-]*(?:\\?[a-z0-9=&%._-]+)?(?:#[a-z0-9._-]+)?/gi;\n\treturn value.replace(routePattern, (match) => {\n\t\tconst { base, suffix } = splitRouteSuffix(match);\n\t\tif (isClientRoute(base, index)) {\n\t\t\tconst canonical = getCanonicalRoute(base, index);\n\t\t\treturn canonical ? `${canonical}${suffix}` : match;\n\t\t}\n\t\tconst swapped = swapTwoSegmentRoute(base);\n\t\tif (!swapped || !isClientRoute(swapped, index)) {\n\t\t\treturn match;\n\t\t}\n\t\tconst canonical = getCanonicalRoute(swapped, index) || swapped;\n\t\treturn `${canonical}${suffix}`;\n\t});\n}\n\nfunction sanitizeAssistantResponse(value: string): string {\n\tconst raw = normalizeOptionalString(value);\n\tif (!raw) {\n\t\treturn 'I could not generate a response. Please try again.';\n\t}\n\tconst withoutBlocks = raw.replace(/```[\\\\s\\\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();\n\tconst stripEstimated = (line: string) => line.replace(/\\bEstimated (human )?hours:\\s*.*$/i, '').trimEnd();\n\tconst cleanedLines: string[] = [];\n\twithoutBlocks.split('\\n').forEach((line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\tcleanedLines.push(line);\n\t\t\treturn;\n\t\t}\n\t\tif (/^work ticket summary:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^estimated (human )?hours:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^customer-facing summary:/i.test(trimmed)) {\n\t\t\tconst stripped = line.replace(/^(\\s*)customer-facing summary:\\s*/i, '$1');\n\t\t\tconst cleaned = stripEstimated(stripped);\n\t\t\tif (cleaned.trim()) {\n\t\t\t\tcleanedLines.push(cleaned);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcleanedLines.push(stripEstimated(line));\n\t});\n\tconst cleaned = cleanedLines.join('\\n').trim();\n\tif (!cleaned) {\n\t\treturn 'I can’t share code, but I can point you to files or explain behavior at a high level.';\n\t}\n\treturn normalizeAssistantRoutes(cleaned);\n}\n\nfunction evaluateAssistantGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string; response: string }> = [\n\t\t{\n\t\t\tpattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|snippet|file|function|class|script|sql)\\b/i,\n\t\t\treason: 'Code sharing is restricted.',\n\t\t\tresponse: 'I can’t share code or file contents. All code is proprietary. I can explain behavior and point you to screens or routes.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(write|generate|create|implement|fix)\\b.*\\b(code|script|function|class|endpoint|sql)\\b/i,\n\t\t\treason: 'Code generation is restricted.',\n\t\t\tresponse: 'I can’t generate code. All code is proprietary. I can explain how the feature works and where to look in the product.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i,\n\t\t\treason: 'Credentials and secrets are restricted.',\n\t\t\tresponse: 'I can’t help with credentials or secrets. If you need access, please contact support.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(delete|drop|truncate)\\s+(database|db|schema)\\b/i,\n\t\t\treason: 'Database operations are restricted.',\n\t\t\tresponse: 'I can’t help with database operations. I can explain system behavior or file locations.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(shell|terminal|ssh|sudo|rm\\\\s+-rf|chmod|chown)\\b/i,\n\t\t\treason: 'System operations are restricted.',\n\t\t\tresponse: 'I can’t help with system operations. I can explain workflows and where to find related code.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos|hack)\\b/i,\n\t\t\treason: 'Security abuse is restricted.',\n\t\t\tresponse: 'I can’t assist with that request.'\n\t\t}\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: entry.response\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction resolveOpenAISettings(config: any) {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: normalizeOptionalString(config?.model) || (serverConfig['OPENAI_MODEL'] || process.env.OPENAI_MODEL || 'gpt-5.1').trim(),\n\t\ttemperature: normalizeOptionalNumber(config?.temperature),\n\t\tmaxTokens: normalizeOptionalNumber(config?.max_tokens),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction buildAiFormSystemPrompt(): string {\n\treturn AI_FORM_PATCH_SYSTEM_PROMPT;\n}\n\nfunction buildAiFormUserPrompt(\n\tmessage: string,\n\tfields: Array<AiFormField>,\n\tpatchFormat?: string,\n\troute?: string\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`User request: ${message}`);\n\tconst normalizedRoute = normalizeOptionalString(route);\n\tif (normalizedRoute) {\n\t\tlines.push(`Current route: ${normalizedRoute}`);\n\t}\n\tif (patchFormat) {\n\t\tlines.push('Patch format:');\n\t\tlines.push(patchFormat);\n\t}\n\tlines.push('Allowed fields:');\n\tfields.forEach((field) => {\n\t\tconst name = field.name || '';\n\t\tif (!name) {\n\t\t\treturn;\n\t\t}\n\t\tconst parts = [name];\n\t\tif (field.type) {\n\t\t\tparts.push(`type=${field.type}`);\n\t\t}\n\t\tif (field.label) {\n\t\t\tparts.push(`label=\"${field.label}\"`);\n\t\t}\n\t\tif (Array.isArray(field.enums) && field.enums.length) {\n\t\t\tparts.push(`enums=${field.enums.join('|')}`);\n\t\t}\n\t\tlines.push(`- ${parts.join(' ')}`);\n\t});\n\tlines.push('Return JSON only.');\n\treturn lines.join('\\n');\n}\n\nfunction normalizeAiFormFields(fields: any): Array<AiFormField> {\n\tif (!Array.isArray(fields)) {\n\t\treturn [];\n\t}\n\treturn fields\n\t\t.map((field) => {\n\t\t\tif (!field || typeof field !== 'object') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst name = normalizeOptionalString(field.name) || normalizeOptionalString(field.path);\n\t\t\tif (!name) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst type = normalizeOptionalString(field.type);\n\t\t\tconst label = normalizeOptionalString(field.label);\n\t\t\tconst enums = Array.isArray(field.enums)\n\t\t\t\t? field.enums.map((value: any) => normalizeOptionalString(value)).filter(Boolean)\n\t\t\t\t: undefined;\n\t\t\tconst normalizedField: AiFormField = { name };\n\t\t\tif (type) {\n\t\t\t\tnormalizedField.type = type;\n\t\t\t}\n\t\t\tif (label) {\n\t\t\t\tnormalizedField.label = label;\n\t\t\t}\n\t\t\tif (enums && enums.length) {\n\t\t\t\tnormalizedField.enums = enums;\n\t\t\t}\n\t\t\treturn normalizedField;\n\t\t})\n\t\t.filter((field): field is AiFormField => !!field);\n}\n\nfunction parseJsonObject(content: string): any | null {\n\tif (!content || typeof content !== 'string') {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(content);\n\t}\n\tcatch {\n\t\tconst match = content.match(/\\{[\\s\\S]*\\}/);\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.parse(match[0]);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction resolveUploadLimits(): { maxFileBytes: number; maxFileMb: number; maxTotalBytes: number; maxTotalMb: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxFileMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_FILE_MB'] || process.env.AI_TERMINAL_MAX_FILE_MB) || DEFAULT_MAX_FILE_MB;\n\tconst maxTotalMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_MB'] || process.env.AI_TERMINAL_MAX_TOTAL_MB) || DEFAULT_MAX_TOTAL_MB;\n\treturn {\n\t\tmaxFileBytes: round(maxFileMb * 1024 * 1024),\n\t\tmaxFileMb,\n\t\tmaxTotalBytes: round(maxTotalMb * 1024 * 1024),\n\t\tmaxTotalMb\n\t};\n}\n\nfunction resolveUploadRoot(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(config['AI_TERMINAL_UPLOAD_ROOT'] || process.env.AI_TERMINAL_UPLOAD_ROOT);\n\tif (configured) {\n\t\treturn configured;\n\t}\n\treturn path.join(os.tmpdir(), 'resolveio-ai-terminal-uploads');\n}\n\nasync function handleCodexUpload(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\tconst limits = resolveUploadLimits();\n\tif (size > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tconst safeName = sanitizeFilename(file_name);\n\tconst uploadRoot = resolveUploadRoot();\n\tconst targetDir = path.join(uploadRoot, id_conversation);\n\tawait fs.mkdir(targetDir, { recursive: true });\n\tconst targetPath = path.join(targetDir, safeName);\n\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\tconst data = new Uint8Array(dataBuffer);\n\tif (data.byteLength > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tawait fs.writeFile(targetPath, data);\n\treturn {\n\t\tid_file: objectIdHexString(),\n\t\tname: safeName,\n\t\tsize: data.byteLength,\n\t\ttype: normalizeOptionalString(content_type),\n\t\tlocal_path: targetPath\n\t};\n}\n\nasync function readAttachmentContents(attachments: AttachmentInput[]): Promise<{ promptText: string; attachments: AttachmentInput[] }> {\n\tif (!attachments || !attachments.length) {\n\t\treturn { promptText: '', attachments: [] };\n\t}\n\tconst limits = resolveAttachmentLimits();\n\tlet totalBytes = 0;\n\tlet totalChars = 0;\n\tconst chunks: string[] = [];\n\tconst cleaned: AttachmentInput[] = [];\n\n\tfor (const attachment of attachments) {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, resolveUploadRoot());\n\t\tif (!safe) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stat = await fs.stat(localPath);\n\t\t\tif (!stat.isFile()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += stat.size;\n\t\t\tif (totalBytes > limits.maxTotalBytes) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst ext = path.extname(localPath).toLowerCase();\n\t\t\tconst name = normalizeOptionalString(attachment.name) || path.basename(localPath);\n\t\t\tconst type = normalizeOptionalString(attachment.type);\n\t\t\tconst readable = isReadableAttachment(type, ext);\n\t\t\tlet content = '';\n\t\t\tif (readable) {\n\t\t\t\tcontent = await fs.readFile(localPath, 'utf8');\n\t\t\t\tif (content.length > limits.maxAttachmentChars) {\n\t\t\t\t\tcontent = content.slice(0, limits.maxAttachmentChars) + '\\n[...truncated]';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcontent = `[${name} attached; binary content omitted]`;\n\t\t\t}\n\t\t\ttotalChars += content.length;\n\t\t\tif (totalChars > limits.maxTotalAttachmentChars) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchunks.push(`File: ${name}\\n${content}`);\n\t\t\tcleaned.push({\n\t\t\t\tid: attachment.id,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tsize: stat.size,\n\t\t\t\tlocal_path: localPath\n\t\t\t});\n\t\t}\n\t\tcatch {}\n\t}\n\n\treturn {\n\t\tpromptText: chunks.length ? `\\n\\nAttachments:\\n${chunks.join('\\n\\n')}` : '',\n\t\tattachments: cleaned\n\t};\n}\n\nfunction resolveAttachmentLimits(): { maxAttachmentChars: number; maxTotalAttachmentChars: number; maxTotalBytes: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_ATTACHMENT_CHARS;\n\tconst maxTotalAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS;\n\tconst limits = resolveUploadLimits();\n\treturn {\n\t\tmaxAttachmentChars,\n\t\tmaxTotalAttachmentChars,\n\t\tmaxTotalBytes: limits.maxTotalBytes\n\t};\n}\n\nfunction buildUserPrompt(template: string | undefined, inputText: string, attachmentText: string): string {\n\tconst data = {\n\t\tinput: inputText || '',\n\t\ttoday: new Date().toISOString().slice(0, 10)\n\t};\n\tif (template) {\n\t\treturn applyTemplate(template, data).trim() + attachmentText;\n\t}\n\treturn `${inputText || ''}${attachmentText}`.trim();\n}\n\nfunction applyTemplate(template: string, data: Record<string, string>): string {\n\tlet output = template;\n\tObject.keys(data).forEach(key => {\n\t\tconst value = data[key] || '';\n\t\tconst pattern = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'gi');\n\t\toutput = output.replace(pattern, value);\n\t});\n\treturn output;\n}\n\nfunction sanitizeConfig(source: any): any {\n\treturn {\n\t\tmode: normalizeOptionalString(source?.mode),\n\t\tmodel: normalizeOptionalString(source?.model),\n\t\tsystem_prompt: normalizeOptionalString(source?.system_prompt),\n\t\tuser_prompt_template: normalizeOptionalString(source?.user_prompt_template),\n\t\tresponse_format: normalizeOptionalString(source?.response_format),\n\t\ttemperature: normalizeOptionalNumber(source?.temperature),\n\t\tmax_tokens: normalizeOptionalNumber(source?.max_tokens)\n\t};\n}\n\nasync function ensureConversation(input: AiTerminalRunInput, mode: 'openai' | 'codex'): Promise<AiTerminalConversationModel> {\n\tconst idConversation = normalizeOptionalString(input.id_conversation);\n\tif (idConversation) {\n\t\tconst existing = await AiTerminalConversations.findById(idConversation);\n\t\tif (existing) {\n\t\t\treturn existing as AiTerminalConversationModel;\n\t\t}\n\t}\n\tconst now = new Date();\n\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\tid_client: normalizeOptionalString(input.id_client),\n\t\tid_app: normalizeOptionalString(input.id_app),\n\t\ttitle: 'New Conversation',\n\t\tmode,\n\t\tbranch_enabled: mode === 'codex',\n\t\tstatus: normalizeConversationStatus('active'),\n\t\tprofile_id: normalizeOptionalString(input.profile_id),\n\t\tmetadata: {},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\treturn result as AiTerminalConversationModel;\n}\n\nasync function touchConversation(idConversation: string, timestamp: Date, lastMessageId?: string): Promise<void> {\n\tconst update: any = {\n\t\tupdatedAt: timestamp,\n\t\tlast_message_at: timestamp\n\t};\n\tif (lastMessageId) {\n\t\tupdate.last_message_id = lastMessageId;\n\t}\n\tawait AiTerminalConversations.updateOne({ _id: idConversation }, { $set: update });\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tconst raw = typeof value === 'string' ? value.trim() : '';\n\treturn raw || '';\n}\n\nfunction normalizeConversationMode(value: any): AiTerminalMode {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'codex') {\n\t\treturn 'codex';\n\t}\n\treturn 'openai';\n}\n\nfunction normalizeConversationStatus(value: any): AiTerminalConversationStatus {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'archived') {\n\t\treturn 'archived';\n\t}\n\treturn 'active';\n}\n\nfunction normalizeOptionalNumber(value: any): number | undefined {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction normalizeOptionalBoolean(value: any): boolean | undefined {\n\tif (typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (!normalized) {\n\t\treturn undefined;\n\t}\n\tif (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {\n\t\treturn true;\n\t}\n\tif (['false', '0', 'no', 'n', 'off'].includes(normalized)) {\n\t\treturn false;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeHistoryLimit(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed)) {\n\t\treturn 12;\n\t}\n\treturn Math.min(Math.max(round(parsed), 0), 30);\n}\n\nfunction resolveClientId(conversation: AiTerminalConversationModel, inputClientId?: string): string {\n\treturn normalizeOptionalString(inputClientId) || normalizeOptionalString(conversation?.id_client);\n}\n\nfunction estimateUsage(messages: Array<{ role: string; content: string }>, responseText: string, model?: string) {\n\tconst inputTokens = countChatTokens(messages, model);\n\tconst outputTokens = countTokens(responseText || '', model);\n\treturn {\n\t\tinputTokens,\n\t\toutputTokens,\n\t\ttotalTokens: inputTokens + outputTokens\n\t};\n}\n\nfunction evaluateGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string }> = [\n\t\t{ pattern: /\\b(source\\s*code|full\\s*code|entire\\s*code|repo\\s*dump|repository|git\\s*clone)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|file|contents|snippet)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i, reason: 'Credentials and secrets are restricted.' },\n\t\t{ pattern: /\\b(delete|drop)\\s+(database|db|schema)\\b/i, reason: 'Database operations are restricted.' },\n\t\t{ pattern: /\\b(shell|terminal|ssh|sudo|rm\\s+-rf|chmod|chown)\\b/i, reason: 'Server operations are restricted.' },\n\t\t{ pattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos)\\b/i, reason: 'Security abuse is restricted.' }\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: 'I can’t help with that request because it could expose proprietary code or protected information. If you need a change, describe the outcome and I can help within approved workflows.'\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function resolveIsSuperAdmin(id_user?: string): Promise<boolean> {\n\tif (!id_user) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst user = await Users.findById(id_user);\n\t\treturn !!user?.roles?.super_admin;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction sanitizeFilename(value: string): string {\n\tconst trimmed = (value || '').trim();\n\tconst base = path.basename(trimmed);\n\treturn base.replace(/[^\\w.\\-]/g, '_') || `upload_${Date.now()}`;\n}\n\nfunction isReadableAttachment(type: string, ext: string): boolean {\n\tconst normalizedType = (type || '').toLowerCase();\n\tif (normalizedType.startsWith('text/')) {\n\t\treturn true;\n\t}\n\tif (['application/json', 'application/xml', 'application/csv'].includes(normalizedType)) {\n\t\treturn true;\n\t}\n\treturn ['.txt', '.md', '.json', '.csv', '.xml', '.log', '.yml', '.yaml', '.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.htm', '.sql'].includes(ext);\n}\n\nfunction ensurePathUnderRoot(targetPath: string, root: string): boolean {\n\tconst resolvedRoot = path.resolve(root);\n\tconst resolvedTarget = path.resolve(targetPath);\n\treturn resolvedTarget.startsWith(resolvedRoot);\n}\n\nasync function cleanupAttachments(attachments: AttachmentInput[]): Promise<void> {\n\tif (!attachments || !attachments.length) {\n\t\treturn;\n\t}\n\tconst uploadRoot = resolveUploadRoot();\n\tconst removals = attachments.map(async (attachment) => {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\treturn;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, uploadRoot);\n\t\tif (!safe) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait fs.rm(localPath, { force: true });\n\t\t}\n\t\tcatch {}\n\t});\n\tawait Promise.all(removals);\n}\n"]}
1
+ {"version":3,"sources":["../../src/methods/ai-terminal.ts"],"names":[],"mappings":"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","file":"ai-terminal.js","sourcesContent":["import { promises as fs } from 'fs';\nimport { once } from 'events';\nimport * as os from 'os';\nimport * as path from 'path';\nimport { setTimeout as sleepTimeout } from 'timers/promises';\nimport { Worker } from 'worker_threads';\nimport SimpleSchema from 'simpl-schema';\nimport { ResolveIOServer } from '../resolveio-server-app';\nimport { Users } from '../collections/user.collection';\nimport { AiTerminalConversations } from '../collections/ai-terminal-conversation.collection';\nimport { AiTerminalMessages } from '../collections/ai-terminal-message.collection';\nimport { AiTerminalConversationModel, AiTerminalConversationStatus, AiTerminalMode } from '../models/ai-terminal-conversation.model';\nimport { AiTerminalMessageModel } from '../models/ai-terminal-message.model';\nimport { deepCopy, objectIdHexString, round } from '../util/common';\nimport { countChatTokens, countTokens } from '../util/tokenizer';\nimport { OpenAIClient } from '../services/openai-client';\nimport { CodexClient, CodexConfig, CodexRunOptions } from '../services/codex-client';\nimport { recordOpenAIUsage } from '../managers/openai-usage-ledger.manager';\n\nconst DEFAULT_MAX_FILE_MB = 50;\nconst DEFAULT_MAX_TOTAL_MB = 100;\nconst DEFAULT_MAX_ATTACHMENT_CHARS = 12000;\nconst DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS = 40000;\nconst DEFAULT_CODEX_MODEL = 'gpt-5.2-codex';\nconst DEFAULT_CODEX_TIMEOUT_MS = 180000;\nconst AI_ASSISTANT_MONGO_DEFAULT_LIMIT = 20;\nconst AI_ASSISTANT_MONGO_MAX_LIMIT = 200;\nconst AI_ASSISTANT_DATE_FALLBACKS: Record<string, string> = {\n\tdate_created: 'createdAt',\n\tcreatedAt: 'date_created'\n};\n\nconst AI_ASSISTANT_BLOCKED_COLLECTIONS = new Set([\n\t'user-groups',\n\t'logged-in-users',\n\t'ai-terminal-messages',\n\t'ai-terminal-conversations',\n\t'openai-usage-ledger',\n\t'logs',\n\t'notifications',\n\t'email-history'\n]);\n\nconst AI_ASSISTANT_SENSITIVE_FIELDS = [\n\t'password',\n\t'salt',\n\t'hash',\n\t'secret',\n\t'token',\n\t'api_key',\n\t'email',\n\t'phonenumber',\n\t'phone',\n\t'ssn',\n\t'address',\n\t'services',\n\t'roles'\n];\n\nconst AI_ASSISTANT_CLIENT_SCOPE_CACHE = new Map<string, boolean>();\n\nconst AI_ASSISTANT_SYSTEM_PROMPT = [\n\t'You are the ResolveIO in-app AI assistant running with read-only access to the codebase.',\n\t'- Never share code or file contents. All code is proprietary.',\n\t'- Do not modify files, run destructive commands, or access databases directly.',\n\t'- Read-only Mongo access is allowed only via the MONGO_READ directive (see below).',\n\t'- Do not access secrets, credentials, or user data.',\n\t'- If the user has a customer portal scope (other.id_customer), only discuss that customer\\'s data and what is visible in their customer portal. Never reference other customers or internal/admin-only data. If asked for anything outside the portal, say it isn\\'t available.',\n\t'- Do not assist with hacking, bypassing security, or abuse.',\n\t'- Prefer high-level explanations and point to routes instead of code. Only mention file paths if explicitly requested.',\n\t'- When asked where to do something, give the exact screen name and the in-app route as a standalone path starting with \"/\" so it can be clicked.',\n\t'- When asked \"why is this happening,\" respond with: cause, trigger, data source(s), and expected vs actual outcome.',\n\t'- For troubleshooting, ask clarifying questions only when needed to proceed; otherwise answer directly, then give a short decision tree (If X, do Y; If not, do Z).',\n\t'- Provide checklists for common tasks, highlighting required fields and common pitfalls.',\n\t'- If asked \"where is this set,\" give the screen/workflow name and navigation steps to reach it.',\n\t'- If asked \"what changed,\" summarize release notes if known; if not available, say so and suggest where to check or offer a support ticket.',\n\t'- After answering, optionally suggest 0-1 related next steps only when helpful. Do not ask for \"next steps\" every time.',\n\t'- If access is blocked, name the permission/role needed and how to request it.',\n\t'- Avoid vague labels like \"Operations app\"; use the specific screen/workflow name.',\n\t'- Do not mention other client projects or ask which client; stay within the current project context.',\n\t'- Respond with a single concise message. Do not add labels like \"Customer-facing summary\" or \"Work ticket summary\" and do not include estimated hours.',\n\t'- Use structured responses by default: short heading, then bullet points. For \"how do I\" questions, provide a step-by-step list (numbered) with explicit page/screen names and actions.',\n\t'- When giving steps, include navigation guidance like \"Go to <screen>\" and \"Click/Select/Enter <field>\" so the user can follow it exactly.',\n\t'- If context scope is provided (ex: current page), prioritize that screen in your answer.',\n\t'- If a request is out of scope, offer to create a support ticket with a short summary.',\n\t'- If the user explicitly asks to create/open/file a support ticket, end your response with a single line exactly in this format:',\n\t'- SUPPORT_TICKET_CREATE: <one-line summary>',\n\t'- Only include that line when the user clearly wants a ticket created. Do not claim a ticket is created unless you include that line.',\n\t'- Do not end responses with tentative phrasing like \"I could\" or \"I’m going to.\" Complete the request or state what is required to proceed.',\n\t'- Use the codebase context to choose correct collections/fields/workflows and use MONGO_READ/MONGO_AGG to answer with real data when needed.',\n\t'- For direct questions, answer first. Ask a single follow-up only if required to run a query or resolve missing details.',\n\t'- If you need database data to answer, end your response with a single line exactly in this format:',\n\t'- MONGO_READ: {\"collection\":\"<name>\",\"query\":{...},\"options\":{\"projection\":{...},\"sort\":{...},\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- If you need grouped/aggregated data (totals by user, rankings, trends), end your response with a single line exactly in this format:',\n\t'- MONGO_AGG: {\"collection\":\"<name>\",\"pipeline\":[...],\"options\":{\"allowDiskUse\":true,\"limit\":20},\"permissionView\":\"</route>\"}',\n\t'- For invoice data, set permissionView to an invoice route (ex: /invoice/list or /report/invoice).',\n\t'- Keep queries minimal, read-only, and avoid user/credential data unless the user is a super admin.',\n\t'- Assume you are not a super admin unless explicitly told otherwise.',\n\t'- Only request data when the user has permission for that module; invoice data requires invoice view access.',\n\t'- If the user lacks permission, answer without data and explain how to view it in the app or request access.',\n\t'- For simple counts or time-range totals, use MONGO_READ (includeTotal). For breakdowns, rankings, or sums grouped by a field, use MONGO_AGG.',\n\t'- Before issuing MONGO_READ or MONGO_AGG, verify the collection name and key fields by checking collection/model definitions in the current app (look for \"collectionName:\" and date fields like date_created/date_completed/createdAt). Do not invent collection names.',\n\t'- For creation-date questions when both date_created and createdAt exist, match both with $or so results are not missed.',\n\t'- Use MONGO_READ/MONGO_AGG only to produce summaries/snapshots/health checks (not raw dumps) when permitted.',\n\t'- When referencing data, summarize it in bullets and avoid raw JSON or dumps.',\n\t'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nconst AI_FORM_PATCH_SYSTEM_PROMPT = [\n\t'You are the ResolveIO form patch assistant.',\n\t'- Your job is to map the user request to the provided form fields.',\n\t'- Only use the allowed fields and their types.',\n\t'- Return ONLY valid JSON and nothing else.',\n\t'- If you cannot map the request, return an empty patch with a short note.',\n\t'- Use ISO 8601 for dates and true/false for booleans.',\n\t'- Use medium reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: string };\ntype CodexWorkerResponse = { ok: boolean; result?: string; error?: string };\n\ntype AttachmentInput = {\n\tid?: string;\n\tname?: string;\n\ttype?: string;\n\tsize?: number;\n\tlocal_path?: string;\n};\n\ntype AiTerminalRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tprofile_id?: string;\n\tconfig?: {\n\t\tmode?: string;\n\t\tmodel?: string;\n\t\tsystem_prompt?: string;\n\t\tuser_prompt_template?: string;\n\t\tresponse_format?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n\tguardrails?: boolean;\n\tattachments?: AttachmentInput[];\n\tmax_history?: number;\n\tdelete_files_after_run?: boolean;\n};\n\ntype AiCodexRunInput = {\n\tid_conversation?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tmessage: string;\n\tcontext?: {\n\t\tmode?: string;\n\t\troute?: string;\n\t};\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\n};\n\nexport type AiAssistantMongoReadInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\toptions?: {\n\t\tprojection?: Record<string, number>;\n\t\tsort?: Record<string, any>;\n\t\tlimit?: number;\n\t\tskip?: number;\n\t\tincludeTotal?: boolean;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\nexport type AiAssistantMongoAggregateInput = {\n\tdatabase?: string;\n\tcollection?: string;\n\tquery?: Record<string, any>;\n\tpipeline?: Array<Record<string, any>>;\n\toptions?: {\n\t\tallowDiskUse?: boolean;\n\t\tmaxTimeMS?: number;\n\t\tlimit?: number;\n\t};\n\tpermissionView?: string;\n\tid_client?: string;\n\tmongo?: {\n\t\tdatabase?: string;\n\t\tdatabases?: string[];\n\t\taccess?: string;\n\t\treadonly?: boolean;\n\t};\n};\n\ntype AiFormPatchInput = {\n\tmessage: string;\n\tallowed_fields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tfields?: Array<{ name?: string; path?: string; type?: string; label?: string; enums?: string[] }>;\n\tpatch_format?: string;\n\troute?: string;\n\tid_client?: string;\n\tid_app?: string;\n\tconfig?: {\n\t\tmodel?: string;\n\t\ttemperature?: number;\n\t\tmax_tokens?: number;\n\t};\n};\n\ntype AiFormField = {\n\tname: string;\n\ttype?: string;\n\tlabel?: string;\n\tenums?: string[];\n};\n\nexport function loadAiTerminalMethods(methodManager) {\n\tmethodManager.methods({\n\t\taiTerminalConversationCreate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\tconst now = new Date();\n\t\t\t\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\t\t\t\tid_client: resolveClientIdFromConfig(payload.id_client),\n\t\t\t\t\tid_app: normalizeOptionalString(payload.id_app),\n\t\t\t\t\ttitle: normalizeOptionalString(payload.title) || 'New Conversation',\n\t\t\t\t\tmode: normalizeConversationMode(payload.mode),\n\t\t\t\t\tbranch_enabled: payload.branch_enabled === true,\n\t\t\t\t\tbranch_name: normalizeOptionalString(payload.branch_name),\n\t\t\t\t\tstatus: normalizeConversationStatus(payload.status),\n\t\t\t\t\tprofile_id: normalizeOptionalString(payload.profile_id),\n\t\t\t\t\tmetadata: payload.metadata || {},\n\t\t\t\t\tlast_message_at: undefined,\n\t\t\t\t\tlast_message_id: undefined,\n\t\t\t\t\tcreatedAt: now,\n\t\t\t\t\tupdatedAt: now\n\t\t\t\t};\n\t\t\t\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\t\t\t\treturn { id_conversation: result._id as string };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationUpdate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tpatch: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, patch) {\n\t\t\t\tconst update: Partial<AiTerminalConversationModel> & { updatedAt: Date } = {\n\t\t\t\t\tupdatedAt: new Date()\n\t\t\t\t};\n\t\t\t\tif (patch.title !== undefined) {\n\t\t\t\t\tupdate.title = normalizeOptionalString(patch.title);\n\t\t\t\t}\n\t\t\t\t\tif (patch.status !== undefined) {\n\t\t\t\t\t\tupdate.status = normalizeConversationStatus(patch.status);\n\t\t\t\t\t}\n\t\t\t\tif (patch.branch_enabled !== undefined) {\n\t\t\t\t\tupdate.branch_enabled = !!patch.branch_enabled;\n\t\t\t\t}\n\t\t\t\tif (patch.branch_name !== undefined) {\n\t\t\t\t\tupdate.branch_name = normalizeOptionalString(patch.branch_name);\n\t\t\t\t}\n\t\t\t\tif (patch.profile_id !== undefined) {\n\t\t\t\t\tupdate.profile_id = normalizeOptionalString(patch.profile_id);\n\t\t\t\t}\n\t\t\t\tif (patch.metadata !== undefined) {\n\t\t\t\t\tupdate.metadata = patch.metadata || {};\n\t\t\t\t}\n\n\t\t\t\tawait AiTerminalConversations.updateOne({ _id: id_conversation }, { $set: update });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalConversationDelete: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string) {\n\t\t\t\tawait AiTerminalMessages.deleteMany({ id_conversation });\n\t\t\t\tawait AiTerminalConversations.deleteOne({ _id: id_conversation });\n\t\t\t\treturn { id_conversation };\n\t\t\t}\n\t\t},\n\t\taiTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\tconst limits = resolveUploadLimits();\n\t\t\t\tif (size > limits.maxFileBytes) {\n\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t}\n\t\t\t\tconst safeName = sanitizeFilename(file_name);\n\t\t\t\tconst uploadRoot = resolveUploadRoot();\n\t\t\t\tconst targetDir = path.join(uploadRoot, id_conversation);\n\t\t\t\tawait fs.mkdir(targetDir, { recursive: true });\n\t\t\t\tconst targetPath = path.join(targetDir, safeName);\n\t\t\t\t\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\t\t\t\t\tconst data = new Uint8Array(dataBuffer);\n\t\t\t\t\tif (data.byteLength !== size) {\n\t\t\t\t\t\tif (data.byteLength > limits.maxFileBytes) {\n\t\t\t\t\t\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tawait fs.writeFile(targetPath, data);\n\t\t\t\t\treturn {\n\t\t\t\t\t\tid_file: objectIdHexString(),\n\t\t\t\t\t\tname: safeName,\n\t\t\t\t\tsize: data.byteLength,\n\t\t\t\t\ttype: normalizeOptionalString(content_type),\n\t\t\t\t\tlocal_path: targetPath\n\t\t\t\t};\n\t\t\t}\n\t\t},\n\t\taiTerminalRun: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiTerminalRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiFormPatch: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiFormPatch(payload, this);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalUploadFile: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tid_conversation: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tfile_name: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tcontent_base64: {\n\t\t\t\t\ttype: String\n\t\t\t\t},\n\t\t\t\tsize: {\n\t\t\t\t\ttype: Number\n\t\t\t\t},\n\t\t\t\tcontent_type: {\n\t\t\t\t\ttype: String,\n\t\t\t\t\toptional: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\t\t\t\treturn await handleCodexUpload(id_conversation, file_name, content_base64, size, content_type);\n\t\t\t}\n\t\t},\n\t\taiCoderTerminalRunCodex: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tforceWorker: true,\n\t\t\tmaxConcurrencyPerInstance: 1,\n\t\t\ttimeoutOverride: resolveCodexTimeoutMs() + 15000,\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantCodexRun(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoRead: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantMongoRead(payload, this);\n\t\t\t}\n\t\t},\n\t\taiAssistantMongoAggregate: {\n\t\t\tcheck: new SimpleSchema({\n\t\t\t\tpayload: {\n\t\t\t\t\ttype: Object,\n\t\t\t\t\tblackbox: true\n\t\t\t\t}\n\t\t\t}),\n\t\t\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantMongoAggregate(payload, this);\n\t\t\t}\n\t\t},\n\t\t\taiCoderTerminalDeployTest: {\n\t\t\t\tcheck: new SimpleSchema({\n\t\t\t\t\tid_conversation: {\n\t\t\t\t\t\ttype: String\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tfunction: function() {\n\t\t\t\t\tthrow new Error('Test deploys are not supported for AI assistant sessions.');\n\t\t\t\t}\n\t\t\t}\n\t});\n}\n\nasync function executeAiTerminalRun(payload: AiTerminalRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiTerminalRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\n\tconst isSuperAdmin = await resolveIsSuperAdmin(context?.id_user);\n\tconst guardrailsEnabled = input.guardrails !== false && !isSuperAdmin;\n\tif (guardrailsEnabled) {\n\t\tconst guardrail = evaluateGuardrails(message);\n\t\tif (guardrail?.blocked) {\n\t\t\tconst conversation = await ensureConversation(input, 'openai');\n\t\t\tconst now = new Date();\n\t\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'user',\n\t\t\t\tcontent: message,\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\t\tid_conversation: conversation._id,\n\t\t\t\trole: 'assistant',\n\t\t\t\tcontent: guardrail.response,\n\t\t\t\tmetadata: {\n\t\t\t\t\tblocked: true,\n\t\t\t\t\treason: guardrail.reason\n\t\t\t\t},\n\t\t\t\tcreatedAt: now,\n\t\t\t\tupdatedAt: now\n\t\t\t};\n\t\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\t\tawait touchConversation(conversation._id, now);\n\t\t\treturn {\n\t\t\t\tconversation,\n\t\t\t\tmessage: assistantMsg,\n\t\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t\t};\n\t\t}\n\t}\n\n\tconst conversation = await ensureConversation(input, 'openai');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst config = sanitizeConfig(input.config || {});\n\tconst systemPrompt = normalizeOptionalString(config.system_prompt) || '';\n\tconst userPromptTemplate = normalizeOptionalString(config.user_prompt_template);\n\tconst userPrompt = buildUserPrompt(userPromptTemplate, message, attachmentData.promptText);\n\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [];\n\tif (systemPrompt) {\n\t\tmessages.push({ role: 'system', content: systemPrompt });\n\t}\n\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'assistant' : 'user';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\tmessages.push({ role, content });\n\t\t}\n\t});\n\n\tif (userPrompt) {\n\t\tmessages.push({ role: 'user', content: userPrompt });\n\t}\n\n\tconst openaiSettings = resolveOpenAISettings(config);\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: config.response_format });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, openaiSettings.model);\n\tconst idClient = resolveClientId(conversation, input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-terminal',\n\t\t\tid_conversation: conversation._id\n\t\t});\n\t}\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: response.content,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc,\n\t\tusage: assistantDoc.usage\n\t};\n}\n\nasync function executeAiFormPatch(payload: AiFormPatchInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiFormPatchInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst allowedFields = normalizeAiFormFields(input.allowed_fields || input.fields);\n\tif (!allowedFields.length) {\n\t\tthrow new Error('Allowed fields are required.');\n\t}\n\n\tconst guardrail = evaluateGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\treturn { error: guardrail.response, blocked: true };\n\t}\n\n\tconst systemPrompt = buildAiFormSystemPrompt();\n\tconst userPrompt = buildAiFormUserPrompt(message, allowedFields, input.patch_format, input.route);\n\tconst messages: Array<{ role: 'system' | 'user' | 'assistant'; content: string }> = [\n\t\t{ role: 'system', content: systemPrompt },\n\t\t{ role: 'user', content: userPrompt }\n\t];\n\n\tconst openaiSettings = resolveOpenAISettings(input.config || {});\n\tconst client = new OpenAIClient(openaiSettings);\n\tconst response = await client.chat(messages, { timeoutMs: 60000, responseFormat: 'json_object' });\n\n\tconst usage = response.usage || estimateUsage(messages, response.content, response.model || openaiSettings.model);\n\tconst idClient = resolveClientIdFromConfig(input.id_client);\n\tif (idClient) {\n\t\tawait recordOpenAIUsage({\n\t\t\tid_client: idClient,\n\t\t\tmodel: response.model || openaiSettings.model || 'unknown',\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens,\n\t\t\tcategory: 'ai-form'\n\t\t});\n\t}\n\n\tconst parsed = parseJsonObject(response.content);\n\tif (!parsed || typeof parsed !== 'object') {\n\t\tthrow new Error('AI form patch response was not valid JSON.');\n\t}\n\n\treturn {\n\t\tpatch: parsed.patch ?? parsed,\n\t\tnotes: normalizeOptionalString(parsed.notes) || undefined,\n\t\tusage: {\n\t\t\tmodel: response.model || openaiSettings.model,\n\t\t\tinput_tokens: usage.inputTokens,\n\t\t\toutput_tokens: usage.outputTokens,\n\t\t\ttotal_tokens: usage.totalTokens\n\t\t}\n\t};\n}\n\nasync function executeAiAssistantCodexRun(payload: AiCodexRunInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiCodexRunInput);\n\tconst message = normalizeOptionalString(input.message);\n\tif (!message) {\n\t\tthrow new Error('Message is required.');\n\t}\n\tif (!context?.id_user) {\n\t\tthrow new Error('Unauthorized.');\n\t}\n\n\tconst guardrail = evaluateAssistantGuardrails(message);\n\tif (guardrail?.blocked) {\n\t\tconst conversation = await ensureConversation(input as any, 'codex');\n\t\tconst now = new Date();\n\t\tconst userMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'user',\n\t\t\tcontent: message,\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tconst assistantMsg: Partial<AiTerminalMessageModel> = {\n\t\t\tid_conversation: conversation._id,\n\t\t\trole: 'assistant',\n\t\t\tcontent: guardrail.response,\n\t\t\tmetadata: {\n\t\t\t\tblocked: true,\n\t\t\t\treason: guardrail.reason\n\t\t\t},\n\t\t\tcreatedAt: now,\n\t\t\tupdatedAt: now\n\t\t};\n\t\tawait AiTerminalMessages.insertOne(userMsg as any);\n\t\tawait AiTerminalMessages.insertOne(assistantMsg as any);\n\t\tawait touchConversation(conversation._id, now);\n\t\treturn {\n\t\t\tconversation,\n\t\t\tmessage: assistantMsg,\n\t\t\tguardrails: { blocked: true, reason: guardrail.reason }\n\t\t};\n\t}\n\n\tconst user = await Users.findById(context?.id_user);\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst hasInvoiceAccess = userHasInvoiceAccess(user);\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\tconst conversation = await ensureConversation(input as any, 'codex');\n\tconst now = new Date();\n\tconst attachments = Array.isArray(input.attachments) ? input.attachments : [];\n\tconst attachmentData = await readAttachmentContents(attachments);\n\tconst historyLimit = normalizeHistoryLimit(input.max_history);\n\tconst history = historyLimit > 0\n\t\t? await AiTerminalMessages.find(\n\t\t\t{ id_conversation: conversation._id, role: { $in: ['user', 'assistant'] } },\n\t\t\t{ sort: { createdAt: 1 }, limit: historyLimit * 2 }\n\t\t)\n\t\t: [];\n\n\tconst historyLines: string[] = [];\n\thistory.forEach((entry: AiTerminalMessageModel) => {\n\t\tconst role = entry.role === 'assistant' ? 'Assistant' : 'User';\n\t\tconst content = normalizeOptionalString(entry.content);\n\t\tif (content) {\n\t\t\thistoryLines.push(`${role}: ${content}`);\n\t\t}\n\t});\n\n\tconst prompt = buildAssistantCodexPrompt(\n\t\tmessage,\n\t\tattachmentData.promptText,\n\t\thistoryLines.join('\\n'),\n\t\tbuildAssistantContext(input, { isSuperAdmin, hasInvoiceAccess, customerId })\n\t);\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexConfig = resolveCodexSettings();\n\tconst runOptions: CodexRunOptions = {\n\t\ttimeoutMs: resolveCodexTimeoutMs(),\n\t\tthreadOptions: {\n\t\t\tworkingDirectory: workspaceRoot,\n\t\t\tsandboxMode: 'read-only',\n\t\t\tskipGitRepoCheck: true,\n\t\t\tmodelReasoningEffort: 'low',\n\t\t\tnetworkAccessEnabled: false,\n\t\t\twebSearchMode: 'disabled',\n\t\t\twebSearchEnabled: false,\n\t\t\tapprovalPolicy: 'never'\n\t\t}\n\t};\n\n\tconst responseText = await runCodexInWorkerThread(prompt, runOptions, codexConfig);\n\tconst assistantContent = sanitizeAssistantResponse(responseText);\n\n\tconst userDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'user',\n\t\tcontent: message,\n\t\tattachments: attachmentData.attachments,\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tconst assistantDoc: Partial<AiTerminalMessageModel> = {\n\t\tid_conversation: conversation._id,\n\t\trole: 'assistant',\n\t\tcontent: assistantContent,\n\t\tmetadata: {\n\t\t\tmodel: resolveCodexModel()\n\t\t},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\n\tawait AiTerminalMessages.insertOne(userDoc as any);\n\tconst insertResult = await AiTerminalMessages.insertOne(assistantDoc as any);\n\tawait touchConversation(conversation._id, now, insertResult._id as string);\n\n\tif (input.delete_files_after_run !== false) {\n\t\tawait cleanupAttachments(attachmentData.attachments);\n\t}\n\n\treturn {\n\t\tconversation,\n\t\tmessage: assistantDoc\n\t};\n}\n\nexport async function executeAiAssistantMongoRead(payload: AiAssistantMongoReadInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoReadInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo read: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst normalizedClient = normalizeOptionalString(input.id_client);\n\tconst shouldScopeByClient = !isSuperAdmin && normalizedClient\n\t\t? await collectionHasClientIndex(db, dbName, collection)\n\t\t: false;\n\tconst clientScopedQuery = shouldScopeByClient\n\t\t? applyClientScopeFilter(baseQuery, normalizedClient, isSuperAdmin)\n\t\t: baseQuery;\n\tconst scopedQuery = applyCustomerScopeFilter(clientScopedQuery, collection, customerId, isSuperAdmin);\n\tconst normalized = normalizeAssistantFindOptions(input.options);\n\tconst documents = await db.collection(collection).find(scopedQuery, normalized.findOptions).toArray();\n\tlet total = null;\n\tif (normalized.includeTotal) {\n\t\ttotal = await db.collection(collection).countDocuments(scopedQuery);\n\t}\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments,\n\t\ttotal\n\t};\n}\n\nexport async function executeAiAssistantMongoAggregate(payload: AiAssistantMongoAggregateInput, context: any): Promise<any> {\n\tconst input = payload || ({} as AiAssistantMongoAggregateInput);\n\tconst collection = normalizeOptionalString(input.collection);\n\tif (!collection) {\n\t\tthrow new Error('AI assistant mongo aggregate: Collection is required.');\n\t}\n\tconst { user, isSuperAdmin } = await ensureAssistantReadAccess(context, input.permissionView, collection);\n\tif (!isSuperAdmin && AI_ASSISTANT_BLOCKED_COLLECTIONS.has(collection)) {\n\t\tthrow new Error('AI assistant mongo aggregate: Access denied.');\n\t}\n\tconst customerId = normalizeOptionalString(user?.other?.id_customer);\n\n\tconst dbName = resolveAssistantDatabaseName(input.database, input.mongo);\n\tconst db = ResolveIOServer.getMongoConnection().db(dbName);\n\tlet baseQuery = normalizeMongoQuery(input.query);\n\tif (!isSuperAdmin && (collection === 'users' || collection === 'user-versions')) {\n\t\tconst userId = normalizeOptionalString(user?._id);\n\t\tif (!userId) {\n\t\t\tthrow new Error('AI assistant mongo aggregate: Access denied.');\n\t\t}\n\t\tbaseQuery = {\n\t\t\t$and: [baseQuery, { _id: userId }]\n\t\t};\n\t}\n\tconst normalizedClient = normalizeOptionalString(input.id_client);\n\tconst shouldScopeByClient = !isSuperAdmin && normalizedClient\n\t\t? await collectionHasClientIndex(db, dbName, collection)\n\t\t: false;\n\tconst clientScopedQuery = shouldScopeByClient\n\t\t? applyClientScopeFilter(baseQuery, normalizedClient, isSuperAdmin)\n\t\t: baseQuery;\n\tconst scopedQuery = applyCustomerScopeFilter(clientScopedQuery, collection, customerId, isSuperAdmin);\n\n\tconst normalizedPipeline = normalizeAssistantAggregatePipeline(input.pipeline);\n\tconst pipelineWithScope = buildAssistantAggregatePipeline(scopedQuery, normalizedPipeline);\n\tconst normalizedOptions = normalizeAssistantAggregateOptions(input.options);\n\tconst limitedPipeline = applyAssistantAggregateLimit(pipelineWithScope, normalizedOptions.limit);\n\tif (containsForbiddenMongoOperators(limitedPipeline)) {\n\t\tthrow new Error('AI assistant mongo aggregate: Pipeline contains restricted operators.');\n\t}\n\n\tlet documents = await db.collection(collection)\n\t\t.aggregate(limitedPipeline, normalizedOptions.aggregateOptions)\n\t\t.toArray();\n\tif (!documents.length) {\n\t\tconst fallback = resolveAggregateDateFieldFallback(limitedPipeline);\n\t\tif (fallback) {\n\t\t\tconst fallbackPipeline = replaceAggregateDateField(limitedPipeline, fallback.from, fallback.to);\n\t\t\tif (!containsForbiddenMongoOperators(fallbackPipeline)) {\n\t\t\t\tconst fallbackDocs = await db.collection(collection)\n\t\t\t\t\t.aggregate(fallbackPipeline, normalizedOptions.aggregateOptions)\n\t\t\t\t\t.toArray();\n\t\t\t\tif (fallbackDocs.length) {\n\t\t\t\t\tdocuments = fallbackDocs;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tconst sanitizedDocuments = isSuperAdmin\n\t\t? documents\n\t\t: documents.map(doc => redactSensitiveFields(deepCopy(doc)));\n\n\treturn {\n\t\tdocuments: sanitizedDocuments\n\t};\n}\n\nasync function ensureAssistantReadAccess(context: any, permissionView?: string, collection?: string): Promise<{ user: any; isSuperAdmin: boolean }> {\n\tconst idUser = context?.id_user;\n\tif (!idUser) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst user = await Users.findById(idUser);\n\tif (!user) {\n\t\tthrow new Error('AI assistant mongo read: Unauthorized.');\n\t}\n\tconst isSuperAdmin = !!user?.roles?.super_admin;\n\tconst normalizedPermission = normalizeOptionalString(permissionView);\n\tif (!isSuperAdmin) {\n\t\tif (!normalizedPermission) {\n\t\t\tthrow new Error('AI assistant mongo read: Permission scope required.');\n\t\t}\n\t\tif (!userHasViewPermission(user, normalizedPermission)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t\tconst normalizedCollection = normalizeOptionalString(collection);\n\t\tif (normalizedCollection && requiresInvoicePermission(normalizedCollection) && !userHasInvoiceAccess(user)) {\n\t\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t\t}\n\t}\n\telse if (normalizedPermission && !userHasViewPermission(user, normalizedPermission)) {\n\t\tthrow new Error('AI assistant mongo read: Access denied.');\n\t}\n\treturn { user, isSuperAdmin };\n}\n\nfunction resolveAssistantDatabaseName(database?: string, mongoConfig?: AiAssistantMongoReadInput['mongo']): string {\n\tconst defaultDb = normalizeOptionalString(mongoConfig?.database) || ResolveIOServer.getServerConfig()?.DATABASE || '';\n\tconst dbName = normalizeOptionalString(database) || defaultDb;\n\tif (!dbName) {\n\t\tthrow new Error('AI assistant mongo read: Database is required.');\n\t}\n\tconst allowedFromConfig = Array.isArray(mongoConfig?.databases)\n\t\t? mongoConfig?.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tif (allowedFromConfig.length && !allowedFromConfig.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\tconst allowedDatabases = ResolveIOServer.getMongoManager()?.getWatchedDatabases() || [];\n\tif (allowedDatabases.length && !allowedDatabases.includes(dbName)) {\n\t\tthrow new Error('AI assistant mongo read: Database access denied.');\n\t}\n\treturn dbName;\n}\n\nfunction normalizeAssistantFindOptions(options?: AiAssistantMongoReadInput['options']) {\n\tconst normalized = options || {};\n\tconst projection = normalized.projection && Object.keys(normalized.projection).length ? normalized.projection : undefined;\n\tconst sort = normalized.sort && Object.keys(normalized.sort).length ? normalized.sort : undefined;\n\tconst limit = typeof normalized.limit === 'number'\n\t\t? Math.min(Math.max(normalized.limit, 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst skip = typeof normalized.skip === 'number' ? Math.max(normalized.skip, 0) : 0;\n\treturn {\n\t\tfindOptions: {\n\t\t\tprojection,\n\t\t\tsort,\n\t\t\tlimit,\n\t\t\tskip\n\t\t},\n\t\tincludeTotal: normalized.includeTotal === true\n\t};\n}\n\nfunction normalizeAssistantAggregatePipeline(pipeline?: Array<Record<string, any>>): Array<Record<string, any>> {\n\tif (!Array.isArray(pipeline)) {\n\t\treturn [];\n\t}\n\treturn pipeline.filter(stage => stage && typeof stage === 'object' && !Array.isArray(stage));\n}\n\nfunction buildAssistantAggregatePipeline(query: Record<string, any>, pipeline: Array<Record<string, any>>): Array<Record<string, any>> {\n\tconst scopedPipeline = Array.isArray(pipeline) ? [...pipeline] : [];\n\tif (!query || !Object.keys(query).length) {\n\t\treturn scopedPipeline;\n\t}\n\tif (scopedPipeline.length && scopedPipeline[0]?.$geoNear && typeof scopedPipeline[0].$geoNear === 'object') {\n\t\tconst geoNearStage = { ...scopedPipeline[0].$geoNear };\n\t\tconst existingQuery = geoNearStage.query && typeof geoNearStage.query === 'object' ? geoNearStage.query : {};\n\t\tgeoNearStage.query = { $and: [existingQuery, query] };\n\t\treturn [{ $geoNear: geoNearStage }, ...scopedPipeline.slice(1)];\n\t}\n\treturn [{ $match: query }, ...scopedPipeline];\n}\n\nfunction normalizeAssistantAggregateOptions(options?: AiAssistantMongoAggregateInput['options']) {\n\tconst normalized = options || {};\n\tconst allowDiskUse = normalized.allowDiskUse === true ? true : undefined;\n\tconst maxTimeMS = typeof normalized.maxTimeMS === 'number' && normalized.maxTimeMS > 0\n\t\t? round(normalized.maxTimeMS)\n\t\t: undefined;\n\tconst limit = typeof normalized.limit === 'number'\n\t\t? Math.min(Math.max(round(normalized.limit), 0), AI_ASSISTANT_MONGO_MAX_LIMIT)\n\t\t: undefined;\n\tconst aggregateOptions: Record<string, any> = {};\n\tif (allowDiskUse !== undefined) {\n\t\taggregateOptions.allowDiskUse = allowDiskUse;\n\t}\n\tif (maxTimeMS !== undefined) {\n\t\taggregateOptions.maxTimeMS = maxTimeMS;\n\t}\n\treturn {\n\t\taggregateOptions,\n\t\tlimit\n\t};\n}\n\nfunction findAggregateLimit(pipeline: Array<Record<string, any>>): number | null {\n\tfor (let i = 0; i < pipeline.length; i += 1) {\n\t\tconst stage = pipeline[i];\n\t\tif (!stage || typeof stage !== 'object') {\n\t\t\tcontinue;\n\t\t}\n\t\tconst limit = (stage as any).$limit;\n\t\tif (typeof limit === 'number' && Number.isFinite(limit)) {\n\t\t\treturn limit;\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction applyAssistantAggregateLimit(pipeline: Array<Record<string, any>>, limit?: number): Array<Record<string, any>> {\n\tconst normalizedPipeline = Array.isArray(pipeline) ? [...pipeline] : [];\n\tconst maxLimit = AI_ASSISTANT_MONGO_MAX_LIMIT;\n\tconst requestedLimit = typeof limit === 'number' && limit > 0\n\t\t? Math.min(limit, maxLimit)\n\t\t: AI_ASSISTANT_MONGO_DEFAULT_LIMIT;\n\tconst existingLimit = findAggregateLimit(normalizedPipeline);\n\tif (existingLimit === null) {\n\t\tnormalizedPipeline.push({ $limit: requestedLimit });\n\t\treturn normalizedPipeline;\n\t}\n\tif (existingLimit > maxLimit) {\n\t\tnormalizedPipeline.push({ $limit: maxLimit });\n\t}\n\treturn normalizedPipeline;\n}\n\nfunction resolveAggregateDateFieldFallback(pipeline: Array<Record<string, any>>): { from: string; to: string } | null {\n\tconst dateField = findAggregateDateField(pipeline);\n\tif (!dateField) {\n\t\treturn null;\n\t}\n\tconst fallback = AI_ASSISTANT_DATE_FALLBACKS[dateField];\n\tif (!fallback) {\n\t\treturn null;\n\t}\n\treturn { from: dateField, to: fallback };\n}\n\nfunction findAggregateDateField(pipeline: Array<Record<string, any>>): string | null {\n\tconst fields = new Set<string>();\n\t(pipeline || []).forEach((stage) => {\n\t\tif (!stage || typeof stage !== 'object') {\n\t\t\treturn;\n\t\t}\n\t\tif (stage.$match && typeof stage.$match === 'object') {\n\t\t\tcollectDateFieldsFromMatch(stage.$match, fields);\n\t\t}\n\t});\n\tif (fields.size !== 1) {\n\t\treturn null;\n\t}\n\treturn Array.from(fields)[0];\n}\n\nfunction collectDateFieldsFromMatch(value: any, fields: Set<string>) {\n\tif (!value || typeof value !== 'object') {\n\t\treturn;\n\t}\n\tif (Array.isArray(value)) {\n\t\tvalue.forEach(entry => collectDateFieldsFromMatch(entry, fields));\n\t\treturn;\n\t}\n\tObject.keys(value).forEach((key) => {\n\t\tconst entry = value[key];\n\t\tif (Object.prototype.hasOwnProperty.call(AI_ASSISTANT_DATE_FALLBACKS, key)) {\n\t\t\tif (hasDateRangeOperators(entry) || entry instanceof Date) {\n\t\t\t\tfields.add(key);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (key.startsWith('$')) {\n\t\t\tcollectDateFieldsFromMatch(entry, fields);\n\t\t\treturn;\n\t\t}\n\t\tif (entry && typeof entry === 'object') {\n\t\t\tcollectDateFieldsFromMatch(entry, fields);\n\t\t}\n\t});\n}\n\nfunction hasDateRangeOperators(value: any): boolean {\n\tif (!value || typeof value !== 'object' || Array.isArray(value)) {\n\t\treturn false;\n\t}\n\treturn Object.prototype.hasOwnProperty.call(value, '$gte')\n\t\t|| Object.prototype.hasOwnProperty.call(value, '$gt')\n\t\t|| Object.prototype.hasOwnProperty.call(value, '$lte')\n\t\t|| Object.prototype.hasOwnProperty.call(value, '$lt');\n}\n\nfunction replaceAggregateDateField(\n\tpipeline: Array<Record<string, any>>,\n\tfromField: string,\n\ttoField: string\n): Array<Record<string, any>> {\n\tconst replacer = (value: any): any => {\n\t\tif (Array.isArray(value)) {\n\t\t\treturn value.map(entry => replacer(entry));\n\t\t}\n\t\tif (value instanceof Date) {\n\t\t\treturn value;\n\t\t}\n\t\tif (value && typeof value === 'object') {\n\t\t\tconst next: Record<string, any> = {};\n\t\t\tObject.keys(value).forEach((key) => {\n\t\t\t\tconst nextKey = key === fromField ? toField : key;\n\t\t\t\tnext[nextKey] = replacer(value[key]);\n\t\t\t});\n\t\t\treturn next;\n\t\t}\n\t\tif (typeof value === 'string') {\n\t\t\tif (value.startsWith(`$${fromField}`)) {\n\t\t\t\treturn `$${toField}${value.slice(fromField.length + 1)}`;\n\t\t\t}\n\t\t\treturn value;\n\t\t}\n\t\treturn value;\n\t};\n\treturn replacer(pipeline);\n}\n\nfunction normalizeMongoQuery(query?: Record<string, any>) {\n\tconst normalized = query && typeof query === 'object' ? query : {};\n\tif (containsForbiddenMongoOperators(normalized)) {\n\t\tthrow new Error('AI assistant mongo read: Query contains restricted operators.');\n\t}\n\treturn normalized;\n}\n\nfunction containsForbiddenMongoOperators(value: any): boolean {\n\tif (!value || typeof value !== 'object') {\n\t\treturn false;\n\t}\n\tif (Array.isArray(value)) {\n\t\treturn value.some(entry => containsForbiddenMongoOperators(entry));\n\t}\n\tfor (const key of Object.keys(value)) {\n\t\tconst normalized = key.toLowerCase();\n\t\tif (normalized === '$where' || normalized === '$function' || normalized === '$accumulator') {\n\t\t\treturn true;\n\t\t}\n\t\tif (containsForbiddenMongoOperators(value[key])) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction buildClientScopeCacheKey(dbName: string, collection: string): string {\n\tconst normalizedDb = normalizeOptionalString(dbName).toLowerCase();\n\tconst normalizedCollection = normalizeOptionalString(collection).toLowerCase();\n\treturn `${normalizedDb || 'db'}:${normalizedCollection}`;\n}\n\nasync function collectionHasClientIndex(db: any, dbName: string, collection: string): Promise<boolean> {\n\tconst normalizedCollection = normalizeOptionalString(collection);\n\tif (!normalizedCollection) {\n\t\treturn false;\n\t}\n\tconst cacheKey = buildClientScopeCacheKey(dbName, normalizedCollection);\n\tconst cached = AI_ASSISTANT_CLIENT_SCOPE_CACHE.get(cacheKey);\n\tif (typeof cached === 'boolean') {\n\t\treturn cached;\n\t}\n\ttry {\n\t\tconst indexes = await db.collection(normalizedCollection).indexes();\n\t\tconst hasIndex = Array.isArray(indexes)\n\t\t\t&& indexes.some((entry: any) => entry?.key && Object.prototype.hasOwnProperty.call(entry.key, 'id_client'));\n\t\tAI_ASSISTANT_CLIENT_SCOPE_CACHE.set(cacheKey, hasIndex);\n\t\treturn hasIndex;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction applyClientScopeFilter(query: Record<string, any>, idClient?: string, isSuperAdmin = false): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedClient = normalizeOptionalString(idClient);\n\tif (!normalizedClient) {\n\t\treturn query;\n\t}\n\treturn {\n\t\t$and: [query, { id_client: normalizedClient }]\n\t};\n}\n\nfunction applyCustomerScopeFilter(\n\tquery: Record<string, any>,\n\tcollection: string,\n\tidCustomer?: string,\n\tisSuperAdmin = false\n): Record<string, any> {\n\tif (isSuperAdmin) {\n\t\treturn query;\n\t}\n\tconst normalizedCustomer = normalizeOptionalString(idCustomer);\n\tif (!normalizedCustomer) {\n\t\treturn query;\n\t}\n\tconst normalizedCollection = normalizeOptionalString(collection).toLowerCase();\n\tconst customerField = normalizedCollection === 'users' || normalizedCollection === 'user-versions'\n\t\t? 'other.id_customer'\n\t\t: 'id_customer';\n\treturn {\n\t\t$and: [query, { [customerField]: normalizedCustomer }]\n\t};\n}\n\nfunction userHasViewPermission(user: any, view: string): boolean {\n\tif (!user || !view) {\n\t\treturn false;\n\t}\n\tif (user.roles?.super_admin) {\n\t\treturn true;\n\t}\n\tconst groups = Array.isArray(user.roles?.groups) ? user.roles.groups : [];\n\tconst miscs = Array.isArray(user.roles?.miscs) ? user.roles.miscs : [];\n\tif (groups.some(group => Array.isArray(group.views) && group.views.some(v => v.startsWith(view)))) {\n\t\treturn true;\n\t}\n\tif (miscs.some(v => v.startsWith(view))) {\n\t\treturn true;\n\t}\n\tif (groups.some(group => group.name === view)) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction userHasAnyViewPermission(user: any, views: string[]): boolean {\n\tif (!user || !Array.isArray(views)) {\n\t\treturn false;\n\t}\n\treturn views.some(view => view && userHasViewPermission(user, view));\n}\n\nfunction userHasInvoiceAccess(user: any): boolean {\n\treturn userHasAnyViewPermission(user, ['/invoice', '/report/invoice']);\n}\n\nfunction requiresInvoicePermission(collection: string): boolean {\n\tconst normalized = normalizeOptionalString(collection).toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn normalized.includes('invoice');\n}\n\nfunction redactSensitiveFields(value: any): any {\n\tif (Array.isArray(value)) {\n\t\treturn value.map(entry => redactSensitiveFields(entry));\n\t}\n\tif (!value || typeof value !== 'object') {\n\t\treturn value;\n\t}\n\tconst result: Record<string, any> = {};\n\tObject.keys(value).forEach((key) => {\n\t\tif (shouldRedactField(key)) {\n\t\t\treturn;\n\t\t}\n\t\tresult[key] = redactSensitiveFields(value[key]);\n\t});\n\treturn result;\n}\n\nfunction shouldRedactField(key: string): boolean {\n\tconst normalized = String(key || '').trim().toLowerCase();\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\treturn AI_ASSISTANT_SENSITIVE_FIELDS.some((field) => normalized === field || normalized.includes(field));\n}\n\nfunction resolveCodexTimeoutMs(): number {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalNumber(config['AI_ASSISTANT_CODEX_TIMEOUT_MS'] || process.env.AI_ASSISTANT_CODEX_TIMEOUT_MS);\n\tif (raw && raw > 0) {\n\t\treturn round(raw);\n\t}\n\treturn DEFAULT_CODEX_TIMEOUT_MS;\n}\n\nfunction resolveCodexWorkerThreadEnabled(): boolean {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_USE_WORKER_THREAD']\n\t\t|| process.env.AI_ASSISTANT_CODEX_USE_WORKER_THREAD\n\t\t|| config['AI_ASSISTANT_CODEX_WORKER_THREAD']\n\t\t|| process.env.AI_ASSISTANT_CODEX_WORKER_THREAD\n\t);\n\tconst normalized = normalizeOptionalBoolean(raw);\n\tif (typeof normalized === 'boolean') {\n\t\treturn normalized;\n\t}\n\treturn process.env.IS_WORKER_INSTANCE !== 'true';\n}\n\nfunction resolveCodexModel(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst raw = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_CODEX_MODEL']\n\t\t|| process.env.AI_ASSISTANT_CODEX_MODEL\n\t\t|| config['AI_TERMINAL_CODEX_MODEL']\n\t\t|| process.env.AI_TERMINAL_CODEX_MODEL\n\t\t|| config['AI_DASHBOARD_CODEX_MODEL']\n\t\t|| process.env.AI_DASHBOARD_CODEX_MODEL\n\t);\n\treturn raw || DEFAULT_CODEX_MODEL;\n}\n\nfunction resolveCodexSettings(): CodexConfig {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: resolveCodexModel(),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction getAssistantCodexClient(): CodexClient {\n\tif (!assistantCodexClient) {\n\t\tassistantCodexClient = new CodexClient(resolveCodexSettings());\n\t}\n\treturn assistantCodexClient;\n}\n\nclass CodexWorkerBootstrapError extends Error {\n\tconstructor(message: string) {\n\t\tsuper(message);\n\t\tthis.name = 'CodexWorkerBootstrapError';\n\t}\n}\n\nasync function runCodexInWorkerThread(prompt: string, runOptions: CodexRunOptions, config: CodexConfig): Promise<string> {\n\tif (!resolveCodexWorkerThreadEnabled()) {\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n\n\tconst workerPath = await resolveCodexWorkerPath();\n\tif (!workerPath) {\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n\n\ttry {\n\t\treturn await runCodexInWorkerThreadInternal(workerPath, prompt, runOptions, config);\n\t}\n\tcatch (error) {\n\t\tif (!(error instanceof CodexWorkerBootstrapError)) {\n\t\t\tthrow error;\n\t\t}\n\t\tconsole.error('Codex worker bootstrap failed, falling back to in-process run.', error);\n\t\tconst codexClient = getAssistantCodexClient();\n\t\treturn await codexClient.run(prompt, runOptions);\n\t}\n}\n\nasync function runCodexInWorkerThreadInternal(workerPath: string, prompt: string, runOptions: CodexRunOptions, config: CodexConfig): Promise<string> {\n\tconst sanitizedOptions = sanitizeCodexRunOptions(runOptions);\n\tlet worker: Worker;\n\n\ttry {\n\t\tworker = new Worker(workerPath, {\n\t\t\tworkerData: {\n\t\t\t\tprompt,\n\t\t\t\trunOptions: sanitizedOptions,\n\t\t\t\tconfig\n\t\t\t}\n\t\t});\n\t}\n\tcatch (error) {\n\t\tconst wrapped = new CodexWorkerBootstrapError('Failed to start codex worker.');\n\t\tif (error instanceof Error && error.stack) {\n\t\t\twrapped.stack = error.stack;\n\t\t}\n\t\tthrow wrapped;\n\t}\n\n\tconst timeoutMs = (sanitizedOptions?.timeoutMs || resolveCodexTimeoutMs()) + 15000;\n\tconst timeoutController = new AbortController();\n\tconst timeoutPromise = (async () => {\n\t\ttry {\n\t\t\tawait sleepTimeout(timeoutMs, null, { signal: timeoutController.signal });\n\t\t\treturn { type: 'timeout' as const };\n\t\t}\n\t\tcatch (error: any) {\n\t\t\tif (error?.name === 'AbortError') {\n\t\t\t\treturn { type: 'aborted' as const };\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t})();\n\n\tconst messagePromise = (async () => {\n\t\tconst [message] = await once(worker, 'message');\n\t\treturn { type: 'message' as const, message: message as CodexWorkerResponse };\n\t})();\n\tconst errorPromise = (async () => {\n\t\tconst [error] = await once(worker, 'error');\n\t\treturn { type: 'error' as const, error: error as Error };\n\t})();\n\tconst exitPromise = (async () => {\n\t\tconst [code] = await once(worker, 'exit');\n\t\treturn { type: 'exit' as const, code: code as number };\n\t})();\n\n\tlet outcome: { type: 'message'; message: CodexWorkerResponse }\n\t\t| { type: 'error'; error: Error }\n\t\t| { type: 'exit'; code: number }\n\t\t| { type: 'timeout' }\n\t\t| { type: 'aborted' };\n\n\ttry {\n\t\toutcome = await Promise.race([messagePromise, errorPromise, exitPromise, timeoutPromise]);\n\t}\n\tfinally {\n\t\ttimeoutController.abort();\n\t\tworker.removeAllListeners('message');\n\t\tworker.removeAllListeners('error');\n\t\tworker.removeAllListeners('exit');\n\t}\n\n\tif (outcome.type === 'message') {\n\t\tawait terminateWorker(worker);\n\t\tif (outcome.message && outcome.message.ok) {\n\t\t\treturn outcome.message.result || '';\n\t\t}\n\t\tthrow new Error(outcome.message?.error || 'Codex worker failed.');\n\t}\n\n\tif (outcome.type === 'timeout') {\n\t\tawait terminateWorker(worker);\n\t\tthrow new CodexWorkerBootstrapError('Codex worker timed out.');\n\t}\n\n\tif (outcome.type === 'error') {\n\t\tawait terminateWorker(worker);\n\t\tconst wrapped = new CodexWorkerBootstrapError('Codex worker errored before completing.');\n\t\tif (outcome.error?.stack) {\n\t\t\twrapped.stack = outcome.error.stack;\n\t\t}\n\t\tthrow wrapped;\n\t}\n\n\tif (outcome.type === 'exit') {\n\t\tthrow new CodexWorkerBootstrapError(`Codex worker exited before completing (code ${outcome.code}).`);\n\t}\n\n\tthrow new CodexWorkerBootstrapError('Codex worker aborted before completing.');\n}\n\nasync function terminateWorker(worker: Worker): Promise<void> {\n\ttry {\n\t\tawait worker.terminate();\n\t}\n\tcatch {\n\t\t// Ignore termination errors.\n\t}\n}\n\nfunction sanitizeCodexRunOptions(options: CodexRunOptions): CodexRunOptions {\n\tif (!options) {\n\t\treturn {};\n\t}\n\treturn {\n\t\ttimeoutMs: options.timeoutMs,\n\t\tthreadOptions: options.threadOptions,\n\t\tthreadKey: options.threadKey,\n\t\treuseThread: options.reuseThread\n\t};\n}\n\nasync function resolveCodexWorkerPath(): Promise<string | null> {\n\tconst jsPath = path.join(__dirname, '../workers/codex-runner.worker.js');\n\tif (await pathExists(jsPath)) {\n\t\treturn jsPath;\n\t}\n\tconst tsPath = path.join(__dirname, '../workers/codex-runner.worker.ts');\n\tif (await pathExists(tsPath)) {\n\t\treturn tsPath;\n\t}\n\treturn null;\n}\n\nasync function pathExists(target: string): Promise<boolean> {\n\ttry {\n\t\tconst stat = await fs.stat(target);\n\t\treturn stat.isFile();\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nasync function resolveAssistantWorkspaceRoot(): Promise<string> {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(\n\t\tconfig['AI_ASSISTANT_WORKSPACE_ROOT']\n\t\t|| process.env.AI_ASSISTANT_WORKSPACE_ROOT\n\t\t|| config['CODEX_WORKSPACE_ROOT']\n\t\t|| process.env.CODEX_WORKSPACE_ROOT\n\t);\n\tconst candidate = configured || ResolveIOServer.getClientDir() || process.cwd();\n\tlet stat = null;\n\ttry {\n\t\tstat = await fs.stat(candidate);\n\t}\n\tcatch {\n\t\tstat = null;\n\t}\n\tif (!stat || !stat.isDirectory()) {\n\t\tthrow new Error('AI assistant workspace root not found.');\n\t}\n\treturn candidate;\n}\n\nfunction buildAssistantCodexPrompt(message: string, attachmentText: string, historyText: string, contextText?: string): string {\n\tconst trimmedContext = normalizeOptionalString(contextText);\n\tconst contextBlock = trimmedContext ? `\\n\\nContext:\\n${trimmedContext}` : '';\n\tconst trimmedHistory = normalizeOptionalString(historyText);\n\tconst historyBlock = trimmedHistory ? `\\n\\nConversation so far:\\n${trimmedHistory}` : '';\n\treturn `System:\\n${AI_ASSISTANT_SYSTEM_PROMPT}${contextBlock}${historyBlock}\\n\\nUser:\\n${message}${attachmentText || ''}`.trim();\n}\n\nfunction buildAssistantContext(\n\tinput: AiCodexRunInput,\n\tuserContext?: { isSuperAdmin?: boolean; hasInvoiceAccess?: boolean; customerId?: string }\n): string {\n\tconst lines: string[] = [];\n\tconst idApp = normalizeOptionalString(input?.id_app);\n\tif (idApp) {\n\t\tlines.push(`Current app id: ${idApp}`);\n\t}\n\tif (typeof userContext?.isSuperAdmin === 'boolean') {\n\t\tlines.push(`User is super admin: ${userContext.isSuperAdmin ? 'yes' : 'no'}`);\n\t}\n\tif (typeof userContext?.hasInvoiceAccess === 'boolean') {\n\t\tlines.push(`User has invoice access: ${userContext.hasInvoiceAccess ? 'yes' : 'no'}`);\n\t}\n\tconst customerId = normalizeOptionalString(userContext?.customerId);\n\tif (customerId) {\n\t\tlines.push('Customer portal scope: yes');\n\t\tlines.push(`Customer id: ${customerId}`);\n\t}\n\tconst contextMode = normalizeOptionalString(input?.context?.mode);\n\tconst contextRoute = normalizeOptionalString(input?.context?.route);\n\tif (contextMode) {\n\t\tlines.push(`Context scope: ${contextMode === 'current' ? 'current page' : contextMode}`);\n\t}\n\tif (contextRoute) {\n\t\tlines.push(`Current page route: ${contextRoute}`);\n\t}\n\tconst mongoDb = normalizeOptionalString(input?.mongo?.database);\n\tconst mongoDbs = Array.isArray(input?.mongo?.databases)\n\t\t? input.mongo.databases.map(value => normalizeOptionalString(value)).filter(Boolean)\n\t\t: [];\n\tconst mongoAccess = normalizeOptionalString(input?.mongo?.access)\n\t\t|| (input?.mongo?.readonly === true ? 'read' : '');\n\tif (mongoDb) {\n\t\tlines.push(`Mongo database: ${mongoDb}`);\n\t}\n\tif (mongoDbs.length) {\n\t\tlines.push(`Mongo databases allowed: ${mongoDbs.join(', ')}`);\n\t}\n\tif (mongoAccess) {\n\t\tlines.push(`Mongo access: ${mongoAccess}`);\n\t}\n\treturn lines.join('\\n');\n}\n\ntype ClientRouteIndex = {\n\tset: Set<string>;\n\tmap: Map<string, string>;\n\tsize: number;\n};\n\nlet cachedClientRouteIndex: ClientRouteIndex | null = null;\n\nfunction normalizeRouteKey(value: string): string {\n\tconst trimmed = normalizeOptionalString(value);\n\tif (!trimmed) {\n\t\treturn '';\n\t}\n\tconst withSlash = trimmed.startsWith('/') ? trimmed : `/${trimmed}`;\n\treturn withSlash.replace(/\\/+$/, '');\n}\n\nfunction normalizeRouteMatchKey(value: string): string {\n\treturn normalizeRouteKey(value).toLowerCase();\n}\n\nfunction buildClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tconst set = new Set<string>();\n\tconst map = new Map<string, string>();\n\tfor (const route of routes) {\n\t\tconst normalized = normalizeRouteKey(route);\n\t\tif (!normalized) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst matchKey = normalized.toLowerCase();\n\t\tset.add(matchKey);\n\t\tif (!map.has(matchKey)) {\n\t\t\tmap.set(matchKey, normalized);\n\t\t}\n\t}\n\treturn { set, map, size: routes.length };\n}\n\nfunction getClientRouteIndex(): ClientRouteIndex {\n\tconst routes = ResolveIOServer.getClientRoutes?.() || [];\n\tif (cachedClientRouteIndex && cachedClientRouteIndex.size === routes.length) {\n\t\treturn cachedClientRouteIndex;\n\t}\n\tcachedClientRouteIndex = buildClientRouteIndex();\n\treturn cachedClientRouteIndex;\n}\n\nfunction splitRouteSuffix(value: string): { base: string; suffix: string } {\n\tconst matchIndex = value.search(/[?#]/);\n\tif (matchIndex === -1) {\n\t\treturn { base: value, suffix: '' };\n\t}\n\treturn { base: value.slice(0, matchIndex), suffix: value.slice(matchIndex) };\n}\n\nfunction isClientRoute(value: string, index: ClientRouteIndex): boolean {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn false;\n\t}\n\tif (index.set.has(normalized)) {\n\t\treturn true;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\twhile (parts.length > 1) {\n\t\tparts.pop();\n\t\tconst prefix = `/${parts.join('/')}`;\n\t\tif (index.set.has(prefix)) {\n\t\t\treturn true;\n\t\t}\n\t}\n\treturn false;\n}\n\nfunction getCanonicalRoute(value: string, index: ClientRouteIndex): string | null {\n\tconst normalized = normalizeRouteMatchKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\treturn index.map.get(normalized) || null;\n}\n\nfunction swapTwoSegmentRoute(value: string): string | null {\n\tconst normalized = normalizeRouteKey(value);\n\tif (!normalized) {\n\t\treturn null;\n\t}\n\tconst parts = normalized.split('/').filter(Boolean);\n\tif (parts.length !== 2) {\n\t\treturn null;\n\t}\n\treturn `/${parts[1]}/${parts[0]}`;\n}\n\nfunction normalizeAssistantRoutes(value: string): string {\n\tconst index = getClientRouteIndex();\n\tif (!index.set.size) {\n\t\treturn value;\n\t}\n\tconst routePattern = /\\/[a-z0-9][a-z0-9/_-]*(?:\\?[a-z0-9=&%._-]+)?(?:#[a-z0-9._-]+)?/gi;\n\treturn value.replace(routePattern, (match) => {\n\t\tconst { base, suffix } = splitRouteSuffix(match);\n\t\tif (isClientRoute(base, index)) {\n\t\t\tconst canonical = getCanonicalRoute(base, index);\n\t\t\treturn canonical ? `${canonical}${suffix}` : match;\n\t\t}\n\t\tconst swapped = swapTwoSegmentRoute(base);\n\t\tif (!swapped || !isClientRoute(swapped, index)) {\n\t\t\treturn match;\n\t\t}\n\t\tconst canonical = getCanonicalRoute(swapped, index) || swapped;\n\t\treturn `${canonical}${suffix}`;\n\t});\n}\n\nfunction sanitizeAssistantResponse(value: string): string {\n\tconst raw = normalizeOptionalString(value);\n\tif (!raw) {\n\t\treturn 'I could not generate a response. Please try again.';\n\t}\n\tconst withoutBlocks = raw.replace(/```[\\\\s\\\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();\n\tconst stripEstimated = (line: string) => line.replace(/\\bEstimated (human )?hours:\\s*.*$/i, '').trimEnd();\n\tconst isTentativeQueryLine = (line: string) => {\n\t\tconst normalized = line.trim().replace(/^[-*•]+\\s*/, '');\n\t\treturn /^i\\s+(can|will|['’]ll|am going to|['’]m going to)\\s+(pull|run|query|get|fetch|look up|retrieve|grab)\\b/i.test(normalized);\n\t};\n\tconst cleanedLines: string[] = [];\n\twithoutBlocks.split('\\n').forEach((line) => {\n\t\tconst trimmed = line.trim();\n\t\tif (!trimmed) {\n\t\t\tcleanedLines.push(line);\n\t\t\treturn;\n\t\t}\n\t\tif (isTentativeQueryLine(line)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^work ticket summary:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^estimated (human )?hours:/i.test(trimmed)) {\n\t\t\treturn;\n\t\t}\n\t\tif (/^customer-facing summary:/i.test(trimmed)) {\n\t\t\tconst stripped = line.replace(/^(\\s*)customer-facing summary:\\s*/i, '$1');\n\t\t\tconst cleaned = stripEstimated(stripped);\n\t\t\tif (cleaned.trim()) {\n\t\t\t\tcleanedLines.push(cleaned);\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tcleanedLines.push(stripEstimated(line));\n\t});\n\tconst cleaned = cleanedLines.join('\\n').trim();\n\tif (!cleaned) {\n\t\treturn 'I can’t share code, but I can point you to files or explain behavior at a high level.';\n\t}\n\treturn normalizeAssistantRoutes(cleaned);\n}\n\nfunction evaluateAssistantGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string; response: string }> = [\n\t\t{\n\t\t\tpattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|snippet|file|function|class|script|sql)\\b/i,\n\t\t\treason: 'Code sharing is restricted.',\n\t\t\tresponse: 'I can’t share code or file contents. All code is proprietary. I can explain behavior and point you to screens or routes.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(write|generate|create|implement|fix)\\b.*\\b(code|script|function|class|endpoint|sql)\\b/i,\n\t\t\treason: 'Code generation is restricted.',\n\t\t\tresponse: 'I can’t generate code. All code is proprietary. I can explain how the feature works and where to look in the product.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i,\n\t\t\treason: 'Credentials and secrets are restricted.',\n\t\t\tresponse: 'I can’t help with credentials or secrets. If you need access, please contact support.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(delete|drop|truncate)\\s+(database|db|schema)\\b/i,\n\t\t\treason: 'Database operations are restricted.',\n\t\t\tresponse: 'I can’t help with database operations. I can explain system behavior or file locations.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(shell|terminal|ssh|sudo|rm\\\\s+-rf|chmod|chown)\\b/i,\n\t\t\treason: 'System operations are restricted.',\n\t\t\tresponse: 'I can’t help with system operations. I can explain workflows and where to find related code.'\n\t\t},\n\t\t{\n\t\t\tpattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos|hack)\\b/i,\n\t\t\treason: 'Security abuse is restricted.',\n\t\t\tresponse: 'I can’t assist with that request.'\n\t\t}\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: entry.response\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nfunction resolveOpenAISettings(config: any) {\n\tconst serverConfig = ResolveIOServer.getServerConfig() || {};\n\tconst apiKey = (serverConfig['OPENAI_API_KEY'] || process.env.OPENAI_API_KEY || '').trim();\n\tif (!apiKey) {\n\t\tthrow new Error('OpenAI API key missing. Add OPENAI_API_KEY to server config.');\n\t}\n\treturn {\n\t\tapiKey,\n\t\tbaseUrl: (serverConfig['OPENAI_BASE_URL'] || process.env.OPENAI_BASE_URL || '').trim() || undefined,\n\t\tmodel: normalizeOptionalString(config?.model) || (serverConfig['OPENAI_MODEL'] || process.env.OPENAI_MODEL || 'gpt-5.1').trim(),\n\t\ttemperature: normalizeOptionalNumber(config?.temperature),\n\t\tmaxTokens: normalizeOptionalNumber(config?.max_tokens),\n\t\tmaxRetries: normalizeOptionalNumber(serverConfig['OPENAI_MAX_RETRIES'] || process.env.OPENAI_MAX_RETRIES),\n\t\tretryDelayMs: normalizeOptionalNumber(serverConfig['OPENAI_RETRY_DELAY_MS'] || process.env.OPENAI_RETRY_DELAY_MS)\n\t};\n}\n\nfunction buildAiFormSystemPrompt(): string {\n\treturn AI_FORM_PATCH_SYSTEM_PROMPT;\n}\n\nfunction buildAiFormUserPrompt(\n\tmessage: string,\n\tfields: Array<AiFormField>,\n\tpatchFormat?: string,\n\troute?: string\n): string {\n\tconst lines: string[] = [];\n\tlines.push(`User request: ${message}`);\n\tconst normalizedRoute = normalizeOptionalString(route);\n\tif (normalizedRoute) {\n\t\tlines.push(`Current route: ${normalizedRoute}`);\n\t}\n\tif (patchFormat) {\n\t\tlines.push('Patch format:');\n\t\tlines.push(patchFormat);\n\t}\n\tlines.push('Allowed fields:');\n\tfields.forEach((field) => {\n\t\tconst name = field.name || '';\n\t\tif (!name) {\n\t\t\treturn;\n\t\t}\n\t\tconst parts = [name];\n\t\tif (field.type) {\n\t\t\tparts.push(`type=${field.type}`);\n\t\t}\n\t\tif (field.label) {\n\t\t\tparts.push(`label=\"${field.label}\"`);\n\t\t}\n\t\tif (Array.isArray(field.enums) && field.enums.length) {\n\t\t\tparts.push(`enums=${field.enums.join('|')}`);\n\t\t}\n\t\tlines.push(`- ${parts.join(' ')}`);\n\t});\n\tlines.push('Return JSON only.');\n\treturn lines.join('\\n');\n}\n\nfunction normalizeAiFormFields(fields: any): Array<AiFormField> {\n\tif (!Array.isArray(fields)) {\n\t\treturn [];\n\t}\n\treturn fields\n\t\t.map((field) => {\n\t\t\tif (!field || typeof field !== 'object') {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst name = normalizeOptionalString(field.name) || normalizeOptionalString(field.path);\n\t\t\tif (!name) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tconst type = normalizeOptionalString(field.type);\n\t\t\tconst label = normalizeOptionalString(field.label);\n\t\t\tconst enums = Array.isArray(field.enums)\n\t\t\t\t? field.enums.map((value: any) => normalizeOptionalString(value)).filter(Boolean)\n\t\t\t\t: undefined;\n\t\t\tconst normalizedField: AiFormField = { name };\n\t\t\tif (type) {\n\t\t\t\tnormalizedField.type = type;\n\t\t\t}\n\t\t\tif (label) {\n\t\t\t\tnormalizedField.label = label;\n\t\t\t}\n\t\t\tif (enums && enums.length) {\n\t\t\t\tnormalizedField.enums = enums;\n\t\t\t}\n\t\t\treturn normalizedField;\n\t\t})\n\t\t.filter((field): field is AiFormField => !!field);\n}\n\nfunction parseJsonObject(content: string): any | null {\n\tif (!content || typeof content !== 'string') {\n\t\treturn null;\n\t}\n\ttry {\n\t\treturn JSON.parse(content);\n\t}\n\tcatch {\n\t\tconst match = content.match(/\\{[\\s\\S]*\\}/);\n\t\tif (!match) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\treturn JSON.parse(match[0]);\n\t\t}\n\t\tcatch {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\nfunction resolveUploadLimits(): { maxFileBytes: number; maxFileMb: number; maxTotalBytes: number; maxTotalMb: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxFileMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_FILE_MB'] || process.env.AI_TERMINAL_MAX_FILE_MB) || DEFAULT_MAX_FILE_MB;\n\tconst maxTotalMb = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_MB'] || process.env.AI_TERMINAL_MAX_TOTAL_MB) || DEFAULT_MAX_TOTAL_MB;\n\treturn {\n\t\tmaxFileBytes: round(maxFileMb * 1024 * 1024),\n\t\tmaxFileMb,\n\t\tmaxTotalBytes: round(maxTotalMb * 1024 * 1024),\n\t\tmaxTotalMb\n\t};\n}\n\nfunction resolveUploadRoot(): string {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst configured = normalizeOptionalString(config['AI_TERMINAL_UPLOAD_ROOT'] || process.env.AI_TERMINAL_UPLOAD_ROOT);\n\tif (configured) {\n\t\treturn configured;\n\t}\n\treturn path.join(os.tmpdir(), 'resolveio-ai-terminal-uploads');\n}\n\nasync function handleCodexUpload(id_conversation: string, file_name: string, content_base64: string, size: number, content_type?: string) {\n\tconst limits = resolveUploadLimits();\n\tif (size > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tconst safeName = sanitizeFilename(file_name);\n\tconst uploadRoot = resolveUploadRoot();\n\tconst targetDir = path.join(uploadRoot, id_conversation);\n\tawait fs.mkdir(targetDir, { recursive: true });\n\tconst targetPath = path.join(targetDir, safeName);\n\tconst dataBuffer = Buffer.from(content_base64, 'base64');\n\tconst data = new Uint8Array(dataBuffer);\n\tif (data.byteLength > limits.maxFileBytes) {\n\t\tthrow new Error(`File exceeds ${limits.maxFileMb}MB limit.`);\n\t}\n\tawait fs.writeFile(targetPath, data);\n\treturn {\n\t\tid_file: objectIdHexString(),\n\t\tname: safeName,\n\t\tsize: data.byteLength,\n\t\ttype: normalizeOptionalString(content_type),\n\t\tlocal_path: targetPath\n\t};\n}\n\nasync function readAttachmentContents(attachments: AttachmentInput[]): Promise<{ promptText: string; attachments: AttachmentInput[] }> {\n\tif (!attachments || !attachments.length) {\n\t\treturn { promptText: '', attachments: [] };\n\t}\n\tconst limits = resolveAttachmentLimits();\n\tlet totalBytes = 0;\n\tlet totalChars = 0;\n\tconst chunks: string[] = [];\n\tconst cleaned: AttachmentInput[] = [];\n\n\tfor (const attachment of attachments) {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\tcontinue;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, resolveUploadRoot());\n\t\tif (!safe) {\n\t\t\tcontinue;\n\t\t}\n\t\ttry {\n\t\t\tconst stat = await fs.stat(localPath);\n\t\t\tif (!stat.isFile()) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttotalBytes += stat.size;\n\t\t\tif (totalBytes > limits.maxTotalBytes) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tconst ext = path.extname(localPath).toLowerCase();\n\t\t\tconst name = normalizeOptionalString(attachment.name) || path.basename(localPath);\n\t\t\tconst type = normalizeOptionalString(attachment.type);\n\t\t\tconst readable = isReadableAttachment(type, ext);\n\t\t\tlet content = '';\n\t\t\tif (readable) {\n\t\t\t\tcontent = await fs.readFile(localPath, 'utf8');\n\t\t\t\tif (content.length > limits.maxAttachmentChars) {\n\t\t\t\t\tcontent = content.slice(0, limits.maxAttachmentChars) + '\\n[...truncated]';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tcontent = `[${name} attached; binary content omitted]`;\n\t\t\t}\n\t\t\ttotalChars += content.length;\n\t\t\tif (totalChars > limits.maxTotalAttachmentChars) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tchunks.push(`File: ${name}\\n${content}`);\n\t\t\tcleaned.push({\n\t\t\t\tid: attachment.id,\n\t\t\t\tname,\n\t\t\t\ttype,\n\t\t\t\tsize: stat.size,\n\t\t\t\tlocal_path: localPath\n\t\t\t});\n\t\t}\n\t\tcatch {}\n\t}\n\n\treturn {\n\t\tpromptText: chunks.length ? `\\n\\nAttachments:\\n${chunks.join('\\n\\n')}` : '',\n\t\tattachments: cleaned\n\t};\n}\n\nfunction resolveAttachmentLimits(): { maxAttachmentChars: number; maxTotalAttachmentChars: number; maxTotalBytes: number } {\n\tconst config = ResolveIOServer.getServerConfig() || {};\n\tconst maxAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_ATTACHMENT_CHARS;\n\tconst maxTotalAttachmentChars = normalizeOptionalNumber(config['AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS'] || process.env.AI_TERMINAL_MAX_TOTAL_ATTACHMENT_CHARS)\n\t\t|| DEFAULT_MAX_TOTAL_ATTACHMENT_CHARS;\n\tconst limits = resolveUploadLimits();\n\treturn {\n\t\tmaxAttachmentChars,\n\t\tmaxTotalAttachmentChars,\n\t\tmaxTotalBytes: limits.maxTotalBytes\n\t};\n}\n\nfunction buildUserPrompt(template: string | undefined, inputText: string, attachmentText: string): string {\n\tconst data = {\n\t\tinput: inputText || '',\n\t\ttoday: new Date().toISOString().slice(0, 10)\n\t};\n\tif (template) {\n\t\treturn applyTemplate(template, data).trim() + attachmentText;\n\t}\n\treturn `${inputText || ''}${attachmentText}`.trim();\n}\n\nfunction applyTemplate(template: string, data: Record<string, string>): string {\n\tlet output = template;\n\tObject.keys(data).forEach(key => {\n\t\tconst value = data[key] || '';\n\t\tconst pattern = new RegExp(`{{\\\\s*${key}\\\\s*}}`, 'gi');\n\t\toutput = output.replace(pattern, value);\n\t});\n\treturn output;\n}\n\nfunction sanitizeConfig(source: any): any {\n\treturn {\n\t\tmode: normalizeOptionalString(source?.mode),\n\t\tmodel: normalizeOptionalString(source?.model),\n\t\tsystem_prompt: normalizeOptionalString(source?.system_prompt),\n\t\tuser_prompt_template: normalizeOptionalString(source?.user_prompt_template),\n\t\tresponse_format: normalizeOptionalString(source?.response_format),\n\t\ttemperature: normalizeOptionalNumber(source?.temperature),\n\t\tmax_tokens: normalizeOptionalNumber(source?.max_tokens)\n\t};\n}\n\nfunction resolveClientIdFromConfig(explicit?: string): string {\n\tconst config = ResolveIOServer.getServerConfig?.() || {};\n\treturn normalizeOptionalString(explicit)\n\t\t|| normalizeOptionalString(config['CLIENT_ID'] || config['client_id'] || process.env.CLIENT_ID || '');\n}\n\nasync function ensureConversation(input: AiTerminalRunInput, mode: 'openai' | 'codex'): Promise<AiTerminalConversationModel> {\n\tconst idConversation = normalizeOptionalString(input.id_conversation);\n\tif (idConversation) {\n\t\tconst existing = await AiTerminalConversations.findById(idConversation);\n\t\tif (existing) {\n\t\t\treturn existing as AiTerminalConversationModel;\n\t\t}\n\t}\n\tconst now = new Date();\n\tconst doc: Partial<AiTerminalConversationModel> = {\n\t\tid_client: resolveClientIdFromConfig(input.id_client),\n\t\tid_app: normalizeOptionalString(input.id_app),\n\t\ttitle: 'New Conversation',\n\t\tmode,\n\t\tbranch_enabled: mode === 'codex',\n\t\tstatus: normalizeConversationStatus('active'),\n\t\tprofile_id: normalizeOptionalString(input.profile_id),\n\t\tmetadata: {},\n\t\tcreatedAt: now,\n\t\tupdatedAt: now\n\t};\n\tconst result = await AiTerminalConversations.insertOne(doc as any);\n\treturn result as AiTerminalConversationModel;\n}\n\nasync function touchConversation(idConversation: string, timestamp: Date, lastMessageId?: string): Promise<void> {\n\tconst update: any = {\n\t\tupdatedAt: timestamp,\n\t\tlast_message_at: timestamp\n\t};\n\tif (lastMessageId) {\n\t\tupdate.last_message_id = lastMessageId;\n\t}\n\tawait AiTerminalConversations.updateOne({ _id: idConversation }, { $set: update });\n}\n\nfunction normalizeOptionalString(value: any): string {\n\tconst raw = typeof value === 'string' ? value.trim() : '';\n\treturn raw || '';\n}\n\nfunction normalizeConversationMode(value: any): AiTerminalMode {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'codex') {\n\t\treturn 'codex';\n\t}\n\treturn 'openai';\n}\n\nfunction normalizeConversationStatus(value: any): AiTerminalConversationStatus {\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (normalized === 'archived') {\n\t\treturn 'archived';\n\t}\n\treturn 'active';\n}\n\nfunction normalizeOptionalNumber(value: any): number | undefined {\n\tconst parsed = Number(value);\n\treturn Number.isFinite(parsed) ? parsed : undefined;\n}\n\nfunction normalizeOptionalBoolean(value: any): boolean | undefined {\n\tif (typeof value === 'boolean') {\n\t\treturn value;\n\t}\n\tconst normalized = normalizeOptionalString(value).toLowerCase();\n\tif (!normalized) {\n\t\treturn undefined;\n\t}\n\tif (['true', '1', 'yes', 'y', 'on'].includes(normalized)) {\n\t\treturn true;\n\t}\n\tif (['false', '0', 'no', 'n', 'off'].includes(normalized)) {\n\t\treturn false;\n\t}\n\treturn undefined;\n}\n\nfunction normalizeHistoryLimit(value: any): number {\n\tconst parsed = Number(value);\n\tif (!Number.isFinite(parsed)) {\n\t\treturn 12;\n\t}\n\treturn Math.min(Math.max(round(parsed), 0), 30);\n}\n\nfunction resolveClientId(conversation: AiTerminalConversationModel, inputClientId?: string): string {\n\treturn normalizeOptionalString(inputClientId)\n\t\t|| normalizeOptionalString(conversation?.id_client)\n\t\t|| resolveClientIdFromConfig();\n}\n\nfunction estimateUsage(messages: Array<{ role: string; content: string }>, responseText: string, model?: string) {\n\tconst inputTokens = countChatTokens(messages, model);\n\tconst outputTokens = countTokens(responseText || '', model);\n\treturn {\n\t\tinputTokens,\n\t\toutputTokens,\n\t\ttotalTokens: inputTokens + outputTokens\n\t};\n}\n\nfunction evaluateGuardrails(message: string): GuardrailResult | null {\n\tconst normalized = String(message || '').toLowerCase();\n\tconst patterns: Array<{ pattern: RegExp; reason: string }> = [\n\t\t{ pattern: /\\b(source\\s*code|full\\s*code|entire\\s*code|repo\\s*dump|repository|git\\s*clone)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(show|share|paste|provide|dump|output)\\b.*\\b(code|file|contents|snippet)\\b/i, reason: 'Code access is restricted.' },\n\t\t{ pattern: /\\b(credentials?|passwords?|secrets?|tokens?)\\b/i, reason: 'Credentials and secrets are restricted.' },\n\t\t{ pattern: /\\b(delete|drop)\\s+(database|db|schema)\\b/i, reason: 'Database operations are restricted.' },\n\t\t{ pattern: /\\b(shell|terminal|ssh|sudo|rm\\s+-rf|chmod|chown)\\b/i, reason: 'Server operations are restricted.' },\n\t\t{ pattern: /\\b(exploit|bypass|malware|phishing|ransomware|ddos)\\b/i, reason: 'Security abuse is restricted.' }\n\t];\n\tfor (const entry of patterns) {\n\t\tif (entry.pattern.test(normalized)) {\n\t\t\treturn {\n\t\t\t\tblocked: true,\n\t\t\t\treason: entry.reason,\n\t\t\t\tresponse: 'I can’t help with that request because it could expose proprietary code or protected information. If you need a change, describe the outcome and I can help within approved workflows.'\n\t\t\t};\n\t\t}\n\t}\n\treturn null;\n}\n\nasync function resolveIsSuperAdmin(id_user?: string): Promise<boolean> {\n\tif (!id_user) {\n\t\treturn false;\n\t}\n\ttry {\n\t\tconst user = await Users.findById(id_user);\n\t\treturn !!user?.roles?.super_admin;\n\t}\n\tcatch {\n\t\treturn false;\n\t}\n}\n\nfunction sanitizeFilename(value: string): string {\n\tconst trimmed = (value || '').trim();\n\tconst base = path.basename(trimmed);\n\treturn base.replace(/[^\\w.\\-]/g, '_') || `upload_${Date.now()}`;\n}\n\nfunction isReadableAttachment(type: string, ext: string): boolean {\n\tconst normalizedType = (type || '').toLowerCase();\n\tif (normalizedType.startsWith('text/')) {\n\t\treturn true;\n\t}\n\tif (['application/json', 'application/xml', 'application/csv'].includes(normalizedType)) {\n\t\treturn true;\n\t}\n\treturn ['.txt', '.md', '.json', '.csv', '.xml', '.log', '.yml', '.yaml', '.ts', '.tsx', '.js', '.jsx', '.css', '.scss', '.html', '.htm', '.sql'].includes(ext);\n}\n\nfunction ensurePathUnderRoot(targetPath: string, root: string): boolean {\n\tconst resolvedRoot = path.resolve(root);\n\tconst resolvedTarget = path.resolve(targetPath);\n\treturn resolvedTarget.startsWith(resolvedRoot);\n}\n\nasync function cleanupAttachments(attachments: AttachmentInput[]): Promise<void> {\n\tif (!attachments || !attachments.length) {\n\t\treturn;\n\t}\n\tconst uploadRoot = resolveUploadRoot();\n\tconst removals = attachments.map(async (attachment) => {\n\t\tconst localPath = normalizeOptionalString(attachment.local_path);\n\t\tif (!localPath) {\n\t\t\treturn;\n\t\t}\n\t\tconst safe = ensurePathUnderRoot(localPath, uploadRoot);\n\t\tif (!safe) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tawait fs.rm(localPath, { force: true });\n\t\t}\n\t\tcatch {}\n\t});\n\tawait Promise.all(removals);\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@resolveio/server-lib",
3
- "version": "20.14.29",
3
+ "version": "20.14.30",
4
4
  "description": "",
5
5
  "scripts": {
6
6
  "package": "./build_package.sh",