Module: Kward::MessageText
- Defined in:
- lib/kward/message_text.rb
Overview
Builds user-visible plain text from persisted conversation messages.
Conversations may store one value for the model and another value for the UI.
Prompt templates, for example, keep expanded instructions in content while
preserving the submitted slash command in display_content. This helper keeps
tree navigation, forks, copy/export features, and RPC payloads aligned on the
same visible text rules.
Class Method Summary collapse
-
.content_text(content) ⇒ String
Converts message content into plain text without applying display-content overrides.
-
.full_text(message) ⇒ String
Returns the plain text a user should see or edit for a message.
-
.preview(message, length: 120) ⇒ String
Returns compact one-line text for session tree and list previews.
- .truncate_preview(text, length: 120) ⇒ Object
Class Method Details
.content_text(content) ⇒ String
Converts message content into plain text without applying display-content overrides.
50 51 52 53 54 55 56 57 |
# File 'lib/kward/message_text.rb', line 50 def content_text(content) case content when Array content.filter_map { |part| MessageAccess.value(part, :text) }.join("\n") else content.to_s end end |
.full_text(message) ⇒ String
Returns the plain text a user should see or edit for a message.
User messages prefer display_content/displayContent when present. Other
messages, and user messages without display text, are reduced from their
stored content. Array content contributes only textual parts so image and
tool-call blocks do not leak implementation details into editable text.
24 25 26 27 28 29 |
# File 'lib/kward/message_text.rb', line 24 def full_text() display_content = MessageAccess.display_content() return display_content.to_s.strip unless display_content.nil? content_text(MessageAccess.content()).strip end |
.preview(message, length: 120) ⇒ String
Returns compact one-line text for session tree and list previews.
36 37 38 39 40 41 42 43 |
# File 'lib/kward/message_text.rb', line 36 def preview(, length: 120) text = if MessageAccess.role() == "compactionSummary" MessageAccess.summary().to_s else full_text() end truncate_preview(text, length: length) end |
.truncate_preview(text, length: 120) ⇒ Object
59 60 61 62 |
# File 'lib/kward/message_text.rb', line 59 def truncate_preview(text, length: 120) normalized = text.to_s.gsub(/\s+/, " ").strip normalized.length > length ? "#{normalized.slice(0, length - 3)}..." : normalized end |