@resolveio/server-lib 20.13.12 → 20.14.1
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/collections/ai-terminal-conversation.collection.d.ts +2 -0
- package/collections/ai-terminal-conversation.collection.js +133 -0
- package/collections/ai-terminal-conversation.collection.js.map +1 -0
- package/collections/ai-terminal-message.collection.d.ts +2 -0
- package/collections/ai-terminal-message.collection.js +113 -0
- package/collections/ai-terminal-message.collection.js.map +1 -0
- package/collections/communication-metric.collection.d.ts +2 -0
- package/collections/communication-metric.collection.js +133 -0
- package/collections/communication-metric.collection.js.map +1 -0
- package/collections/openai-usage-ledger.collection.d.ts +2 -0
- package/collections/openai-usage-ledger.collection.js +120 -0
- package/collections/openai-usage-ledger.collection.js.map +1 -0
- package/managers/communication-metric.manager.d.ts +16 -0
- package/managers/communication-metric.manager.js +134 -0
- package/managers/communication-metric.manager.js.map +1 -0
- package/managers/method.manager.d.ts +2 -0
- package/managers/method.manager.js +162 -45
- package/managers/method.manager.js.map +1 -1
- package/managers/openai-usage-ledger.manager.d.ts +14 -0
- package/managers/openai-usage-ledger.manager.js +137 -0
- package/managers/openai-usage-ledger.manager.js.map +1 -0
- package/managers/subscription.manager.js +2 -0
- package/managers/subscription.manager.js.map +1 -1
- package/methods/ai-terminal.d.ts +1 -0
- package/methods/ai-terminal.js +1200 -0
- package/methods/ai-terminal.js.map +1 -0
- package/methods/report-builder.js +741 -0
- package/methods/report-builder.js.map +1 -1
- package/methods.ts +27 -0
- package/models/ai-terminal-conversation.model.d.ts +16 -0
- package/models/ai-terminal-conversation.model.js +4 -0
- package/models/ai-terminal-conversation.model.js.map +1 -0
- package/models/ai-terminal-message.model.d.ts +22 -0
- package/models/ai-terminal-message.model.js +4 -0
- package/models/ai-terminal-message.model.js.map +1 -0
- package/models/communication-metric.model.d.ts +20 -0
- package/models/communication-metric.model.js +4 -0
- package/models/communication-metric.model.js.map +1 -0
- package/models/openai-usage-ledger.model.d.ts +14 -0
- package/models/openai-usage-ledger.model.js +4 -0
- package/models/openai-usage-ledger.model.js.map +1 -0
- package/package.json +5 -1
- package/public_api.d.ts +13 -0
- package/public_api.js +13 -0
- package/public_api.js.map +1 -1
- package/publications/ai-terminal.d.ts +1 -0
- package/publications/ai-terminal.js +58 -0
- package/publications/ai-terminal.js.map +1 -0
- package/publications.ts +6 -0
- package/services/codex-client.d.ts +81 -0
- package/services/codex-client.js +991 -0
- package/services/codex-client.js.map +1 -0
- package/services/openai-client.d.ts +46 -0
- package/services/openai-client.js +315 -0
- package/services/openai-client.js.map +1 -0
- package/util/tokenizer.d.ts +5 -0
- package/util/tokenizer.js +35 -0
- package/util/tokenizer.js.map +1 -0
|
@@ -0,0 +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"]}
|