/** * RunnableConfig * * Configuration object passed through runnable chains * * @module src/core/context.js */ export class RunnableConfig { constructor(options = {}) { // Callbacks for monitoring this.callbacks = options.callbacks || []; // Metadata (arbitrary data) this.metadata = options.metadata || {}; // Tags for filtering/organization this.tags = options.tags || []; // Recursion limit (prevent infinite loops) this.recursionLimit = options.recursionLimit ?? 25; // Runtime overrides for generation parameters this.configurable = options.configurable || {}; } /** * Merge with another config (child inherits from parent) */ merge(other) { return new RunnableConfig({ callbacks: [...this.callbacks, ...(other.callbacks || [])], metadata: { ...this.metadata, ...(other.metadata || {}) }, tags: [...this.tags, ...(other.tags || [])], recursionLimit: other.recursionLimit ?? this.recursionLimit, configurable: { ...this.configurable, ...(other.configurable || {}) } }); } /** * Create a child config with additional settings */ child(options = {}) { return this.merge(new RunnableConfig(options)); } } export default RunnableConfig;