Class: Phronomy::Agent::JournalRecord
- Inherits:
-
Object
- Object
- Phronomy::Agent::JournalRecord
- Defined in:
- lib/phronomy/agent/journal_record.rb
Overview
One immutable entry in the Agent's append-only Canonical Complete Execution Log.
Raw logical execution facts are never rewritten for Context selection or compaction. Derived Context artifacts must be appended separately and keep stable provenance back to their raw source records.
Constant Summary collapse
- ATTRIBUTES =
%i[ record_id agent_id sequence execution_id llm_call_id kind channel role content_ref parent_id causation_id correlation_id visibility context_generation context_candidate occurred_at metadata ].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(agent_id:, kind:, channel:, record_id: SecureRandom.uuid, sequence: nil, execution_id: nil, llm_call_id: nil, role: nil, content_ref: nil, parent_id: nil, causation_id: nil, correlation_id: nil, visibility: :agent, context_generation: 0, context_candidate: false, occurred_at: Time.now.utc.iso8601(6), metadata: {}) ⇒ JournalRecord
constructor
A new instance of JournalRecord.
- #to_h ⇒ Object
- #with_sequence(sequence) ⇒ Object
Constructor Details
#initialize(agent_id:, kind:, channel:, record_id: SecureRandom.uuid, sequence: nil, execution_id: nil, llm_call_id: nil, role: nil, content_ref: nil, parent_id: nil, causation_id: nil, correlation_id: nil, visibility: :agent, context_generation: 0, context_candidate: false, occurred_at: Time.now.utc.iso8601(6), metadata: {}) ⇒ JournalRecord
Returns a new instance of JournalRecord.
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/phronomy/agent/journal_record.rb', line 22 def initialize( agent_id:, kind:, channel:, record_id: SecureRandom.uuid, sequence: nil, execution_id: nil, llm_call_id: nil, role: nil, content_ref: nil, parent_id: nil, causation_id: nil, correlation_id: nil, visibility: :agent, context_generation: 0, context_candidate: false, occurred_at: Time.now.utc.iso8601(6), metadata: {} ) values = binding.local_variables.to_h { |name| [name, binding.local_variable_get(name)] } ATTRIBUTES.each do |name| value = values.fetch(name) value = value.to_sym if %i[kind channel role visibility].include?(name) && value instance_variable_set("@#{name}", Immutable.copy(value)) end Immutable.validate_canonical_json!(, label: "Journal metadata") freeze end |
Class Method Details
.from_h(hash) ⇒ Object
59 60 61 62 63 64 |
# File 'lib/phronomy/agent/journal_record.rb', line 59 def self.from_h(hash) new(**ATTRIBUTES.to_h do |name| key = hash.key?(name.to_s) ? name.to_s : name [name, hash[key]] end) end |
Instance Method Details
#to_h ⇒ Object
55 56 57 |
# File 'lib/phronomy/agent/journal_record.rb', line 55 def to_h ATTRIBUTES.to_h { |name| [name.to_s, public_send(name)] } end |
#with_sequence(sequence) ⇒ Object
51 52 53 |
# File 'lib/phronomy/agent/journal_record.rb', line 51 def with_sequence(sequence) self.class.from_h(to_h.merge("sequence" => sequence)) end |