openclacky 1.3.2 → 1.3.4
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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +54 -0
- data/Dockerfile +3 -0
- data/README.md +1 -1
- data/README_JA.md +237 -0
- data/docs/rich_ui_guide.md +277 -0
- data/docs/rich_ui_refactor_plan.md +396 -0
- data/lib/clacky/agent/llm_caller.rb +10 -4
- data/lib/clacky/agent/session_serializer.rb +52 -7
- data/lib/clacky/agent/time_machine.rb +247 -26
- data/lib/clacky/agent.rb +15 -3
- data/lib/clacky/api_extension.rb +262 -0
- data/lib/clacky/api_extension_loader.rb +156 -0
- data/lib/clacky/cli.rb +93 -3
- data/lib/clacky/client.rb +38 -13
- data/lib/clacky/default_agents/_panels/git/panel.js +201 -0
- data/lib/clacky/default_agents/_panels/time_machine/panel.js +640 -0
- data/lib/clacky/default_agents/coding/profile.yml +3 -0
- data/lib/clacky/default_agents/coding/webui/.gitkeep +0 -0
- data/lib/clacky/default_skills/cron-task-creator/SKILL.md +1 -1
- data/lib/clacky/default_skills/extend-openclacky/SKILL.md +6 -4
- data/lib/clacky/default_skills/media-gen/SKILL.md +37 -10
- data/lib/clacky/idle_compression_timer.rb +3 -1
- data/lib/clacky/locales/en.rb +26 -0
- data/lib/clacky/locales/i18n.rb +26 -0
- data/lib/clacky/locales/zh.rb +26 -0
- data/lib/clacky/media/openai_compat.rb +64 -1
- data/lib/clacky/message_history.rb +9 -0
- data/lib/clacky/rich_ui/components/base_component.rb +50 -0
- data/lib/clacky/rich_ui/components/dialogs/approval_dialog.rb +142 -0
- data/lib/clacky/rich_ui/components/dialogs/config_menu_dialog.rb +106 -0
- data/lib/clacky/rich_ui/components/dialogs/form_dialog.rb +128 -0
- data/lib/clacky/rich_ui/components/sidebar.rb +119 -0
- data/lib/clacky/rich_ui/components/sidebar_panels.rb +134 -0
- data/lib/clacky/rich_ui/components/status_view.rb +58 -0
- data/lib/clacky/rich_ui/components/thinking_live_view.rb +79 -0
- data/lib/clacky/rich_ui/entry_tracker.rb +56 -0
- data/lib/clacky/rich_ui/layout_adapter.rb +16 -0
- data/lib/clacky/rich_ui/progress_handle_adapter.rb +24 -0
- data/lib/clacky/rich_ui/rich_ui_controller.rb +868 -0
- data/lib/clacky/rich_ui/shell/rich_agent_shell.rb +184 -0
- data/lib/clacky/rich_ui/view_renderer.rb +291 -0
- data/lib/clacky/rich_ui.rb +57 -0
- data/lib/clacky/rich_ui_controller.rb +3 -1549
- data/lib/clacky/server/api_extension_dispatcher.rb +120 -0
- data/lib/clacky/server/channel/channel_manager.rb +26 -0
- data/lib/clacky/server/git_panel.rb +115 -0
- data/lib/clacky/server/http_server.rb +547 -15
- data/lib/clacky/server/server_master.rb +6 -4
- data/lib/clacky/server/session_registry.rb +1 -1
- data/lib/clacky/shell_hook_loader.rb +1 -1
- data/lib/clacky/tools/edit.rb +14 -2
- data/lib/clacky/ui2/ui_controller.rb +7 -0
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +511 -101
- data/lib/clacky/web/app.js +95 -14
- data/lib/clacky/web/components/code-editor.js +197 -0
- data/lib/clacky/web/{notify.js → components/notify.js} +1 -1
- data/lib/clacky/web/{onboard.js → components/onboard.js} +18 -2
- data/lib/clacky/web/core/aside.js +117 -0
- data/lib/clacky/web/core/ext.js +387 -0
- data/lib/clacky/web/features/backup/store.js +92 -0
- data/lib/clacky/web/features/backup/view.js +94 -0
- data/lib/clacky/web/features/billing/store.js +163 -0
- data/lib/clacky/web/{billing.js → features/billing/view.js} +132 -240
- data/lib/clacky/web/features/brand/store.js +110 -0
- data/lib/clacky/web/{brand.js → features/brand/view.js} +49 -199
- data/lib/clacky/web/features/channels/store.js +103 -0
- data/lib/clacky/web/{channels.js → features/channels/view.js} +50 -127
- data/lib/clacky/web/features/creator/store.js +81 -0
- data/lib/clacky/web/{creator.js → features/creator/view.js} +53 -102
- data/lib/clacky/web/features/mcp/store.js +158 -0
- data/lib/clacky/web/{mcp.js → features/mcp/view.js} +57 -134
- data/lib/clacky/web/features/model-tester/store.js +77 -0
- data/lib/clacky/web/features/model-tester/view.js +7 -0
- data/lib/clacky/web/features/profile/store.js +170 -0
- data/lib/clacky/web/{profile.js → features/profile/view.js} +94 -144
- data/lib/clacky/web/features/share/store.js +145 -0
- data/lib/clacky/web/{share.js → features/share/view.js} +66 -202
- data/lib/clacky/web/features/skills/store.js +331 -0
- data/lib/clacky/web/features/skills/view.js +581 -0
- data/lib/clacky/web/features/tasks/store.js +135 -0
- data/lib/clacky/web/features/tasks/view.js +241 -0
- data/lib/clacky/web/features/trash/store.js +242 -0
- data/lib/clacky/web/{trash.js → features/trash/view.js} +102 -293
- data/lib/clacky/web/features/version/store.js +165 -0
- data/lib/clacky/web/features/version/view.js +323 -0
- data/lib/clacky/web/features/workspace/store.js +99 -0
- data/lib/clacky/web/features/workspace/view.js +305 -0
- data/lib/clacky/web/i18n.js +68 -6
- data/lib/clacky/web/index.html +113 -62
- data/lib/clacky/web/sessions.js +493 -39
- data/lib/clacky/web/settings.js +143 -49
- data/lib/clacky/web/skills.js +3 -863
- data/lib/clacky/web/vendor/codemirror/codemirror.min.js +29 -0
- data/lib/clacky/web/ws-dispatcher.js +7 -3
- data/lib/clacky.rb +17 -1
- metadata +81 -20
- data/lib/clacky/web/backup.js +0 -119
- data/lib/clacky/web/model-tester.js +0 -66
- data/lib/clacky/web/tasks.js +0 -373
- data/lib/clacky/web/version.js +0 -449
- data/lib/clacky/web/workspace.js +0 -316
- /data/lib/clacky/web/{notify.mp3 → assets/notify.mp3} +0 -0
- /data/lib/clacky/web/{datepicker.js → components/datepicker.js} +0 -0
- /data/lib/clacky/web/{sidebar.js → components/sidebar.js} +0 -0
- /data/lib/clacky/web/{marked.min.js → vendor/marked/marked.min.js} +0 -0
|
@@ -36,6 +36,7 @@ module Clacky
|
|
|
36
36
|
@worker_pid = nil
|
|
37
37
|
@restart_requested = false
|
|
38
38
|
@shutdown_requested = false
|
|
39
|
+
@shutdown_signal = nil
|
|
39
40
|
end
|
|
40
41
|
|
|
41
42
|
def run
|
|
@@ -68,9 +69,9 @@ module Clacky
|
|
|
68
69
|
|
|
69
70
|
# 3. Signal handlers
|
|
70
71
|
Signal.trap("USR1") { @restart_requested = true }
|
|
71
|
-
Signal.trap("TERM") { @shutdown_requested = true }
|
|
72
|
-
Signal.trap("INT") { @shutdown_requested = true }
|
|
73
|
-
Signal.trap("HUP") { @shutdown_requested = true }
|
|
72
|
+
Signal.trap("TERM") { @shutdown_signal = "TERM"; @shutdown_requested = true }
|
|
73
|
+
Signal.trap("INT") { @shutdown_signal = "INT"; @shutdown_requested = true }
|
|
74
|
+
Signal.trap("HUP") { @shutdown_signal = "HUP"; @shutdown_requested = true }
|
|
74
75
|
|
|
75
76
|
# 4. Spawn first worker
|
|
76
77
|
@worker_pid = spawn_worker
|
|
@@ -184,7 +185,8 @@ module Clacky
|
|
|
184
185
|
end
|
|
185
186
|
|
|
186
187
|
def shutdown
|
|
187
|
-
|
|
188
|
+
reason = @shutdown_signal ? "signal=SIG#{@shutdown_signal}" : "signal=none"
|
|
189
|
+
Clacky::Logger.info("[Master] Shutting down (worker PID=#{@worker_pid}) #{reason}...")
|
|
188
190
|
if @worker_pid
|
|
189
191
|
begin
|
|
190
192
|
# TERM the entire worker process group so grandchildren (node MCP, etc.)
|
|
@@ -440,7 +440,7 @@ module Clacky
|
|
|
440
440
|
|
|
441
441
|
private def persist_and_release(id, session)
|
|
442
442
|
agent = session[:agent]
|
|
443
|
-
@session_manager&.save(agent.to_session_data(status: :success)) if agent
|
|
443
|
+
@session_manager&.save(agent.to_session_data(status: :success, preserve_updated_at: true)) if agent
|
|
444
444
|
|
|
445
445
|
@mutex.synchronize do
|
|
446
446
|
s = @sessions[id]
|
data/lib/clacky/tools/edit.rb
CHANGED
|
@@ -67,8 +67,20 @@ module Clacky
|
|
|
67
67
|
}
|
|
68
68
|
end
|
|
69
69
|
|
|
70
|
-
# Perform replacement
|
|
71
|
-
|
|
70
|
+
# Perform literal replacement.
|
|
71
|
+
#
|
|
72
|
+
# NOTE: Use the block form (`sub(old) { new }`) instead of the
|
|
73
|
+
# two-arg form (`sub(old, new)`). The two-arg form interprets
|
|
74
|
+
# backslash escapes (\&, \1, \`, \', \\) in the replacement
|
|
75
|
+
# as sed-style backreferences, silently mangling literal
|
|
76
|
+
# backslashes and these escape sequences. The block form
|
|
77
|
+
# performs no such interpretation, matching the edit tool's
|
|
78
|
+
# literal-replacement contract.
|
|
79
|
+
content = if replace_all
|
|
80
|
+
content.gsub(actual_old_string) { new_string }
|
|
81
|
+
else
|
|
82
|
+
content.sub(actual_old_string) { new_string }
|
|
83
|
+
end
|
|
72
84
|
|
|
73
85
|
File.write(path, content)
|
|
74
86
|
|
|
@@ -47,6 +47,7 @@ module Clacky
|
|
|
47
47
|
@input_callback = nil
|
|
48
48
|
@interrupt_callback = nil
|
|
49
49
|
@time_machine_callback = nil
|
|
50
|
+
@model_switch_callback = nil
|
|
50
51
|
@tasks_count = 0
|
|
51
52
|
@total_cost = 0.0
|
|
52
53
|
@session_id = nil
|
|
@@ -192,6 +193,12 @@ module Clacky
|
|
|
192
193
|
@time_machine_callback = block
|
|
193
194
|
end
|
|
194
195
|
|
|
196
|
+
# Set callback for model switch (from /model slash command)
|
|
197
|
+
# @param block [Proc] Callback to execute on model switch
|
|
198
|
+
def on_model_switch(&block)
|
|
199
|
+
@model_switch_callback = block
|
|
200
|
+
end
|
|
201
|
+
|
|
195
202
|
# Set agent for command suggestions
|
|
196
203
|
# @param agent [Clacky::Agent] The agent instance with skill management
|
|
197
204
|
# @param agent_profile [Clacky::AgentProfile, nil] Current agent profile for skill filtering
|
data/lib/clacky/version.rb
CHANGED