openclacky 1.2.10 → 1.2.12

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 (45) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +33 -1
  3. data/lib/clacky/agent/session_serializer.rb +1 -1
  4. data/lib/clacky/agent/tool_registry.rb +10 -0
  5. data/lib/clacky/agent.rb +59 -22
  6. data/lib/clacky/anthropic_stream_aggregator.rb +17 -1
  7. data/lib/clacky/bedrock_stream_aggregator.rb +17 -1
  8. data/lib/clacky/client.rb +25 -3
  9. data/lib/clacky/default_skills/channel-manager/SKILL.md +47 -42
  10. data/lib/clacky/default_skills/channel-manager/feishu_setup.rb +134 -0
  11. data/lib/clacky/default_skills/media-gen/SKILL.md +5 -0
  12. data/lib/clacky/message_history.rb +57 -0
  13. data/lib/clacky/openai_stream_aggregator.rb +26 -2
  14. data/lib/clacky/server/channel/adapters/dingtalk/adapter.rb +10 -1
  15. data/lib/clacky/server/channel/adapters/discord/adapter.rb +8 -2
  16. data/lib/clacky/server/channel/adapters/feishu/adapter.rb +10 -1
  17. data/lib/clacky/server/channel/adapters/feishu/bot.rb +12 -0
  18. data/lib/clacky/server/channel/adapters/feishu/message_parser.rb +23 -3
  19. data/lib/clacky/server/channel/adapters/telegram/adapter.rb +12 -2
  20. data/lib/clacky/server/channel/adapters/wecom/adapter.rb +5 -1
  21. data/lib/clacky/server/channel/channel_manager.rb +65 -4
  22. data/lib/clacky/server/channel/group_message_buffer.rb +53 -0
  23. data/lib/clacky/server/http_server.rb +73 -7
  24. data/lib/clacky/server/session_registry.rb +4 -6
  25. data/lib/clacky/tools/trash_manager.rb +1 -1
  26. data/lib/clacky/version.rb +1 -1
  27. data/lib/clacky/web/app.css +21 -3
  28. data/lib/clacky/web/apple-touch-icon-180.png +0 -0
  29. data/lib/clacky/web/brand.js +22 -2
  30. data/lib/clacky/web/favicon.ico +0 -0
  31. data/lib/clacky/web/i18n.js +4 -0
  32. data/lib/clacky/web/index.html +4 -3
  33. data/lib/clacky/web/logo_nav_dark.png +0 -0
  34. data/lib/clacky/web/model-tester.js +8 -1
  35. data/lib/clacky/web/sessions.js +169 -41
  36. data/lib/clacky/web/theme.js +1 -0
  37. data/scripts/build/lib/gem.sh +9 -2
  38. data/scripts/build/src/install_full.sh.cc +2 -0
  39. data/scripts/build/src/uninstall.sh.cc +1 -1
  40. data/scripts/install.ps1 +19 -5
  41. data/scripts/install.sh +9 -2
  42. data/scripts/install_full.sh +11 -2
  43. data/scripts/install_rails_deps.sh +9 -2
  44. data/scripts/uninstall.sh +10 -3
  45. metadata +7 -2
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.12
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-05 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
@@ -451,6 +452,7 @@ files:
451
452
  - lib/clacky/server/channel/channel_config.rb
452
453
  - lib/clacky/server/channel/channel_manager.rb
453
454
  - lib/clacky/server/channel/channel_ui_controller.rb
455
+ - lib/clacky/server/channel/group_message_buffer.rb
454
456
  - lib/clacky/server/channel/user_adapter_loader.rb
455
457
  - lib/clacky/server/discover.rb
456
458
  - lib/clacky/server/epipe_safe_io.rb
@@ -531,16 +533,19 @@ files:
531
533
  - lib/clacky/version.rb
532
534
  - lib/clacky/web/app.css
533
535
  - lib/clacky/web/app.js
536
+ - lib/clacky/web/apple-touch-icon-180.png
534
537
  - lib/clacky/web/auth.js
535
538
  - lib/clacky/web/billing.js
536
539
  - lib/clacky/web/brand.js
537
540
  - lib/clacky/web/channels.js
538
541
  - lib/clacky/web/creator.js
539
542
  - lib/clacky/web/datepicker.js
543
+ - lib/clacky/web/favicon.ico
540
544
  - lib/clacky/web/i18n.js
541
545
  - lib/clacky/web/icon-dark.svg
542
546
  - lib/clacky/web/icon.svg
543
547
  - lib/clacky/web/index.html
548
+ - lib/clacky/web/logo_nav_dark.png
544
549
  - lib/clacky/web/marked.min.js
545
550
  - lib/clacky/web/mcp.js
546
551
  - lib/clacky/web/model-tester.js