Class: Ace::Core::Molecules::PromptCacheManager
- Inherits:
-
Object
- Object
- Ace::Core::Molecules::PromptCacheManager
- Defined in:
- lib/ace/core/molecules/prompt_cache_manager.rb
Overview
Standardized prompt cache management for ace-* gems Provides consistent session directory creation, prompt saving, and metadata management
This is a stateless utility class - all methods are class methods.
Defined Under Namespace
Classes: PromptCacheError
Class Method Summary collapse
-
.create_session(gem_name, operation, project_root: nil, timestamp_formatter: nil) ⇒ String
Create a new session directory with standardized structure.
-
.save_metadata(metadata, session_dir, validate: true) ⇒ String
Save metadata to session directory.
-
.save_system_prompt(content, session_dir) ⇒ String
Save system prompt to session directory.
-
.save_user_prompt(content, session_dir) ⇒ String
Save user prompt to session directory.
-
.validate_metadata(metadata) ⇒ Object
Validate metadata schema.
Class Method Details
.create_session(gem_name, operation, project_root: nil, timestamp_formatter: nil) ⇒ String
Create a new session directory with standardized structure
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ace/core/molecules/prompt_cache_manager.rb', line 24 def create_session(gem_name, operation, project_root: nil, timestamp_formatter: nil) raise ArgumentError, "gem_name cannot be nil or empty" if gem_name.nil? || gem_name.strip.empty? raise ArgumentError, "operation cannot be nil or empty" if operation.nil? || operation.strip.empty? begin root = project_root || Ace::Support::Fs::Molecules::ProjectRootFinder.find_or_current = ? .call(Time.now) : Time.now.strftime("%Y%m%d-%H%M%S") session_name = "#{operation}-#{}" session_dir = File.join(base_cache_path(root, gem_name), session_name) FileUtils.mkdir_p(session_dir) session_dir rescue Errno::ENOENT, Errno::EACCES => e raise PromptCacheError, "Failed to create session directory: #{e.}" rescue => e raise PromptCacheError, "Unexpected error creating session: #{e.}" end end |
.save_metadata(metadata, session_dir, validate: true) ⇒ String
Save metadata to session directory
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 |
# File 'lib/ace/core/molecules/prompt_cache_manager.rb', line 63 def (, session_dir, validate: true) raise ArgumentError, "metadata must be a Hash" unless .is_a?(Hash) raise ArgumentError, "session_dir cannot be nil or empty" if session_dir.nil? || session_dir.strip.empty? () if validate begin = File.join(session_dir, "metadata.yml") File.write(, YAML.dump()) rescue Errno::ENOENT, Errno::EACCES => e raise PromptCacheError, "Failed to save metadata to #{}: #{e.}" rescue => e raise PromptCacheError, "Unexpected error saving metadata: #{e.}" end end |
.save_system_prompt(content, session_dir) ⇒ String
Save system prompt to session directory
46 47 48 |
# File 'lib/ace/core/molecules/prompt_cache_manager.rb', line 46 def save_system_prompt(content, session_dir) save_prompt(content, session_dir, "system.prompt.md") end |
.save_user_prompt(content, session_dir) ⇒ String
Save user prompt to session directory
54 55 56 |
# File 'lib/ace/core/molecules/prompt_cache_manager.rb', line 54 def save_user_prompt(content, session_dir) save_prompt(content, session_dir, "user.prompt.md") end |
.validate_metadata(metadata) ⇒ Object
Validate metadata schema
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/ace/core/molecules/prompt_cache_manager.rb', line 83 def () required_fields = %w[timestamp gem operation] missing = required_fields - .keys unless missing.empty? raise ArgumentError, "Missing required metadata fields: #{missing.join(", ")}" end # Validate field types unless ["timestamp"].is_a?(String) || ["timestamp"].is_a?(Time) raise ArgumentError, "Metadata 'timestamp' must be a String or Time" end unless ["gem"].is_a?(String) && !["gem"].strip.empty? raise ArgumentError, "Metadata 'gem' must be a non-empty String" end unless ["operation"].is_a?(String) && !["operation"].strip.empty? raise ArgumentError, "Metadata 'operation' must be a non-empty String" end end |