samagotchi 0.22.0 → 0.24.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (176) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +72 -1
  3. data/bin/chi +9 -4
  4. data/docs/cli.md +6 -1
  5. data/docs/configuration.md +13 -4
  6. data/docs/hooks.md +20 -6
  7. data/docs/plugins.md +1 -1
  8. data/docs/releasing.md +1 -1
  9. data/docs/sub-agent.md +4 -3
  10. data/docs/testing.md +6 -0
  11. data/lib/samagotchi/answer_command.rb +4 -2
  12. data/lib/samagotchi/bootstrap/config_writer.rb +2 -1
  13. data/lib/samagotchi/bootstrap/probe.rb +1 -1
  14. data/lib/samagotchi/bootstrap_command.rb +2 -2
  15. data/lib/samagotchi/bridge/bounded_queue.rb +0 -2
  16. data/lib/samagotchi/bridge/card_store.rb +4 -3
  17. data/lib/samagotchi/bridge/sse_writer.rb +0 -6
  18. data/lib/samagotchi/bridge/turn_accumulator.rb +6 -3
  19. data/lib/samagotchi/bridge/turn_notice.rb +1 -0
  20. data/lib/samagotchi/bridge.rb +19 -9
  21. data/lib/samagotchi/bridge_client/event_stream.rb +2 -2
  22. data/lib/samagotchi/bridge_client.rb +1 -1
  23. data/lib/samagotchi/bundle_command.rb +39 -29
  24. data/lib/samagotchi/bundles/btw/manifest.yml +2 -2
  25. data/lib/samagotchi/bundles/btw/plugin.rb +2 -0
  26. data/lib/samagotchi/bundles/check-in/manifest.yml +2 -2
  27. data/lib/samagotchi/bundles/check-in/plugin.rb +4 -1
  28. data/lib/samagotchi/bundles/known-names/hooks/known_names.rb +6 -5
  29. data/lib/samagotchi/bundles/known-names/manifest.yml +2 -2
  30. data/lib/samagotchi/bundles/loop-guard/manifest.yml +2 -2
  31. data/lib/samagotchi/bundles/loop-guard/plugin.rb +2 -0
  32. data/lib/samagotchi/bundles/mcp/manifest.yml +2 -2
  33. data/lib/samagotchi/bundles/mcp/plugin.rb +2 -0
  34. data/lib/samagotchi/bundles/skills/manifest.yml +2 -2
  35. data/lib/samagotchi/bundles/skills/plugin.rb +5 -3
  36. data/lib/samagotchi/bundles/source-links/hooks/source_links.rb +7 -7
  37. data/lib/samagotchi/bundles/source-links/manifest.yml +2 -2
  38. data/lib/samagotchi/bundles/system/config_modification_protocol.md +1 -1
  39. data/lib/samagotchi/bundles/system/manifest.yml +2 -2
  40. data/lib/samagotchi/cancellation_controller.rb +1 -1
  41. data/lib/samagotchi/cli/command.rb +1 -1
  42. data/lib/samagotchi/client.rb +3 -5
  43. data/lib/samagotchi/commands/registry.rb +2 -2
  44. data/lib/samagotchi/config.rb +42 -14
  45. data/lib/samagotchi/context_note.rb +1 -1
  46. data/lib/samagotchi/context_status.rb +6 -6
  47. data/lib/samagotchi/continue_offer.rb +15 -8
  48. data/lib/samagotchi/debug_log.rb +1 -1
  49. data/lib/samagotchi/desktop/macos.rb +5 -4
  50. data/lib/samagotchi/empty_answer_retry.rb +1 -1
  51. data/lib/samagotchi/engine.rb +97 -18
  52. data/lib/samagotchi/gem_update.rb +2 -1
  53. data/lib/samagotchi/generation_phase.rb +83 -0
  54. data/lib/samagotchi/guardrail_wiring.rb +1 -1
  55. data/lib/samagotchi/guardrails/approval.rb +5 -5
  56. data/lib/samagotchi/guardrails/approvals.rb +2 -2
  57. data/lib/samagotchi/guardrails/gate.rb +2 -2
  58. data/lib/samagotchi/guardrails/read_only_shell.rb +5 -3
  59. data/lib/samagotchi/guardrails/shell_git_dirs.rb +1 -1
  60. data/lib/samagotchi/guardrails/shell_lex.rb +113 -5
  61. data/lib/samagotchi/guardrails/shell_paths.rb +3 -3
  62. data/lib/samagotchi/hooks/bundle_loader.rb +9 -6
  63. data/lib/samagotchi/hooks/loader.rb +18 -16
  64. data/lib/samagotchi/hooks/registry.rb +10 -2
  65. data/lib/samagotchi/host_registry.rb +1 -3
  66. data/lib/samagotchi/idle_recap.rb +22 -17
  67. data/lib/samagotchi/idle_reminders.rb +6 -3
  68. data/lib/samagotchi/image_store.rb +5 -2
  69. data/lib/samagotchi/kernel_loop.rb +50 -40
  70. data/lib/samagotchi/llm/chat_loop.rb +29 -16
  71. data/lib/samagotchi/llm/errors.rb +2 -2
  72. data/lib/samagotchi/llm/http.rb +12 -12
  73. data/lib/samagotchi/llm/openai_chat.rb +42 -28
  74. data/lib/samagotchi/llm/prompt_cache.rb +1 -1
  75. data/lib/samagotchi/log.rb +2 -2
  76. data/lib/samagotchi/log_subscriber.rb +5 -3
  77. data/lib/samagotchi/memory_bundle/builder.rb +9 -3
  78. data/lib/samagotchi/memory_bundle/index_updater.rb +13 -1
  79. data/lib/samagotchi/memory_bundle/installer.rb +67 -57
  80. data/lib/samagotchi/memory_bundle/listing.rb +5 -1
  81. data/lib/samagotchi/memory_bundle/manifest.rb +14 -4
  82. data/lib/samagotchi/memory_bundle/merger.rb +6 -4
  83. data/lib/samagotchi/memory_bundle/provenance.rb +16 -13
  84. data/lib/samagotchi/memory_bundle/source.rb +7 -3
  85. data/lib/samagotchi/memory_bundle/status.rb +3 -1
  86. data/lib/samagotchi/memory_bundle/system_bundle.rb +3 -2
  87. data/lib/samagotchi/memory_bundle/trash.rb +5 -2
  88. data/lib/samagotchi/memory_bundle/uninstaller.rb +9 -6
  89. data/lib/samagotchi/memory_bundle.rb +1 -0
  90. data/lib/samagotchi/model_overlay.rb +3 -5
  91. data/lib/samagotchi/model_profile.rb +12 -8
  92. data/lib/samagotchi/note_command.rb +2 -1
  93. data/lib/samagotchi/output_formatter.rb +18 -17
  94. data/lib/samagotchi/owner_lock.rb +2 -1
  95. data/lib/samagotchi/plugin/api.rb +8 -5
  96. data/lib/samagotchi/plugin/context.rb +1 -3
  97. data/lib/samagotchi/plugin/loader.rb +1 -1
  98. data/lib/samagotchi/plugin/service.rb +1 -1
  99. data/lib/samagotchi/plugin/sessions.rb +1 -0
  100. data/lib/samagotchi/plugin_tasks.rb +1 -1
  101. data/lib/samagotchi/prompt.rb +72 -13
  102. data/lib/samagotchi/prompt_literal_guard.rb +1 -1
  103. data/lib/samagotchi/question_desk.rb +7 -7
  104. data/lib/samagotchi/recap_setup.rb +1 -1
  105. data/lib/samagotchi/relay_desk.rb +1 -1
  106. data/lib/samagotchi/reminder_store.rb +2 -1
  107. data/lib/samagotchi/send_command.rb +4 -2
  108. data/lib/samagotchi/session.rb +2 -2
  109. data/lib/samagotchi/session_archive_command.rb +5 -1
  110. data/lib/samagotchi/session_commands.rb +1 -3
  111. data/lib/samagotchi/session_manager.rb +2 -4
  112. data/lib/samagotchi/session_metrics.rb +10 -10
  113. data/lib/samagotchi/session_observer.rb +3 -2
  114. data/lib/samagotchi/session_retention.rb +2 -2
  115. data/lib/samagotchi/sessions_command.rb +14 -5
  116. data/lib/samagotchi/steer.rb +103 -8
  117. data/lib/samagotchi/system_prompt.rb +19 -8
  118. data/lib/samagotchi/terminal_ui/attach_launcher.rb +5 -5
  119. data/lib/samagotchi/terminal_ui/attached_loop.rb +3 -3
  120. data/lib/samagotchi/terminal_ui/event_renderer.rb +4 -2
  121. data/lib/samagotchi/terminal_ui/formatting.rb +19 -10
  122. data/lib/samagotchi/terminal_ui/input_support.rb +2 -2
  123. data/lib/samagotchi/terminal_ui/line_reader.rb +3 -3
  124. data/lib/samagotchi/terminal_ui/one_shot_sink.rb +1 -0
  125. data/lib/samagotchi/terminal_ui/question_prompt.rb +23 -23
  126. data/lib/samagotchi/terminal_ui/question_slot.rb +10 -10
  127. data/lib/samagotchi/terminal_ui/reline_seam.rb +1 -1
  128. data/lib/samagotchi/terminal_ui/repl_input.rb +3 -2
  129. data/lib/samagotchi/terminal_ui.rb +14 -5
  130. data/lib/samagotchi/text_diff.rb +12 -12
  131. data/lib/samagotchi/thinking.rb +6 -2
  132. data/lib/samagotchi/thought_stream_splitter.rb +15 -6
  133. data/lib/samagotchi/tool_activity.rb +1 -0
  134. data/lib/samagotchi/tool_call_parser.rb +13 -14
  135. data/lib/samagotchi/tool_declarations.rb +36 -35
  136. data/lib/samagotchi/tool_runner.rb +7 -0
  137. data/lib/samagotchi/tool_view.rb +40 -0
  138. data/lib/samagotchi/tools/ask_user_question.rb +3 -4
  139. data/lib/samagotchi/tools/builtin_calls.rb +1 -1
  140. data/lib/samagotchi/tools/delegate.rb +1 -1
  141. data/lib/samagotchi/tools/delegate_relay.rb +1 -1
  142. data/lib/samagotchi/tools/delegate_wait.rb +0 -1
  143. data/lib/samagotchi/tools/edit.rb +14 -13
  144. data/lib/samagotchi/tools/execute.rb +3 -5
  145. data/lib/samagotchi/tools/list_reminders.rb +1 -1
  146. data/lib/samagotchi/tools/memory.rb +21 -22
  147. data/lib/samagotchi/tools/read.rb +7 -7
  148. data/lib/samagotchi/tools/task_create.rb +1 -1
  149. data/lib/samagotchi/tools/task_get.rb +1 -1
  150. data/lib/samagotchi/tools/task_list.rb +1 -1
  151. data/lib/samagotchi/tools/task_runtime.rb +8 -9
  152. data/lib/samagotchi/tools/task_stop.rb +1 -1
  153. data/lib/samagotchi/tools/task_wait.rb +3 -4
  154. data/lib/samagotchi/tools/web_fetch.rb +2 -4
  155. data/lib/samagotchi/tools/write.rb +1 -1
  156. data/lib/samagotchi/turn_flow.rb +8 -8
  157. data/lib/samagotchi/turn_note.rb +5 -1
  158. data/lib/samagotchi/version.rb +1 -1
  159. data/lib/samagotchi/vision_support.rb +2 -2
  160. data/lib/samagotchi/waiting_steer.rb +64 -0
  161. data/lib/samagotchi/web/app.rb +13 -6
  162. data/lib/samagotchi/web/markdown_renderer.rb +2 -1
  163. data/lib/samagotchi/web/message_parts.rb +5 -0
  164. data/lib/samagotchi/web/public/activity.js +5 -0
  165. data/lib/samagotchi/web/public/app.js +2 -1
  166. data/lib/samagotchi/web/public/command_view.js +28 -0
  167. data/lib/samagotchi/web/public/copy.js +7 -0
  168. data/lib/samagotchi/web/public/index.html +8 -0
  169. data/lib/samagotchi/web/public/stage_model.js +11 -4
  170. data/lib/samagotchi/web/public/stage_view.js +5 -2
  171. data/lib/samagotchi/web/public/turn_events.js +15 -1
  172. data/lib/samagotchi/web/public/turn_view.js +15 -6
  173. data/lib/samagotchi/web/qr.rb +7 -1
  174. data/lib/samagotchi/web/server.rb +6 -2
  175. data/lib/samagotchi/worker.rb +14 -3
  176. metadata +24 -20
@@ -12,6 +12,7 @@
12
12
  import { toolName } from "./activity.js";
13
13
  import { leavesBlock } from "./card.js";
14
14
  import { copySourceAttr } from "./copy.js";
15
+ import { commandBlockHtml, rowHover } from "./command_view.js";
15
16
  import { activityDiffHtml } from "./diff_view.js";
16
17
  import { escapeHtml, messageBodyHtml, noteHtml, normalize, steerRowHtml } from "./format.js";
17
18
  import { thumbsHtml } from "./images.js";
@@ -45,11 +46,17 @@ function fillActivityRow(el, row, sessionId) {
45
46
  if (toolEl) toolEl.textContent = toolName(row);
46
47
  const paramsEl = el.querySelector(".activity-params");
47
48
  if (paramsEl) {
48
- // The title in place of the params; the full params line on hover.
49
+ // The title in place of the params; the full command (else the full
50
+ // params line) on hover.
49
51
  paramsEl.textContent = row.title || row.params || "";
50
- paramsEl.title = row.title && row.params ? row.params : "";
52
+ paramsEl.title = rowHover(row);
51
53
  }
52
54
  const outEl = el.querySelector(".activity-output");
55
+ // The call's full command, above its output (running too).
56
+ if (row.view?.command && !el.querySelector(".activity-command")) {
57
+ if (outEl) outEl.insertAdjacentHTML("beforebegin", commandBlockHtml(row.view));
58
+ else el.insertAdjacentHTML("beforeend", commandBlockHtml(row.view));
59
+ }
53
60
  if (outEl) {
54
61
  if (row.status === "running") {
55
62
  outEl.style.display = "none";
@@ -667,14 +674,15 @@ function defaultPlaceAnswer(appendToHistory) {
667
674
  };
668
675
  }
669
676
 
670
- // A reloaded tool row, the live row's markup (fillActivityRow): status, tool, params, output (its "[tool]" tag dropped,
671
- // 300 chars, the rest on hover), plus the call's duration from its record.
677
+ // A reloaded tool row, the live row's markup (fillActivityRow): status, tool, params, the full command (an
678
+ // execute/task_create's view), output (its "[tool]" tag dropped, 300 chars, the rest on hover), plus the call's
679
+ // duration from its record.
672
680
  // Params, output and the call's images come from the saved messages'
673
681
  // parts; without them the row has the record's name, status and duration
674
682
  // only. +thumbs(images)+ draws the images, as the live row does.
675
683
  function reloadRowHtml(r, thumbs) {
676
684
  const shown = r.title || r.params;
677
- const hover = r.title && r.params ? ` title="${escapeHtml(r.params)}"` : "";
685
+ const hover = rowHover(r) ? ` title="${escapeHtml(rowHover(r))}"` : "";
678
686
  const params = shown ? `<span class="activity-params"${hover}>${escapeHtml(shown)}</span>` : "";
679
687
  const duration = formatDuration(r.duration_ms);
680
688
  const full = String(r.output || "").replace(/^\[[^\]]*\]\s*/, "");
@@ -682,7 +690,8 @@ function reloadRowHtml(r, thumbs) {
682
690
  ? `<div class="activity-output" title="${escapeHtml(full)}">${escapeHtml(full.length > 300 ? `${full.slice(0, 300)}…` : full)}</div>`
683
691
  : "";
684
692
  return `<div class="activity-row" data-key="${escapeHtml(r.key)}"><span class="activity-status ${activityStatusClass(r.status)}">${activityStatusLabel(r.status)}</span>` +
685
- `<span class="activity-tool">${escapeHtml(toolName(r))}</span>${params}${duration ? `<span class="activity-duration">${escapeHtml(duration)}</span>` : ""}${output}` +
693
+ `<span class="activity-tool">${escapeHtml(toolName(r))}</span>${params}${duration ? `<span class="activity-duration">${escapeHtml(duration)}</span>` : ""}` +
694
+ `${commandBlockHtml(r.view)}${output}` +
686
695
  `${r.images?.length ? thumbs(r.images) : ""}${r.diff ? activityDiffHtml(r.diff) : ""}</div>`;
687
696
  }
688
697
 
@@ -21,7 +21,13 @@ module Samagotchi
21
21
  rows = matrix(text, quiet: quiet)
22
22
  rows << Array.new(rows.first.size, false) if rows.size.odd?
23
23
  rows.each_slice(2).map do |top, bottom|
24
- line = top.zip(bottom).map { |t, b| t ? (b ? "█" : "▀") : (b ? "▄" : " ") }.join
24
+ line = top.zip(bottom).map do |t, b|
25
+ if t
26
+ b ? "█" : "▀"
27
+ else
28
+ (b ? "▄" : " ")
29
+ end
30
+ end.join
25
31
  color ? "#{COLORS}#{line}#{RESET}" : line
26
32
  end
27
33
  end
@@ -94,8 +94,12 @@ module Samagotchi
94
94
  puts lan_off_line(setting)
95
95
  return 0
96
96
  end
97
- start(port: port, host: host, url: url, open_browser: open_browser, markdown: markdown, view: view,
98
- annotate_presets: annotate_presets, lan: lan) ? 0 : 1
97
+ if start(port: port, host: host, url: url, open_browser: open_browser, markdown: markdown, view: view,
98
+ annotate_presets: annotate_presets, lan: lan)
99
+ 0
100
+ else
101
+ 1
102
+ end
99
103
  end
100
104
  rescue Lan::Error => e
101
105
  warn "Error: #{e.message}"
@@ -7,6 +7,7 @@ require_relative "session"
7
7
  require_relative "session_inbox"
8
8
  require_relative "turn_note"
9
9
  require_relative "context_note"
10
+ require_relative "steer"
10
11
  require_relative "worker_idle_exit"
11
12
  require_relative "session_manager"
12
13
  require_relative "archive_store"
@@ -166,6 +167,7 @@ module Samagotchi
166
167
  # A session stopped before this worker took the lock (e.g. a stop
167
168
  # right after create) must not run its initial prompt.
168
169
  return :stopped if stopped_on_disk?
170
+
169
171
  # Plugins' slow setup (chi.init: an MCP server's first start), in
170
172
  # the background, shown by the UIs; a turn waits only for the ones
171
173
  # that bring tools.
@@ -483,15 +485,22 @@ module Samagotchi
483
485
  # queued while it ran are refused, then the caller's block takes the
484
486
  # result (or the error the Engine announced as :turn_failed), the
485
487
  # answer goes to the output file and the session is saved.
488
+ # A failure before the Engine's turn began (this save, say) goes to the
489
+ # block too, with no :turn_failed: it is logged, the session idle again.
486
490
  # @yieldparam result [Object, nil] Engine#run_turn's, nil on a failure
487
491
  # @yieldparam error [StandardError, nil]
488
492
  def run_engine_turn(prompt, **turn_args)
489
- @session.status = Session::STATUS_RUNNING
490
- @session.save(state_dir: @state_dir)
491
493
  begin
494
+ @session.status = Session::STATUS_RUNNING
495
+ @session.save(state_dir: @state_dir)
492
496
  result = @engine.run_turn(@session, prompt, pending_input: pending_input_drain, **turn_args)
493
497
  rescue StandardError => e
494
498
  error = e
499
+ # Still running: no turn of the Engine's ended (it never began).
500
+ if @session.status == Session::STATUS_RUNNING
501
+ @session.status = Session::STATUS_IDLE
502
+ Log.warn(:worker, "turn_not_begun", error: e.class.name, msg: e.message)
503
+ end
495
504
  ensure
496
505
  refuse_queued_commands
497
506
  end
@@ -563,7 +572,9 @@ module Samagotchi
563
572
  @engine.announce(type: :input_merged, count: merged.size, origins: merged.filter_map(&:last))
564
573
  @merged_this_turn.concat(merged)
565
574
  end
566
- merged.map(&:first)
575
+ # Each line keeps its sender (Steer.source_for_client): a chi send or
576
+ # a delegating parent's line is saved and shown to the model as theirs.
577
+ merged.map { |prompt, origin| Steer::Line.new(text: prompt, source: Steer.source_for_client(origin&.dig(:client_id))) }
567
578
  end
568
579
  end
569
580
 
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: samagotchi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.22.0
4
+ version: 0.24.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Dmitry Dedov
@@ -9,20 +9,6 @@ bindir: bin
9
9
  cert_chain: []
10
10
  date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
- - !ruby/object:Gem::Dependency
13
- name: reline
14
- requirement: !ruby/object:Gem::Requirement
15
- requirements:
16
- - - "~>"
17
- - !ruby/object:Gem::Version
18
- version: 0.6.3
19
- type: :runtime
20
- prerelease: false
21
- version_requirements: !ruby/object:Gem::Requirement
22
- requirements:
23
- - - "~>"
24
- - !ruby/object:Gem::Version
25
- version: 0.6.3
26
12
  - !ruby/object:Gem::Dependency
27
13
  name: json
28
14
  requirement: !ruby/object:Gem::Requirement
@@ -80,19 +66,19 @@ dependencies:
80
66
  - !ruby/object:Gem::Version
81
67
  version: '0'
82
68
  - !ruby/object:Gem::Dependency
83
- name: webrick
69
+ name: reline
84
70
  requirement: !ruby/object:Gem::Requirement
85
71
  requirements:
86
- - - ">="
72
+ - - "~>"
87
73
  - !ruby/object:Gem::Version
88
- version: '0'
74
+ version: 0.6.3
89
75
  type: :runtime
90
76
  prerelease: false
91
77
  version_requirements: !ruby/object:Gem::Requirement
92
78
  requirements:
93
- - - ">="
79
+ - - "~>"
94
80
  - !ruby/object:Gem::Version
95
- version: '0'
81
+ version: 0.6.3
96
82
  - !ruby/object:Gem::Dependency
97
83
  name: rqrcode_core
98
84
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +93,20 @@ dependencies:
107
93
  - - "~>"
108
94
  - !ruby/object:Gem::Version
109
95
  version: '2.0'
96
+ - !ruby/object:Gem::Dependency
97
+ name: webrick
98
+ requirement: !ruby/object:Gem::Requirement
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: '0'
103
+ type: :runtime
104
+ prerelease: false
105
+ version_requirements: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
110
  description: chi is an agent harness for local and OpenAI-compatible models (llama.cpp,
111
111
  mlx, oMLX, hosted APIs). It runs sessions in a terminal REPL or in background workers
112
112
  you can attach to from the terminal and a web UI, keeps memories in plain files
@@ -223,6 +223,7 @@ files:
223
223
  - lib/samagotchi/engine.rb
224
224
  - lib/samagotchi/events.rb
225
225
  - lib/samagotchi/gem_update.rb
226
+ - lib/samagotchi/generation_phase.rb
226
227
  - lib/samagotchi/guardrail_wiring.rb
227
228
  - lib/samagotchi/guardrails.rb
228
229
  - lib/samagotchi/guardrails/approval.rb
@@ -380,6 +381,7 @@ files:
380
381
  - lib/samagotchi/tool_declarations.rb
381
382
  - lib/samagotchi/tool_response.rb
382
383
  - lib/samagotchi/tool_runner.rb
384
+ - lib/samagotchi/tool_view.rb
383
385
  - lib/samagotchi/tools/args.rb
384
386
  - lib/samagotchi/tools/ask_user_question.rb
385
387
  - lib/samagotchi/tools/builtin_calls.rb
@@ -420,6 +422,7 @@ files:
420
422
  - lib/samagotchi/version.rb
421
423
  - lib/samagotchi/vision_context.rb
422
424
  - lib/samagotchi/vision_support.rb
425
+ - lib/samagotchi/waiting_steer.rb
423
426
  - lib/samagotchi/web/app.rb
424
427
  - lib/samagotchi/web/info_probe.rb
425
428
  - lib/samagotchi/web/lan.rb
@@ -434,6 +437,7 @@ files:
434
437
  - lib/samagotchi/web/public/chunk_router.js
435
438
  - lib/samagotchi/web/public/command_complete.js
436
439
  - lib/samagotchi/web/public/command_list.js
440
+ - lib/samagotchi/web/public/command_view.js
437
441
  - lib/samagotchi/web/public/composer_size.js
438
442
  - lib/samagotchi/web/public/copy.js
439
443
  - lib/samagotchi/web/public/ctx.js