getCurrent
codebolt.user-message-utilities.getCurrent(): FlatUserMessage | undefined
Gets the current user message object containing all message data.
Returns
FlatUserMessage | undefined: The current user message object or undefined if no message is set.
Response Structure
Returns a FlatUserMessage object or undefined:
FlatUserMessage Properties:
userMessage: The text content of the user's messagemessageId: Unique identifier for the messagethreadId: Thread identifier for conversation contextmentionedMCPs: Array of mentioned MCP tool namesmentionedFiles: Array of mentioned file namesmentionedFullPaths: Array of mentioned file pathsmentionedFolders: Array of mentioned folder pathsmentionedAgents: Array of mentioned agent objectsremixPrompt: Optional remix prompt for code modificationuploadedImages: Array of uploaded image objectscurrentFile: Path of the currently open fileselection: Currently selected texttimestamp: When the message was received
Examples
Example 1: Get Current Message
import { userMessageUtilities } from '@codebolt/codeboltjs';
// Retrieve the current message
const message = userMessageUtilities.getCurrent();
if (message) {
console.log('Message ID:', message.messageId);
console.log('Thread ID:', message.threadId);
console.log('User said:', message.userMessage);
console.log('Mentioned files:', message.mentionedFiles);
console.log('Mentioned MCPs:', message.mentionedMCPs);
} else {
console.log('No current message available');
}
Explanation: This is the simplest way to retrieve the complete message object. Always check if the message exists before accessing its properties.
Example 2: Analyze Message Content
import { userMessageUtilities } from '@codebolt/codeboltjs';
function analyzeUserMessage() {
const message = userMessageUtilities.getCurrent();
if (!message) {
return { error: 'No message available' };
}
const analysis = {
content: {
text: message.userMessage,
wordCount: message.userMessage.split(/\s+/).length,
charCount: message.userMessage.length
},
context: {
hasCurrentFile: !!message.currentFile,
hasSelection: !!message.selection,
hasRemixPrompt: !!message.remixPrompt
},
mentions: {
files: message.mentionedFiles.length,
folders: message.mentionedFolders.length,
mcpTools: message.mentionedMCPs.length,
agents: message.mentionedAgents.length
},
attachments: {
images: message.uploadedImages.length
},
metadata: {
messageId: message.messageId,
threadId: message.threadId,
timestamp: message.timestamp
}
};
return analysis;
}
// Usage
const analysis = analyzeUserMessage();
console.log('Message analysis:', analysis);
Explanation: This example performs a comprehensive analysis of the message, extracting content statistics, context information, and mention counts.
Example 3: Message for AI Processing
import { userMessageUtilities } from '@codebolt/codeboltjs';
function prepareMessageForAI() {
const message = userMessageUtilities.getCurrent();
if (!message) {
throw new Error('No message to process');
}
// Build context object for AI
const aiContext = {
query: message.userMessage,
conversation: {
messageId: message.messageId,
threadId: message.threadId
},
resources: {
files: message.mentionedFiles,
folders: message.mentionedFolders,
tools: message.mentionedMCPs
},
editor: {
currentFile: message.currentFile,
selection: message.selection
},
special: {
remixPrompt: message.remixPrompt,
images: message.uploadedImages
}
};
return aiContext;
}
// Usage
try {
const context = prepareMessageForAI();
console.log('AI Context:', JSON.stringify(context, null, 2));
} catch (error) {
console.error('Error:', error.message);
}
Explanation: This example prepares the message data for AI processing, structuring it into a clean context object.
Example 4: Message Comparison
import { userMessageUtilities } from '@codebolt/codeboltjs';
let lastMessageId = null;
function checkMessageChanged() {
const message = userMessageUtilities.getCurrent();
if (!message) {
return { changed: false, reason: 'No message' };
}
if (!lastMessageId) {
lastMessageId = message.messageId;
return { changed: true, reason: 'First message' };
}
if (message.messageId !== lastMessageId) {
const changed = {
changed: true,
reason: 'New message',
previousId: lastMessageId,
newId: message.messageId,
threadChanged: message.threadId
};
lastMessageId = message.messageId;
return changed;
}
return { changed: false, reason: 'Same message' };
}
// Usage
const status = checkMessageChanged();
console.log('Message status:', status);
Explanation: This example tracks message changes by comparing message IDs, useful for detecting new user input.
Example 5: Export Message Data
import { userMessageUtilities } from '@codebolt/codeboltjs';
function exportMessageData() {
const message = userMessageUtilities.getCurrent();
if (!message) {
return null;
}
// Create a clean export object
const exportData = {
timestamp: new Date().toISOString(),
message: {
id: message.messageId,
threadId: message.threadId,
text: message.userMessage,
receivedAt: message.timestamp
},
mentions: {
files: message.mentionedFiles,
fullPaths: message.mentionedFullPaths,
folders: message.mentionedFolders,
mcpTools: message.mentionedMCPs,
agents: message.mentionedAgents.map(a => ({
id: a.id,
name: a.name
}))
},
context: {
currentFile: message.currentFile,
selection: message.selection,
remixPrompt: message.remixPrompt
},
attachments: {
images: message.uploadedImages.map(img => ({
name: img.name,
type: img.type,
size: img.size
}))
}
};
return exportData;
}
// Usage
const exported = exportMessageData();
if (exported) {
console.log('Exported message:', JSON.stringify(exported, null, 2));
}
Explanation: This example exports the message data in a clean, structured format suitable for logging, storage, or transmission.
Example 6: Message Validation
import { userMessageUtilities } from '@codebolt/codeboltjs';
function validateCurrentMessage() {
const message = userMessageUtilities.getCurrent();
const validation = {
valid: true,
warnings: [],
errors: []
};
if (!message) {
validation.valid = false;
validation.errors.push('No message available');
return validation;
}
// Check required fields
if (!message.userMessage || message.userMessage.trim().length === 0) {
validation.errors.push('Message text is empty');
validation.valid = false;
}
if (!message.messageId) {
validation.errors.push('Missing message ID');
validation.valid = false;
}
// Check for potential issues
if (message.mentionedFiles.length > 0 && !message.currentFile) {
validation.warnings.push('Files mentioned but no current file in context');
}
if (message.selection && !message.currentFile) {
validation.warnings.push('Selection present but no current file');
}
if (message.uploadedImages.length > 5) {
validation.warnings.push('Large number of images attached');
}
return validation;
}
// Usage
const validation = validateCurrentMessage();
if (!validation.valid) {
console.error('Validation errors:', validation.errors);
}
if (validation.warnings.length > 0) {
console.warn('Validation warnings:', validation.warnings);
}
Explanation: This example performs comprehensive validation of the message, checking for required fields and potential issues.
Common Use Cases
1. Deep Message Inspection: Examine all message properties.
function inspectMessage() {
const message = userMessageUtilities.getCurrent();
console.log('Complete message:', JSON.stringify(message, null, 2));
}
2. Message Routing: Route based on message content.
function routeMessage() {
const message = userMessageUtilities.getCurrent();
if (!message) return 'no-message';
if (message.mentionedMCPs.length > 0) return 'mcp-request';
if (message.mentionedFiles.length > 0) return 'file-operation';
if (message.remixPrompt) return 'code-remix';
return 'general-query';
}
3. Context Building: Build rich context for operations.
function buildOperationContext() {
const message = userMessageUtilities.getCurrent();
return {
userIntent: message.userMessage,
resources: {
files: message.mentionedFiles,
tools: message.mentionedMCPs
},
editor: message.currentFile,
selection: message.selection
};
}
4. Message Logging: Log complete message for audit.
function logMessage() {
const message = userMessageUtilities.getCurrent();
logger.info('User message', {
id: message.messageId,
text: message.userMessage,
mentions: {
files: message.mentionedFiles.length,
mcp: message.mentionedMCPs.length
}
});
}
Notes
- Returns
undefinedif no message has been saved - The message object is a snapshot at the time of the call
- Subsequent changes to the manager are not reflected in returned objects
- The message contains all available information about the user's request
- Use
hasMessage()to check for existence before callinggetCurrent() - Message IDs are unique within a thread
- Thread IDs group related messages in conversations
- Timestamps are in ISO 8601 format
- Mention arrays are empty (not undefined) when no mentions exist
- The
remixPromptfield is only present for code remix requests - Uploaded images are objects with metadata (name, type, size, data)
- The message is read-only - don't modify properties directly
- Each new message overwrites the previous one in the manager
- Call
clear()to free memory after processing - The message automatically persists until cleared
- All file paths are relative to the workspace root unless absolute