Module: Kward::RPC::RuntimePayloads

Defined in:
lib/kward/rpc/runtime_payloads.rb

Class Method Summary collapse

Class Method Details

.default_model_label(model) ⇒ Object



72
73
74
75
76
# File 'lib/kward/rpc/runtime_payloads.rb', line 72

def default_model_label(model)
  return nil if model[:provider].to_s.empty? || model[:id].to_s.empty?

  "#{model[:provider]}/#{model[:id]}"
end

.session(rpc_session, modified_at:, active_persona_label: nil) ⇒ Object



56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/kward/rpc/runtime_payloads.rb', line 56

def session(rpc_session, modified_at:, active_persona_label: nil)
  {
    id: rpc_session.id,
    persistentId: rpc_session.session.id,
    path: rpc_session.session.path,
    workspaceRoot: rpc_session.workspace_root,
    cwd: rpc_session.session.cwd.to_s.empty? ? rpc_session.workspace_root : rpc_session.session.cwd,
    name: rpc_session.session.name,
    createdAt: rpc_session.session.created_at&.utc&.iso8601(3),
    modifiedAt: modified_at&.utc&.iso8601(3),
    parentId: rpc_session.session.parent_id,
    parentPath: rpc_session.session.parent_path,
    activePersonaLabel: active_persona_label
  }.compact
end

.state(session:, model:, streaming:, steering_supported:, auto_compaction_reserve_tokens:, active_persona_label:, message_count:, pending_count:, compaction_enabled:, workspace_guardrails_enabled:) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/kward/rpc/runtime_payloads.rb', line 6

def state(session:, model:, streaming:, steering_supported:, auto_compaction_reserve_tokens:, active_persona_label:, message_count:, pending_count:, compaction_enabled:, workspace_guardrails_enabled:)
  {
    model: model,
    thinkingLevel: model[:reasoningEffort],
    isStreaming: streaming,
    isCompacting: false,
    steeringMode: steering_supported ? "in-flight" : "one-at-a-time",
    followUpMode: "one-at-a-time",
    sessionFile: session[:path],
    rpcSessionId: session[:id],
    persistentSessionId: session[:persistentId],
    sessionName: session[:name],
    autoCompactionEnabled: compaction_enabled,
    autoCompactionReserveTokens: auto_compaction_reserve_tokens,
    workspaceGuardrailsEnabled: workspace_guardrails_enabled,
    autoRetryEnabled: false,
    defaultProvider: model[:provider],
    defaultModel: default_model_label(model),
    defaultThinkingLevel: model[:reasoningEffort],
    activePersonaLabel: active_persona_label,
    hideThinkingBlock: false,
    quietStartup: false,
    transport: "kward-rpc",
    imageAutoResize: false,
    blockImages: false,
    enabledModels: [],
    enableSkillCommands: true,
    messageCount: message_count,
    pendingMessageCount: pending_count
  }.compact
end

.stats(session:, counts:, model:, auto_compaction_reserve_tokens:, context_usage:, compaction_enabled:) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/kward/rpc/runtime_payloads.rb', line 38

def stats(session:, counts:, model:, auto_compaction_reserve_tokens:, context_usage:, compaction_enabled:)
  {
    sessionFile: session[:path],
    rpcSessionId: session[:id],
    persistentSessionId: session[:persistentId],
    sessionName: session[:name],
    userMessages: counts[:userMessages],
    assistantMessages: counts[:assistantMessages],
    toolCalls: counts[:toolCalls],
    toolResults: counts[:toolResults],
    totalMessages: counts[:totalMessages],
    usingSubscription: model[:provider] == "Codex",
    autoCompactionEnabled: compaction_enabled,
    autoCompactionReserveTokens: auto_compaction_reserve_tokens,
    contextUsage: context_usage
  }.compact
end