Class: SmartBrain::Governance::Briefing
- Inherits:
-
Object
- Object
- SmartBrain::Governance::Briefing
- Defined in:
- lib/smart_brain/governance/briefing.rb
Overview
Deterministic, citation-first briefing (mempal parity). No LLM, no DB writes — assembles purely from memory_store/event_store. Two modes:
- brief: full cognitive snapshot (summary/key_facts/evidence/entities/
unresolved/uncertainty/next_actions), every fact carries a citation.
- wake_up: minimal L0/L1 importance-ordered resume payload.
Constant Summary collapse
- KEY_FACT_TYPES =
%w[decisions goals patterns].freeze
Instance Method Summary collapse
- #brief(session_id:, query: nil, scope_ids: nil, domain_id: 'legacy', scope_context: nil) ⇒ Object
-
#initialize(memory_store:, event_store:, config:) ⇒ Briefing
constructor
A new instance of Briefing.
- #resume(query:) ⇒ Object
- #wake_up(session_id:, scope_ids: nil, domain_id: 'legacy', scope_context: nil) ⇒ Object
Constructor Details
#initialize(memory_store:, event_store:, config:) ⇒ Briefing
Returns a new instance of Briefing.
15 16 17 18 19 |
# File 'lib/smart_brain/governance/briefing.rb', line 15 def initialize(memory_store:, event_store:, config:) @memory_store = memory_store @event_store = event_store @config = config end |
Instance Method Details
#brief(session_id:, query: nil, scope_ids: nil, domain_id: 'legacy', scope_context: nil) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/smart_brain/governance/briefing.rb', line 21 def brief(session_id:, query: nil, scope_ids: nil, domain_id: 'legacy', scope_context: nil) items = memory_store.active_items(session_id: session_id, scope_ids: scope_ids) recent = event_store.recent_turns(session_id: session_id, limit: briefing_recent_turns) search_query = query || (recent) || '' { session_id: session_id, domain_id: domain_id, scope_context: scope_context, summary: summary_text(session_id), key_facts: key_facts(items), evidence: evidence(session_id: session_id, scope_ids: scope_ids, query: search_query), entities: memory_store.entities(session_id: session_id, scope_ids: scope_ids), unresolved: unresolved(items), uncertainty: uncertainty(items), next_actions: next_actions(items), generated_at: Time.now.utc.iso8601 } end |
#resume(query:) ⇒ Object
62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'lib/smart_brain/governance/briefing.rb', line 62 def resume(query:) matches = event_store.all_turns(session_id: nil) .map { |t| t[:session_id] }.uniq .select { |sid| sid.to_s.downcase.include?(query.to_s.downcase) } matches.map do |sid| items = memory_store.active_items(session_id: sid) { session_id: sid, recent_decisions: items.select { |i| i[:type] == 'decisions' }.first(5).map { |i| fact_citation(i) }, next_actions: next_actions(items) } end end |
#wake_up(session_id:, scope_ids: nil, domain_id: 'legacy', scope_context: nil) ⇒ Object
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/smart_brain/governance/briefing.rb', line 41 def wake_up(session_id:, scope_ids: nil, domain_id: 'legacy', scope_context: nil) items = memory_store.active_items(session_id: session_id, scope_ids: scope_ids) summary = memory_store.latest_summary(session_id: session_id) { session_id: session_id, domain_id: domain_id, scope_context: scope_context, l0: { identity: items.select { |i| i[:type] == 'profile' }, principles: items.select { |i| i[:tier] == 'dao_tian' }, preferences: items.select { |i| i[:type] == 'preferences' } }, l1: { goals_decisions: items.select { |i| %w[goals decisions].include?(i[:type]) }, summary: summary ? summary[:text] : nil }, generated_at: Time.now.utc.iso8601 } end |