openclacky 1.2.6 → 1.2.8
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 +34 -0
- data/README.md +34 -0
- data/README_CN.md +34 -0
- data/lib/clacky/agent/cost_tracker.rb +7 -1
- data/lib/clacky/agent/message_compressor.rb +2 -1
- data/lib/clacky/agent/message_compressor_helper.rb +6 -2
- data/lib/clacky/agent/session_serializer.rb +23 -4
- data/lib/clacky/agent.rb +46 -2
- data/lib/clacky/agent_config.rb +54 -6
- data/lib/clacky/billing/billing_store.rb +107 -3
- data/lib/clacky/brand_config.rb +0 -6
- data/lib/clacky/cli.rb +107 -1
- data/lib/clacky/client.rb +56 -6
- data/lib/clacky/default_skills/deploy/SKILL.md +2 -1
- data/lib/clacky/default_skills/extend-openclacky/SKILL.md +39 -0
- data/lib/clacky/default_skills/mcp-manager/SKILL.md +0 -7
- data/lib/clacky/default_skills/onboard/SKILL.md +2 -2
- data/lib/clacky/json_ui_controller.rb +5 -2
- data/lib/clacky/patch_loader.rb +282 -0
- data/lib/clacky/plain_ui_controller.rb +1 -1
- data/lib/clacky/providers.rb +11 -2
- data/lib/clacky/server/channel/adapters/base.rb +4 -0
- data/lib/clacky/server/channel/channel_manager.rb +149 -13
- data/lib/clacky/server/channel/channel_ui_controller.rb +4 -2
- data/lib/clacky/server/channel/user_adapter_loader.rb +177 -0
- data/lib/clacky/server/channel.rb +5 -0
- data/lib/clacky/server/http_server.rb +135 -14
- data/lib/clacky/server/scheduler.rb +1 -4
- data/lib/clacky/server/session_registry.rb +30 -4
- data/lib/clacky/server/web_ui_controller.rb +6 -3
- data/lib/clacky/shell_hook_loader.rb +181 -0
- data/lib/clacky/tools/terminal.rb +22 -26
- data/lib/clacky/ui2/ui_controller.rb +1 -1
- data/lib/clacky/ui_interface.rb +1 -1
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +392 -14
- data/lib/clacky/web/app.js +0 -1
- data/lib/clacky/web/billing.js +117 -22
- data/lib/clacky/web/i18n.js +50 -6
- data/lib/clacky/web/index.html +33 -0
- data/lib/clacky/web/sessions.js +203 -14
- data/lib/clacky/web/settings.js +59 -17
- data/lib/clacky/web/workspace.js +204 -0
- data/lib/clacky/web/ws-dispatcher.js +19 -3
- data/lib/clacky.rb +15 -0
- metadata +7 -2
|
@@ -18,7 +18,6 @@
|
|
|
18
18
|
|
|
19
19
|
|
|
20
20
|
WS.onEvent(ev => {
|
|
21
|
-
console.log("[DEBUG] WS event received:", ev.type, ev);
|
|
22
21
|
switch (ev.type) {
|
|
23
22
|
|
|
24
23
|
// ── Internal WS lifecycle ──────────────────────────────────────────
|
|
@@ -273,11 +272,28 @@ WS.onEvent(ev => {
|
|
|
273
272
|
break;
|
|
274
273
|
|
|
275
274
|
case "error":
|
|
276
|
-
if (!ev.session_id || ev.session_id === Sessions.activeId)
|
|
277
|
-
|
|
275
|
+
if (!ev.session_id || ev.session_id === Sessions.activeId) {
|
|
276
|
+
renderErrorEvent(ev);
|
|
277
|
+
}
|
|
278
278
|
break;
|
|
279
279
|
}
|
|
280
280
|
});
|
|
281
281
|
|
|
282
|
+
// ── Error rendering ────────────────────────────────────────────────────────
|
|
283
|
+
|
|
284
|
+
function renderErrorEvent(ev) {
|
|
285
|
+
if (ev.code === "insufficient_credit") {
|
|
286
|
+
const body = escapeHtml(I18n.t("error.insufficient_credit"));
|
|
287
|
+
const action = ev.top_up_url
|
|
288
|
+
? ` <a href="${escapeHtml(ev.top_up_url)}" target="_blank" rel="noopener noreferrer">${escapeHtml(I18n.t("error.insufficient_credit.action"))} →</a>`
|
|
289
|
+
: "";
|
|
290
|
+
Sessions.appendMsg("error", `<span>${body}${action}</span>`);
|
|
291
|
+
return;
|
|
292
|
+
}
|
|
293
|
+
Sessions.appendMsg("error", escapeHtml(ev.message));
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
window.renderErrorEvent = renderErrorEvent;
|
|
297
|
+
|
|
282
298
|
|
|
283
299
|
})();
|
data/lib/clacky.rb
CHANGED
|
@@ -83,6 +83,7 @@ require_relative "clacky/idle_compression_timer"
|
|
|
83
83
|
# Agent modules
|
|
84
84
|
require_relative "clacky/agent/message_compressor"
|
|
85
85
|
require_relative "clacky/agent/hook_manager"
|
|
86
|
+
require_relative "clacky/shell_hook_loader"
|
|
86
87
|
require_relative "clacky/agent/tool_registry"
|
|
87
88
|
|
|
88
89
|
# UI modules
|
|
@@ -132,10 +133,24 @@ require_relative "clacky/server/web_ui_controller"
|
|
|
132
133
|
require_relative "clacky/server/browser_manager"
|
|
133
134
|
require_relative "clacky/cli"
|
|
134
135
|
|
|
136
|
+
# Runtime patch layer: load user/AI patches from ~/.clacky/patches/ after all
|
|
137
|
+
# gem code is defined, so fingerprints reflect the actual installed source.
|
|
138
|
+
require_relative "clacky/patch_loader"
|
|
139
|
+
Clacky::PatchLoader.load_all
|
|
140
|
+
|
|
135
141
|
module Clacky
|
|
136
142
|
class AgentInterrupted < Exception; end # Inherit from Exception to bypass rescue StandardError
|
|
137
143
|
class AgentError < StandardError; end
|
|
138
144
|
class BadRequestError < AgentError; end # 400 errors — our request was malformed, history should be rolled back
|
|
145
|
+
class InsufficientCreditError < AgentError
|
|
146
|
+
attr_reader :error_code, :provider_id
|
|
147
|
+
|
|
148
|
+
def initialize(message, error_code: nil, provider_id: nil)
|
|
149
|
+
super(message)
|
|
150
|
+
@error_code = error_code
|
|
151
|
+
@provider_id = provider_id
|
|
152
|
+
end
|
|
153
|
+
end
|
|
139
154
|
class RetryableError < StandardError; end # Transient errors that should be retried (5xx, HTML response, rate limit)
|
|
140
155
|
# Upstream (model/router like OpenRouter/Bedrock) returned finish_reason="stop" together with
|
|
141
156
|
# one or more tool_calls whose `arguments` JSON was truncated (empty, "{}" placeholder, or
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: openclacky
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.2.
|
|
4
|
+
version: 1.2.8
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- windy
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-
|
|
11
|
+
date: 2026-06-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: faraday
|
|
@@ -374,6 +374,7 @@ files:
|
|
|
374
374
|
- lib/clacky/default_skills/cron-task-creator/SKILL.md
|
|
375
375
|
- lib/clacky/default_skills/cron-task-creator/evals/evals.json
|
|
376
376
|
- lib/clacky/default_skills/deploy/SKILL.md
|
|
377
|
+
- lib/clacky/default_skills/extend-openclacky/SKILL.md
|
|
377
378
|
- lib/clacky/default_skills/mcp-manager/SKILL.md
|
|
378
379
|
- lib/clacky/default_skills/new/SKILL.md
|
|
379
380
|
- lib/clacky/default_skills/new/scripts/create_rails_project.sh
|
|
@@ -417,6 +418,7 @@ files:
|
|
|
417
418
|
- lib/clacky/message_format/open_ai.rb
|
|
418
419
|
- lib/clacky/message_history.rb
|
|
419
420
|
- lib/clacky/openai_stream_aggregator.rb
|
|
421
|
+
- lib/clacky/patch_loader.rb
|
|
420
422
|
- lib/clacky/plain_ui_controller.rb
|
|
421
423
|
- lib/clacky/platform_http_client.rb
|
|
422
424
|
- lib/clacky/providers.rb
|
|
@@ -444,6 +446,7 @@ files:
|
|
|
444
446
|
- lib/clacky/server/channel/channel_config.rb
|
|
445
447
|
- lib/clacky/server/channel/channel_manager.rb
|
|
446
448
|
- lib/clacky/server/channel/channel_ui_controller.rb
|
|
449
|
+
- lib/clacky/server/channel/user_adapter_loader.rb
|
|
447
450
|
- lib/clacky/server/discover.rb
|
|
448
451
|
- lib/clacky/server/epipe_safe_io.rb
|
|
449
452
|
- lib/clacky/server/http_server.rb
|
|
@@ -452,6 +455,7 @@ files:
|
|
|
452
455
|
- lib/clacky/server/session_registry.rb
|
|
453
456
|
- lib/clacky/server/web_ui_controller.rb
|
|
454
457
|
- lib/clacky/session_manager.rb
|
|
458
|
+
- lib/clacky/shell_hook_loader.rb
|
|
455
459
|
- lib/clacky/skill.rb
|
|
456
460
|
- lib/clacky/skill_loader.rb
|
|
457
461
|
- lib/clacky/telemetry.rb
|
|
@@ -570,6 +574,7 @@ files:
|
|
|
570
574
|
- lib/clacky/web/vendor/katex/katex.min.js
|
|
571
575
|
- lib/clacky/web/version.js
|
|
572
576
|
- lib/clacky/web/weixin-qr.html
|
|
577
|
+
- lib/clacky/web/workspace.js
|
|
573
578
|
- lib/clacky/web/ws-dispatcher.js
|
|
574
579
|
- lib/clacky/web/ws.js
|
|
575
580
|
- scripts/build/build.sh
|