openclacky 1.2.10 → 1.2.13

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 (73) hide show
  1. checksums.yaml +4 -4
  2. data/.clacky/skills/gem-release/SKILL.md +1 -1
  3. data/.clacky/skills/gem-release/scripts/release.sh +4 -1
  4. data/CHANGELOG.md +56 -1
  5. data/lib/clacky/agent/llm_caller.rb +40 -25
  6. data/lib/clacky/agent/memory_updater.rb +12 -0
  7. data/lib/clacky/agent/session_serializer.rb +1 -1
  8. data/lib/clacky/agent/skill_auto_creator.rb +7 -4
  9. data/lib/clacky/agent/skill_evolution.rb +23 -5
  10. data/lib/clacky/agent/skill_manager.rb +86 -1
  11. data/lib/clacky/agent/skill_reflector.rb +18 -23
  12. data/lib/clacky/agent/tool_registry.rb +10 -0
  13. data/lib/clacky/agent.rb +68 -23
  14. data/lib/clacky/agent_config.rb +59 -15
  15. data/lib/clacky/anthropic_stream_aggregator.rb +17 -1
  16. data/lib/clacky/bedrock_stream_aggregator.rb +17 -1
  17. data/lib/clacky/cli.rb +55 -0
  18. data/lib/clacky/client.rb +25 -3
  19. data/lib/clacky/default_skills/channel-manager/SKILL.md +47 -42
  20. data/lib/clacky/default_skills/channel-manager/feishu_setup.rb +134 -0
  21. data/lib/clacky/default_skills/media-gen/SKILL.md +5 -0
  22. data/lib/clacky/default_skills/persist-memory/SKILL.md +4 -3
  23. data/lib/clacky/default_skills/search-skills/SKILL.md +61 -0
  24. data/lib/clacky/idle_compression_timer.rb +1 -1
  25. data/lib/clacky/message_format/open_ai.rb +7 -1
  26. data/lib/clacky/message_history.rb +57 -0
  27. data/lib/clacky/openai_stream_aggregator.rb +30 -3
  28. data/lib/clacky/providers.rb +40 -12
  29. data/lib/clacky/server/channel/adapters/dingtalk/adapter.rb +10 -1
  30. data/lib/clacky/server/channel/adapters/discord/adapter.rb +8 -2
  31. data/lib/clacky/server/channel/adapters/feishu/adapter.rb +10 -1
  32. data/lib/clacky/server/channel/adapters/feishu/bot.rb +12 -0
  33. data/lib/clacky/server/channel/adapters/feishu/message_parser.rb +23 -3
  34. data/lib/clacky/server/channel/adapters/telegram/adapter.rb +12 -2
  35. data/lib/clacky/server/channel/adapters/wecom/adapter.rb +5 -1
  36. data/lib/clacky/server/channel/channel_manager.rb +65 -4
  37. data/lib/clacky/server/channel/group_message_buffer.rb +53 -0
  38. data/lib/clacky/server/http_server.rb +190 -10
  39. data/lib/clacky/server/session_registry.rb +34 -14
  40. data/lib/clacky/server/web_ui_controller.rb +24 -1
  41. data/lib/clacky/session_manager.rb +120 -0
  42. data/lib/clacky/tools/trash_manager.rb +1 -1
  43. data/lib/clacky/tools/web_search.rb +59 -8
  44. data/lib/clacky/ui2/layout_manager.rb +15 -5
  45. data/lib/clacky/ui2/progress_handle.rb +7 -1
  46. data/lib/clacky/ui2/ui_controller.rb +27 -0
  47. data/lib/clacky/ui_interface.rb +22 -0
  48. data/lib/clacky/utils/model_pricing.rb +96 -0
  49. data/lib/clacky/version.rb +1 -1
  50. data/lib/clacky/web/app.css +230 -7
  51. data/lib/clacky/web/app.js +6 -5
  52. data/lib/clacky/web/apple-touch-icon-180.png +0 -0
  53. data/lib/clacky/web/brand.js +22 -2
  54. data/lib/clacky/web/favicon.ico +0 -0
  55. data/lib/clacky/web/i18n.js +22 -4
  56. data/lib/clacky/web/index.html +6 -4
  57. data/lib/clacky/web/logo_nav_dark.png +0 -0
  58. data/lib/clacky/web/model-tester.js +8 -1
  59. data/lib/clacky/web/sessions.js +576 -120
  60. data/lib/clacky/web/settings.js +213 -51
  61. data/lib/clacky/web/skills.js +5 -14
  62. data/lib/clacky/web/theme.js +1 -0
  63. data/lib/clacky/web/utils.js +57 -0
  64. data/lib/clacky/web/ws-dispatcher.js +136 -0
  65. data/scripts/build/lib/gem.sh +9 -2
  66. data/scripts/build/src/install_full.sh.cc +2 -0
  67. data/scripts/build/src/uninstall.sh.cc +1 -1
  68. data/scripts/install.ps1 +19 -5
  69. data/scripts/install.sh +9 -2
  70. data/scripts/install_full.sh +11 -2
  71. data/scripts/install_rails_deps.sh +9 -2
  72. data/scripts/uninstall.sh +10 -3
  73. metadata +9 -2
data/scripts/install.ps1 CHANGED
@@ -10,6 +10,7 @@
10
10
  # Parameters:
11
11
  # -BrandName Display name shown in prompts (default: OpenClacky)
12
12
  # -CommandName CLI command name after install (default: openclacky)
13
+ # -Region CDN region: china (default) or global (use global for non-China networks)
13
14
  #
14
15
  # WSL1 is preferred (shares Windows network stack — no mirrored networking needed).
15
16
  # If WSL1 import fails, the script falls back to WSL2 with mirrored networking.
@@ -22,7 +23,9 @@
22
23
  param(
23
24
  [switch]$Local,
24
25
  [string]$BrandName = "",
25
- [string]$CommandName = ""
26
+ [string]$CommandName = "",
27
+ [ValidateSet("china", "global")]
28
+ [string]$Region = "china"
26
29
  )
27
30
 
28
31
  Set-StrictMode -Version Latest
@@ -32,11 +35,19 @@ $env:WSL_UTF8 = "1"
32
35
  $global:DisplayName = if ($BrandName) { $BrandName } else { "OpenClacky" }
33
36
  $global:DisplayCmd = if ($CommandName) { $CommandName } else { "openclacky" }
34
37
 
35
- $CLACKY_CDN_BASE_URL = "https://oss.1024code.com"
36
- $CLACKY_CDN_PRIMARY_HOST = "oss.1024code.com"
38
+ Write-Host "==> Region: $Region"
39
+
40
+ $CLACKY_CDN_BASE_URL = if ($Region -eq "global") { "https://sg.oss.1024code.com" } else { "https://oss.1024code.com" }
41
+ $CLACKY_INSTALL_SCRIPT_BASE_URL = if ($Region -eq "global") { "https://raw.githubusercontent.com" } else { "https://oss.1024code.com" }
42
+ $CLACKY_CDN_PRIMARY_HOST = if ($Region -eq "global") { "sg.oss.1024code.com" } else { "oss.1024code.com" }
43
+
44
+ Write-Host "==> CDN_BASE_URL: $CLACKY_CDN_BASE_URL"
45
+ Write-Host "==> INSTALL_SCRIPT_BASE_URL: $CLACKY_INSTALL_SCRIPT_BASE_URL"
46
+ Write-Host "==> CDN_PRIMARY_HOST: $CLACKY_CDN_PRIMARY_HOST"
47
+
37
48
  $CLACKY_CDN_BACKUP_HOST = "clackyai-1258723534.cos.ap-guangzhou.myqcloud.com"
38
- $INSTALL_PS1_COMMAND = "powershell -c `"irm $CLACKY_CDN_BASE_URL/clacky-ai/openclacky/main/scripts/install.ps1 | iex`""
39
- $INSTALL_SCRIPT_URL = "$CLACKY_CDN_BASE_URL/clacky-ai/openclacky/main/scripts/install.sh"
49
+ $INSTALL_PS1_COMMAND = "powershell -c `"irm $CLACKY_INSTALL_SCRIPT_BASE_URL/clacky-ai/openclacky/main/scripts/install.ps1 | iex`""
50
+ $INSTALL_SCRIPT_URL = "$CLACKY_INSTALL_SCRIPT_BASE_URL/clacky-ai/openclacky/main/scripts/install.sh"
40
51
  $UBUNTU_WSL_AMD64_URL = "$CLACKY_CDN_BASE_URL/ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz"
41
52
  $UBUNTU_WSL_AMD64_SHA256_URL = "$CLACKY_CDN_BASE_URL/ubuntu-jammy-wsl-amd64-ubuntu22.04lts.rootfs.tar.gz.sha256"
42
53
  $UBUNTU_WSL_ARM64_URL = "$CLACKY_CDN_BASE_URL/ubuntu-jammy-wsl-arm64-ubuntu22.04lts.rootfs.tar.gz"
@@ -303,6 +314,9 @@ function Run-InstallInWsl {
303
314
  wsl.exe -d Ubuntu -u root -- bash -c "cd ~ && curl -fsSL $INSTALL_SCRIPT_URL | bash -s -- --brand-name=$BrandName --command=$CommandName"
304
315
  }
305
316
 
317
+ if ($LASTEXITCODE -eq 2) {
318
+ exit 2
319
+ }
306
320
  if ($LASTEXITCODE -ne 0) {
307
321
  Write-Fail "Installation failed inside WSL (exit $LASTEXITCODE)."
308
322
  Write-Fail "You can retry manually:"
data/scripts/install.sh CHANGED
@@ -474,7 +474,12 @@ restore_gemrc() {
474
474
  setup_gem_home() {
475
475
  local gem_dir
476
476
  gem_dir=$(gem environment gemdir 2>/dev/null || true)
477
- [ -w "$gem_dir" ] && return 0
477
+
478
+ # gemdir writable → no workaround needed, clean up old RC entries
479
+ if [ -w "$gem_dir" ]; then
480
+ restore_gem_home
481
+ return 0
482
+ fi
478
483
 
479
484
  local ruby_api
480
485
  ruby_api=$(ruby -e 'puts RbConfig::CONFIG["ruby_version"]' 2>/dev/null)
@@ -483,7 +488,9 @@ setup_gem_home() {
483
488
  export PATH="$HOME/.gem/ruby/${ruby_api}/bin:$PATH"
484
489
  print_info "System Ruby detected — gems will install to ~/.gem/ruby/${ruby_api}"
485
490
 
486
- if [ -n "$SHELL_RC" ] && ! grep -q "GEM_HOME" "$SHELL_RC" 2>/dev/null; then
491
+ # Clean old RC entries (could be from a different Ruby version), then write new ones
492
+ restore_gem_home
493
+ if [ -n "$SHELL_RC" ]; then
487
494
  {
488
495
  echo ""
489
496
  echo "# Ruby user gem dir (added by openclacky installer)"
@@ -559,7 +559,12 @@ restore_gemrc() {
559
559
  setup_gem_home() {
560
560
  local gem_dir
561
561
  gem_dir=$(gem environment gemdir 2>/dev/null || true)
562
- [ -w "$gem_dir" ] && return 0
562
+
563
+ # gemdir writable → no workaround needed, clean up old RC entries
564
+ if [ -w "$gem_dir" ]; then
565
+ restore_gem_home
566
+ return 0
567
+ fi
563
568
 
564
569
  local ruby_api
565
570
  ruby_api=$(ruby -e 'puts RbConfig::CONFIG["ruby_version"]' 2>/dev/null)
@@ -568,7 +573,9 @@ setup_gem_home() {
568
573
  export PATH="$HOME/.gem/ruby/${ruby_api}/bin:$PATH"
569
574
  print_info "System Ruby detected — gems will install to ~/.gem/ruby/${ruby_api}"
570
575
 
571
- if [ -n "$SHELL_RC" ] && ! grep -q "GEM_HOME" "$SHELL_RC" 2>/dev/null; then
576
+ # Clean old RC entries (could be from a different Ruby version), then write new ones
577
+ restore_gem_home
578
+ if [ -n "$SHELL_RC" ]; then
572
579
  {
573
580
  echo ""
574
581
  echo "# Ruby user gem dir (added by openclacky installer)"
@@ -732,6 +739,8 @@ install_via_gem() {
732
739
  local ver; ver=$(ruby -e 'puts RUBY_VERSION' 2>/dev/null)
733
740
  version_ge "$ver" "3.1.0" || { print_error "Ruby $ver too old (>= 3.1.0 required)"; return 1; }
734
741
 
742
+ setup_gem_home
743
+
735
744
  print_info "Installing ${DISPLAY_NAME}..."
736
745
  if gem install openclacky --no-document; then
737
746
  print_success "${DISPLAY_NAME} installed!"
@@ -687,7 +687,12 @@ restore_gemrc() {
687
687
  setup_gem_home() {
688
688
  local gem_dir
689
689
  gem_dir=$(gem environment gemdir 2>/dev/null || true)
690
- [ -w "$gem_dir" ] && return 0
690
+
691
+ # gemdir writable → no workaround needed, clean up old RC entries
692
+ if [ -w "$gem_dir" ]; then
693
+ restore_gem_home
694
+ return 0
695
+ fi
691
696
 
692
697
  local ruby_api
693
698
  ruby_api=$(ruby -e 'puts RbConfig::CONFIG["ruby_version"]' 2>/dev/null)
@@ -696,7 +701,9 @@ setup_gem_home() {
696
701
  export PATH="$HOME/.gem/ruby/${ruby_api}/bin:$PATH"
697
702
  print_info "System Ruby detected — gems will install to ~/.gem/ruby/${ruby_api}"
698
703
 
699
- if [ -n "$SHELL_RC" ] && ! grep -q "GEM_HOME" "$SHELL_RC" 2>/dev/null; then
704
+ # Clean old RC entries (could be from a different Ruby version), then write new ones
705
+ restore_gem_home
706
+ if [ -n "$SHELL_RC" ]; then
700
707
  {
701
708
  echo ""
702
709
  echo "# Ruby user gem dir (added by openclacky installer)"
data/scripts/uninstall.sh CHANGED
@@ -159,7 +159,12 @@ restore_gemrc() {
159
159
  setup_gem_home() {
160
160
  local gem_dir
161
161
  gem_dir=$(gem environment gemdir 2>/dev/null || true)
162
- [ -w "$gem_dir" ] && return 0
162
+
163
+ # gemdir writable → no workaround needed, clean up old RC entries
164
+ if [ -w "$gem_dir" ]; then
165
+ restore_gem_home
166
+ return 0
167
+ fi
163
168
 
164
169
  local ruby_api
165
170
  ruby_api=$(ruby -e 'puts RbConfig::CONFIG["ruby_version"]' 2>/dev/null)
@@ -168,7 +173,9 @@ setup_gem_home() {
168
173
  export PATH="$HOME/.gem/ruby/${ruby_api}/bin:$PATH"
169
174
  print_info "System Ruby detected — gems will install to ~/.gem/ruby/${ruby_api}"
170
175
 
171
- if [ -n "$SHELL_RC" ] && ! grep -q "GEM_HOME" "$SHELL_RC" 2>/dev/null; then
176
+ # Clean old RC entries (could be from a different Ruby version), then write new ones
177
+ restore_gem_home
178
+ if [ -n "$SHELL_RC" ]; then
172
179
  {
173
180
  echo ""
174
181
  echo "# Ruby user gem dir (added by openclacky installer)"
@@ -207,7 +214,7 @@ load_brand() {
207
214
  [ -f "$brand_file" ] || return 0
208
215
  BRAND_NAME=$(awk -F': ' '/^product_name:/{gsub(/^"|"$/, "", $2); gsub(/^ +| +$/, "", $2); print $2}' "$brand_file") || true
209
216
  BRAND_COMMAND=$(awk -F': ' '/^package_name:/{gsub(/^"|"$/, "", $2); gsub(/^ +| +$/, "", $2); print $2}' "$brand_file") || true
210
- [ -n "$BRAND_NAME" ] && DISPLAY_NAME="$BRAND_NAME"
217
+ if [ -n "$BRAND_NAME" ]; then DISPLAY_NAME="$BRAND_NAME"; fi
211
218
  }
212
219
 
213
220
  check_installation() {
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.10
4
+ version: 1.2.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - windy
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-06-03 00:00:00.000000000 Z
11
+ date: 2026-06-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -366,6 +366,7 @@ files:
366
366
  - lib/clacky/default_skills/channel-manager/SKILL.md
367
367
  - lib/clacky/default_skills/channel-manager/dingtalk_setup.rb
368
368
  - lib/clacky/default_skills/channel-manager/discord_setup.rb
369
+ - lib/clacky/default_skills/channel-manager/feishu_setup.rb
369
370
  - lib/clacky/default_skills/channel-manager/import_lark_skills.rb
370
371
  - lib/clacky/default_skills/channel-manager/install_feishu_skills.rb
371
372
  - lib/clacky/default_skills/channel-manager/weixin_setup.rb
@@ -386,6 +387,7 @@ files:
386
387
  - lib/clacky/default_skills/personal-website/publish.rb
387
388
  - lib/clacky/default_skills/product-help/SKILL.md
388
389
  - lib/clacky/default_skills/recall-memory/SKILL.md
390
+ - lib/clacky/default_skills/search-skills/SKILL.md
389
391
  - lib/clacky/default_skills/skill-add/SKILL.md
390
392
  - lib/clacky/default_skills/skill-add/scripts/install_from_zip.rb
391
393
  - lib/clacky/default_skills/skill-creator/SKILL.md
@@ -451,6 +453,7 @@ files:
451
453
  - lib/clacky/server/channel/channel_config.rb
452
454
  - lib/clacky/server/channel/channel_manager.rb
453
455
  - lib/clacky/server/channel/channel_ui_controller.rb
456
+ - lib/clacky/server/channel/group_message_buffer.rb
454
457
  - lib/clacky/server/channel/user_adapter_loader.rb
455
458
  - lib/clacky/server/discover.rb
456
459
  - lib/clacky/server/epipe_safe_io.rb
@@ -531,16 +534,19 @@ files:
531
534
  - lib/clacky/version.rb
532
535
  - lib/clacky/web/app.css
533
536
  - lib/clacky/web/app.js
537
+ - lib/clacky/web/apple-touch-icon-180.png
534
538
  - lib/clacky/web/auth.js
535
539
  - lib/clacky/web/billing.js
536
540
  - lib/clacky/web/brand.js
537
541
  - lib/clacky/web/channels.js
538
542
  - lib/clacky/web/creator.js
539
543
  - lib/clacky/web/datepicker.js
544
+ - lib/clacky/web/favicon.ico
540
545
  - lib/clacky/web/i18n.js
541
546
  - lib/clacky/web/icon-dark.svg
542
547
  - lib/clacky/web/icon.svg
543
548
  - lib/clacky/web/index.html
549
+ - lib/clacky/web/logo_nav_dark.png
544
550
  - lib/clacky/web/marked.min.js
545
551
  - lib/clacky/web/mcp.js
546
552
  - lib/clacky/web/model-tester.js
@@ -553,6 +559,7 @@ files:
553
559
  - lib/clacky/web/tasks.js
554
560
  - lib/clacky/web/theme.js
555
561
  - lib/clacky/web/trash.js
562
+ - lib/clacky/web/utils.js
556
563
  - lib/clacky/web/vendor/hljs/highlight.min.js
557
564
  - lib/clacky/web/vendor/hljs/hljs-theme.css
558
565
  - lib/clacky/web/vendor/katex/auto-render.min.js