Class: RailsMarkup::HttpStoreProxy

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_markup/http_store_proxy.rb

Overview

Proxies store operations to an existing HTTP server. Used when MCP starts but the HTTP port is already taken — delegates reads/writes to the running server's HTTP API.

Instance Method Summary collapse

Constructor Details

#initialize(base_url: "http://localhost:4747") ⇒ HttpStoreProxy

Returns a new instance of HttpStoreProxy.



12
13
14
15
# File 'lib/rails_markup/http_store_proxy.rb', line 12

def initialize(base_url: "http://localhost:4747")
  @base_url = base_url
  @uri = URI.parse(base_url)
end

Instance Method Details

#acknowledge(id) ⇒ Object



57
58
59
# File 'lib/rails_markup/http_store_proxy.rb', line 57

def acknowledge(id)
  post("/annotations/#{id}/acknowledge", {})
end

#all_pendingObject



29
30
31
# File 'lib/rails_markup/http_store_proxy.rb', line 29

def all_pending
  get("/pending") || []
end

#create_annotation(session_id:, target:, content:, intent: "change", severity: "suggestion", selected_text: nil, metadata: nil) ⇒ Object



50
51
52
53
54
55
# File 'lib/rails_markup/http_store_proxy.rb', line 50

def create_annotation(session_id:, target:, content:, intent: "change", severity: "suggestion", selected_text: nil, metadata: nil)
  post("/sessions/#{session_id}/annotations", {
    target: target, content: content, intent: intent,
    severity: severity, selectedText: selected_text, metadata: 
  })
end

#create_session(url:, metadata: nil) ⇒ Object



25
26
27
# File 'lib/rails_markup/http_store_proxy.rb', line 25

def create_session(url:, metadata: nil)
  post("/sessions", { url: url, metadata:  })
end

#dismiss(id, reason: nil) ⇒ Object



65
66
67
# File 'lib/rails_markup/http_store_proxy.rb', line 65

def dismiss(id, reason: nil)
  post("/annotations/#{id}/dismiss", { reason: reason })
end

#get_annotation(id) ⇒ Object



40
41
42
43
44
45
46
47
48
# File 'lib/rails_markup/http_store_proxy.rb', line 40

def get_annotation(id)
  # Search all sessions for this annotation (not just pending)
  list_sessions.each do |session|
    (session["annotations"] || []).each do |ann|
      return ann if ann["id"] == id
    end
  end
  nil
end

#get_session(id) ⇒ Object



21
22
23
# File 'lib/rails_markup/http_store_proxy.rb', line 21

def get_session(id)
  get("/sessions/#{id}")
end

#list_sessionsObject



17
18
19
# File 'lib/rails_markup/http_store_proxy.rb', line 17

def list_sessions
  get("/sessions") || []
end

#pending_for_session(session_id) ⇒ Object



33
34
35
36
37
38
# File 'lib/rails_markup/http_store_proxy.rb', line 33

def pending_for_session(session_id)
  session = get_session(session_id)
  return [] unless session

  (session["annotations"] || []).select { |a| a["status"] == "pending" }
end

#reply(id, message:) ⇒ Object



69
70
71
# File 'lib/rails_markup/http_store_proxy.rb', line 69

def reply(id, message:)
  post("/annotations/#{id}/reply", { message: message })
end

#resolve(id, summary: nil) ⇒ Object



61
62
63
# File 'lib/rails_markup/http_store_proxy.rb', line 61

def resolve(id, summary: nil)
  post("/annotations/#{id}/resolve", { summary: summary })
end

#serialize_annotation(data) ⇒ Object



78
79
80
# File 'lib/rails_markup/http_store_proxy.rb', line 78

def serialize_annotation(data)
  data
end

#serialize_session(data) ⇒ Object

Proxy serialization — data is already serialized from HTTP



74
75
76
# File 'lib/rails_markup/http_store_proxy.rb', line 74

def serialize_session(data)
  data
end

#subscribe(_session_id = nil, &_block) ⇒ Object

Watch not supported via HTTP proxy — return empty after timeout



83
84
85
# File 'lib/rails_markup/http_store_proxy.rb', line 83

def subscribe(_session_id = nil, &_block)
  nil
end

#unsubscribe(_sub) ⇒ Object



87
88
89
# File 'lib/rails_markup/http_store_proxy.rb', line 87

def unsubscribe(_sub)
  nil
end