Skip to main content

getPossibleVariables

codebolt.contextRuleEngine.getPossibleVariables(): Promise<PossibleVariablesResponse>

Gets all possible variables for rule configuration.

Returns

  • Promise<[PossibleVariablesResponse](/docs/reference/type-reference/codeboltjs/interfaces/PossibleVariablesResponse)>: A promise that resolves with available variables.

Examples

Example 1: List All Variables

import codebolt from '@codebolt/codeboltjs';

await codebolt.waitForReady();

const result = await codebolt.contextRuleEngine.getPossibleVariables();

result.data.variables.forEach(variable => {
console.log(`- ${variable.name} (${variable.type})`);
console.log(` Source: ${variable.source}`);
if (variable.description) {
console.log(` Description: ${variable.description}`);
}
if (variable.examples) {
console.log(` Examples:`, variable.examples);
}
});

Example 2: Filter by Source

const result = await codebolt.contextRuleEngine.getPossibleVariables();

const scopeVars = result.data.variables.filter(v => v.source === 'scope');
const memoryVars = result.data.variables.filter(v => v.source === 'memory');
const systemVars = result.data.variables.filter(v => v.source === 'system');

console.log('Scope variables:', scopeVars.map(v => v.name));
console.log('Memory variables:', memoryVars.map(v => v.name));
console.log('System variables:', systemVars.map(v => v.name));

Example 3: Find Variables by Type

const result = await codebolt.contextRuleEngine.getPossibleVariables();

const stringVars = result.data.variables.filter(v => v.type === 'string');
const boolVars = result.data.variables.filter(v => v.type === 'boolean');
const numberVars = result.data.variables.filter(v => v.type === 'number');

console.log('String variables:', stringVars.map(v => v.name));
console.log('Boolean variables:', boolVars.map(v => v.name));
console.log('Number variables:', numberVars.map(v => v.name));

Example 4: Build Variable Reference

async function buildVariableReference() {
const result = await codebolt.contextRuleEngine.getPossibleVariables();

const reference = {
scope: {},
memory: {},
system: {}
};

result.data.variables.forEach(variable => {
const info = {
type: variable.type,
description: variable.description,
examples: variable.examples
};

if (variable.source === 'scope') {
reference.scope[variable.name] = info;
} else if (variable.source === 'memory') {
reference.memory[variable.name] = info;
} else {
reference.system[variable.name] = info;
}
});

return reference;
}

const reference = await buildVariableReference();
console.log('Variable reference:', JSON.stringify(reference, null, 2));

Example 5: Help UI Construction

async function getVariableOptions() {
const result = await codebolt.contextRuleEngine.getPossibleVariables();

return result.data.variables.map(variable => ({
value: variable.name,
label: variable.name,
type: variable.type,
source: variable.source,
description: variable.description,
hint: variable.examples ? `Examples: ${variable.examples.join(', ')}` : undefined
}));
}

const options = await getVariableOptions();
// Use in UI dropdown for rule condition builder

Example 6: Validate Variables in Rules

async function validateRuleVariables(rule) {
const result = await codebolt.contextRuleEngine.getPossibleVariables();

const validVars = new Set(result.data.variables.map(v => v.name));
const invalidVars = [];

rule.conditions.forEach(condition => {
if (!validVars.has(condition.variable)) {
invalidVars.push(condition.variable);
}
});

if (invalidVars.length > 0) {
console.warn('Invalid variables in rule:', invalidVars);
return false;
}

return true;
}

const isValid = await validateRuleVariables({
name: 'Test rule',
conditions: [
{ variable: 'task_type', operator: 'eq', value: 'debugging' },
{ variable: 'invalid_var', operator: 'eq', value: 'test' }
],
action: 'include',
action_config: { memory_ids: ['test'] }
});

Common Use Cases

Rule Builder: Build UI for creating rules with variable suggestions. Documentation: Understand available variables for rule conditions. Validation: Validate that rule variables exist. Reference: Provide reference information for rule authors.

Notes

  • Returns all variables that can be used in rule conditions
  • Variables are organized by source (scope, memory, system)
  • Use examples to understand expected values
  • Helpful for building rule configuration UIs