Module: Textus::Lanes::Knowledge::Handlers

Defined in:
lib/textus/lanes/knowledge/handlers.rb

Constant Summary collapse

LOOP_NODE_KEYS =
{
  "intent" => "knowledge.loop.intent",
  "constraint.repo" => "knowledge.loop.constraint.repo",
  "constraint.protocol" => "knowledge.loop.constraint.protocol",
  "judgment.engineering" => "knowledge.loop.judgment.engineering",
  "judgment.agent-behavior" => "knowledge.loop.judgment.agent-behavior",
  "evidence" => "knowledge.loop.evidence",
  "execution" => "knowledge.loop.execution.runbook",
  "adoption" => "knowledge.loop.adoption",
}.freeze

Class Method Summary collapse

Class Method Details

.loop(ctx:, call:) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
# File 'lib/textus/lanes/knowledge/handlers.rb', line 18

def loop(ctx:, call:)
  nodes = LOOP_NODE_KEYS.map { |name, key| { "name" => name, "key" => key } }
  role = call&.role || "agent"
  runner = Runner.new(ctx.manifest, cursor_store: ctx.cursor_store)
  feedback = recent_feedback(ctx)
  {
    "loop" => nodes,
    "count" => nodes.size,
    "flow" => runner.flow,
    "current_node" => runner.current_position(role),
    "feedback" => feedback,
  }
end

.recent_feedback(ctx) ⇒ Object



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/textus/lanes/knowledge/handlers.rb', line 32

def recent_feedback(ctx)
  rows = ctx.entry_index&.search(schema: "loop-feedback", lane: "knowledge", query: nil, prefix: nil)
  return [] unless rows&.any?

  rows.map do |row|
    env = ctx.read(key: row["key"])
    meta = env&.meta || {}
    {
      "key" => row["key"],
      "node" => meta["node"],
      "confidence" => meta["confidence"],
      "signal" => meta["signal"],
      "summary" => env&.body || meta["summary"],
    }
  end
rescue Textus::Error
  []
end