@resolveio/server-lib 20.14.2 → 20.14.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/methods/ai-terminal.js +55 -6
- package/methods/ai-terminal.js.map +1 -1
- package/methods/report-builder.js +145 -57
- package/methods/report-builder.js.map +1 -1
- package/package.json +1 -1
- package/util/tokenizer.js +7 -1
- package/util/tokenizer.js.map +1 -1
package/methods/ai-terminal.js
CHANGED
|
@@ -73,7 +73,12 @@ var AI_ASSISTANT_SYSTEM_PROMPT = [
|
|
|
73
73
|
'- Do not modify files, run destructive commands, or access databases.',
|
|
74
74
|
'- Do not access secrets, credentials, or user data.',
|
|
75
75
|
'- Do not assist with hacking, bypassing security, or abuse.',
|
|
76
|
-
'- Prefer high-level explanations and point to file paths
|
|
76
|
+
'- Prefer high-level explanations and point to routes instead of code. Only mention file paths if explicitly requested.',
|
|
77
|
+
'- 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.',
|
|
78
|
+
'- Avoid vague labels like "Operations app"; use the specific screen/workflow name.',
|
|
79
|
+
'- Do not mention other client projects or ask which client; stay within the current project context.',
|
|
80
|
+
'- Respond with a single concise message. Do not add labels like "Customer-facing summary" or "Work ticket summary" and do not include estimated hours.',
|
|
81
|
+
'- If context scope is provided (ex: current page), prioritize that screen in your answer.',
|
|
77
82
|
'- If a request is out of scope, offer to create a support ticket with a short summary.',
|
|
78
83
|
'- Keep responses concise and use low reasoning effort.'
|
|
79
84
|
].join('\n');
|
|
@@ -557,7 +562,7 @@ function executeAiAssistantCodexRun(payload, context) {
|
|
|
557
562
|
historyLines.push("".concat(role, ": ").concat(content));
|
|
558
563
|
}
|
|
559
564
|
});
|
|
560
|
-
prompt = buildAssistantCodexPrompt(message, attachmentData.promptText, historyLines.join('\n'));
|
|
565
|
+
prompt = buildAssistantCodexPrompt(message, attachmentData.promptText, historyLines.join('\n'), buildAssistantContext(input));
|
|
561
566
|
return [4 /*yield*/, resolveAssistantWorkspaceRoot()];
|
|
562
567
|
case 11:
|
|
563
568
|
workspaceRoot = _b.sent();
|
|
@@ -690,10 +695,29 @@ function resolveAssistantWorkspaceRoot() {
|
|
|
690
695
|
});
|
|
691
696
|
});
|
|
692
697
|
}
|
|
693
|
-
function buildAssistantCodexPrompt(message, attachmentText, historyText) {
|
|
698
|
+
function buildAssistantCodexPrompt(message, attachmentText, historyText, contextText) {
|
|
699
|
+
var trimmedContext = normalizeOptionalString(contextText);
|
|
700
|
+
var contextBlock = trimmedContext ? "\n\nContext:\n".concat(trimmedContext) : '';
|
|
694
701
|
var trimmedHistory = normalizeOptionalString(historyText);
|
|
695
702
|
var historyBlock = trimmedHistory ? "\n\nConversation so far:\n".concat(trimmedHistory) : '';
|
|
696
|
-
return "System:\n".concat(AI_ASSISTANT_SYSTEM_PROMPT).concat(historyBlock, "\n\nUser:\n").concat(message).concat(attachmentText || '').trim();
|
|
703
|
+
return "System:\n".concat(AI_ASSISTANT_SYSTEM_PROMPT).concat(contextBlock).concat(historyBlock, "\n\nUser:\n").concat(message).concat(attachmentText || '').trim();
|
|
704
|
+
}
|
|
705
|
+
function buildAssistantContext(input) {
|
|
706
|
+
var _a, _b;
|
|
707
|
+
var lines = [];
|
|
708
|
+
var idApp = normalizeOptionalString(input === null || input === void 0 ? void 0 : input.id_app);
|
|
709
|
+
if (idApp) {
|
|
710
|
+
lines.push("Current app id: ".concat(idApp));
|
|
711
|
+
}
|
|
712
|
+
var contextMode = normalizeOptionalString((_a = input === null || input === void 0 ? void 0 : input.context) === null || _a === void 0 ? void 0 : _a.mode);
|
|
713
|
+
var contextRoute = normalizeOptionalString((_b = input === null || input === void 0 ? void 0 : input.context) === null || _b === void 0 ? void 0 : _b.route);
|
|
714
|
+
if (contextMode) {
|
|
715
|
+
lines.push("Context scope: ".concat(contextMode === 'current' ? 'current page' : contextMode));
|
|
716
|
+
}
|
|
717
|
+
if (contextRoute) {
|
|
718
|
+
lines.push("Current page route: ".concat(contextRoute));
|
|
719
|
+
}
|
|
720
|
+
return lines.join('\n');
|
|
697
721
|
}
|
|
698
722
|
function sanitizeAssistantResponse(value) {
|
|
699
723
|
var raw = normalizeOptionalString(value);
|
|
@@ -701,10 +725,35 @@ function sanitizeAssistantResponse(value) {
|
|
|
701
725
|
return 'I could not generate a response. Please try again.';
|
|
702
726
|
}
|
|
703
727
|
var withoutBlocks = raw.replace(/```[\\s\\S]*?```/g, '').replace(/`([^`]+)`/g, '$1').trim();
|
|
704
|
-
|
|
728
|
+
var stripEstimated = function (line) { return line.replace(/\bEstimated (human )?hours:\s*.*$/i, '').trimEnd(); };
|
|
729
|
+
var cleanedLines = [];
|
|
730
|
+
withoutBlocks.split('\n').forEach(function (line) {
|
|
731
|
+
var trimmed = line.trim();
|
|
732
|
+
if (!trimmed) {
|
|
733
|
+
cleanedLines.push(line);
|
|
734
|
+
return;
|
|
735
|
+
}
|
|
736
|
+
if (/^work ticket summary:/i.test(trimmed)) {
|
|
737
|
+
return;
|
|
738
|
+
}
|
|
739
|
+
if (/^estimated (human )?hours:/i.test(trimmed)) {
|
|
740
|
+
return;
|
|
741
|
+
}
|
|
742
|
+
if (/^customer-facing summary:/i.test(trimmed)) {
|
|
743
|
+
var stripped = line.replace(/^(\s*)customer-facing summary:\s*/i, '$1');
|
|
744
|
+
var cleaned_1 = stripEstimated(stripped);
|
|
745
|
+
if (cleaned_1.trim()) {
|
|
746
|
+
cleanedLines.push(cleaned_1);
|
|
747
|
+
}
|
|
748
|
+
return;
|
|
749
|
+
}
|
|
750
|
+
cleanedLines.push(stripEstimated(line));
|
|
751
|
+
});
|
|
752
|
+
var cleaned = cleanedLines.join('\n').trim();
|
|
753
|
+
if (!cleaned) {
|
|
705
754
|
return 'I can’t share code, but I can point you to files or explain behavior at a high level.';
|
|
706
755
|
}
|
|
707
|
-
return
|
|
756
|
+
return cleaned;
|
|
708
757
|
}
|
|
709
758
|
function evaluateAssistantGuardrails(message) {
|
|
710
759
|
var e_1, _a;
|
|
@@ -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 * as os from 'os';\nimport * as path from 'path';\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 { 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;\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'- Do not provide code snippets, full code, or file contents.',\n\t'- Do not modify files, run destructive commands, or access databases.',\n\t'- Do not access secrets, credentials, or user data.',\n\t'- Do not assist with hacking, bypassing security, or abuse.',\n\t'- Prefer high-level explanations and point to file paths or routes.',\n\t'- If a request is out of scope, offer to create a support ticket with a short summary.',\n\t'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: 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\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\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\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\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantCodexRun(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 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 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(message, attachmentData.promptText, historyLines.join('\\n'));\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexClient = getAssistantCodexClient();\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 codexClient.run(prompt, runOptions);\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\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 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\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): string {\n\tconst trimmedHistory = normalizeOptionalString(historyText);\n\tconst historyBlock = trimmedHistory ? `\\n\\nConversation so far:\\n${trimmedHistory}` : '';\n\treturn `System:\\n${AI_ASSISTANT_SYSTEM_PROMPT}${historyBlock}\\n\\nUser:\\n${message}${attachmentText || ''}`.trim();\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\tif (!withoutBlocks) {\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 withoutBlocks;\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. I can explain behavior and point you to file paths 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. I can explain how the feature works and where to look in the project.'\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 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 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(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 impact system security or expose 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 * as os from 'os';\nimport * as path from 'path';\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 { 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;\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'- Do not provide code snippets, full code, or file contents.',\n\t'- Do not modify files, run destructive commands, or access databases.',\n\t'- Do not access secrets, credentials, or user data.',\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'- 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'- 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'- Keep responses concise and use low reasoning effort.'\n].join('\\n');\n\nlet assistantCodexClient: CodexClient | null = null;\n\ntype GuardrailResult = { blocked: boolean; response: string; reason: 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\tattachments?: AttachmentInput[];\n\tdelete_files_after_run?: boolean;\n\tmax_history?: number;\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\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\tfunction: async function(payload) {\n\t\t\t\treturn await executeAiAssistantCodexRun(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 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 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)\n\t);\n\tconst workspaceRoot = await resolveAssistantWorkspaceRoot();\n\tconst codexClient = getAssistantCodexClient();\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 codexClient.run(prompt, runOptions);\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\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 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\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(input: AiCodexRunInput): 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\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\treturn lines.join('\\n');\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 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. I can explain behavior and point you to file paths 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. I can explain how the feature works and where to look in the project.'\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 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 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(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 impact system security or expose 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"]}
|