openclacky 1.3.6 → 1.3.7

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 (103) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +30 -0
  3. data/lib/clacky/agent.rb +8 -1
  4. data/lib/clacky/agent_profile.rb +121 -53
  5. data/lib/clacky/brand_config.rb +309 -6
  6. data/lib/clacky/cli.rb +4 -57
  7. data/lib/clacky/default_extensions/coding/ext.yml +18 -0
  8. data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/system_prompt.md +95 -0
  9. data/lib/clacky/default_extensions/ext-studio/api/handler.rb +254 -0
  10. data/lib/clacky/default_extensions/ext-studio/ext.yml +32 -0
  11. data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +1269 -0
  12. data/lib/clacky/default_extensions/ext-studio/skills/ext-debug/SKILL.md +71 -0
  13. data/lib/clacky/default_extensions/ext-studio/skills/ext-publish/SKILL.md +74 -0
  14. data/lib/clacky/default_extensions/ext-studio/skills/ext-scaffold/SKILL.md +65 -0
  15. data/lib/clacky/default_extensions/general/ext.yml +18 -0
  16. data/lib/clacky/default_extensions/git/ext.yml +12 -0
  17. data/lib/clacky/{default_agents/_panels/git/panel.js → default_extensions/git/panels/git/view.js} +1 -2
  18. data/lib/clacky/default_extensions/meeting/{handler.rb → api/handler.rb} +78 -26
  19. data/lib/clacky/default_extensions/meeting/ext.yml +15 -0
  20. data/lib/clacky/default_extensions/meeting/{meeting.js → panels/meeting/view.js} +266 -89
  21. data/lib/clacky/default_extensions/meeting/skills/meeting-summarizer/SKILL.md +2 -1
  22. data/lib/clacky/default_extensions/time_machine/ext.yml +12 -0
  23. data/lib/clacky/{default_agents/_panels/time_machine/panel.js → default_extensions/time_machine/panels/time_machine/view.js} +58 -47
  24. data/lib/clacky/default_skills/channel-manager/discord_setup.rb +1 -1
  25. data/lib/clacky/default_skills/extend-openclacky/SKILL.md +83 -18
  26. data/lib/clacky/{api_extension.rb → extension/api_extension.rb} +27 -11
  27. data/lib/clacky/extension/api_loader.rb +136 -0
  28. data/lib/clacky/extension/cli_commands.rb +226 -0
  29. data/lib/clacky/{server/api_extension_dispatcher.rb → extension/dispatcher.rb} +22 -9
  30. data/lib/clacky/extension/hook_loader.rb +77 -0
  31. data/lib/clacky/extension/loader.rb +483 -0
  32. data/lib/clacky/extension/packager.rb +226 -0
  33. data/lib/clacky/{patch_loader.rb → extension/patch_loader.rb} +45 -0
  34. data/lib/clacky/extension/scaffold/template_renderer.rb +64 -0
  35. data/lib/clacky/extension/scaffold/templates/full/README.md.erb +48 -0
  36. data/lib/clacky/extension/scaffold/templates/full/agents/designer.md +5 -0
  37. data/lib/clacky/extension/scaffold/templates/full/api/handler.rb.erb +16 -0
  38. data/lib/clacky/extension/scaffold/templates/full/channels/noop.rb.erb +40 -0
  39. data/lib/clacky/extension/scaffold/templates/full/ext.yml.erb +41 -0
  40. data/lib/clacky/extension/scaffold/templates/full/hooks/audit.rb +9 -0
  41. data/lib/clacky/extension/scaffold/templates/full/panels/dashboard/view.js.erb +194 -0
  42. data/lib/clacky/extension/scaffold/templates/full/patches/audit.rb +15 -0
  43. data/lib/clacky/extension/scaffold/templates/full/skills/__slug__-skill/SKILL.md.erb +8 -0
  44. data/lib/clacky/extension/scaffold/templates/hello/api/handler.rb.erb +9 -0
  45. data/lib/clacky/extension/scaffold/templates/hello/ext.yml.erb +12 -0
  46. data/lib/clacky/extension/scaffold/templates/hello/panels/hello/view.js.erb +31 -0
  47. data/lib/clacky/extension/scaffold.rb +55 -0
  48. data/lib/clacky/extension/verifier.rb +196 -0
  49. data/lib/clacky/identity.rb +70 -0
  50. data/lib/clacky/locales/en.rb +19 -1
  51. data/lib/clacky/locales/zh.rb +19 -1
  52. data/lib/clacky/platform_http_client.rb +18 -15
  53. data/lib/clacky/server/channel/extension_adapter_loader.rb +32 -0
  54. data/lib/clacky/server/channel.rb +6 -0
  55. data/lib/clacky/server/http_server.rb +313 -144
  56. data/lib/clacky/server/session_registry.rb +9 -2
  57. data/lib/clacky/skill_loader.rb +28 -1
  58. data/lib/clacky/ui2/ui_controller.rb +9 -6
  59. data/lib/clacky/version.rb +1 -1
  60. data/lib/clacky/web/app.css +748 -573
  61. data/lib/clacky/web/app.js +63 -15
  62. data/lib/clacky/web/auth.js +2 -0
  63. data/lib/clacky/web/components/notify.js +2 -0
  64. data/lib/clacky/web/components/sidebar.js +1 -5
  65. data/lib/clacky/web/core/ext.js +316 -79
  66. data/lib/clacky/web/features/backup/store.js +1 -0
  67. data/lib/clacky/web/features/backup/view.js +0 -1
  68. data/lib/clacky/web/features/brand/view.js +13 -5
  69. data/lib/clacky/web/features/extensions/store.js +184 -0
  70. data/lib/clacky/web/features/extensions/view.js +389 -0
  71. data/lib/clacky/web/features/new-session/store.js +186 -0
  72. data/lib/clacky/web/features/new-session/view.js +319 -0
  73. data/lib/clacky/web/features/share/view.js +63 -14
  74. data/lib/clacky/web/features/skills/store.js +3 -1
  75. data/lib/clacky/web/features/skills/view.js +1 -1
  76. data/lib/clacky/web/features/tasks/view.js +12 -0
  77. data/lib/clacky/web/features/trash/store.js +24 -6
  78. data/lib/clacky/web/features/trash/view.js +46 -9
  79. data/lib/clacky/web/features/workspace/store.js +2 -0
  80. data/lib/clacky/web/features/workspace/view.js +0 -1
  81. data/lib/clacky/web/i18n.js +118 -106
  82. data/lib/clacky/web/index.html +138 -188
  83. data/lib/clacky/web/sessions.js +64 -269
  84. data/lib/clacky/web/settings.js +1 -1
  85. data/lib/clacky/web/skills.js +2 -0
  86. data/lib/clacky/web/theme.js +2 -0
  87. data/lib/clacky/web/ws-dispatcher.js +1 -0
  88. data/lib/clacky/web/ws.js +2 -0
  89. data/lib/clacky.rb +21 -10
  90. metadata +55 -24
  91. data/benchmark/runner.rb +0 -441
  92. data/lib/clacky/api_extension_loader.rb +0 -168
  93. data/lib/clacky/default_agents/SOUL.md +0 -3
  94. data/lib/clacky/default_agents/USER.md +0 -1
  95. data/lib/clacky/default_agents/coding/profile.yml +0 -5
  96. data/lib/clacky/default_agents/coding/webui/.gitkeep +0 -0
  97. data/lib/clacky/default_agents/general/profile.yml +0 -2
  98. data/lib/clacky/default_extensions/meeting/meta.yml +0 -3
  99. data/lib/clacky/web/features/creator/store.js +0 -81
  100. data/lib/clacky/web/features/creator/view.js +0 -380
  101. /data/lib/clacky/{default_agents → default_extensions/coding/agents}/coding/system_prompt.md +0 -0
  102. /data/lib/clacky/{default_agents → default_extensions/general/agents}/general/system_prompt.md +0 -0
  103. /data/lib/clacky/{default_agents/base_prompt.md → prompts/base.md} +0 -0
@@ -4,6 +4,7 @@ require "net/http"
4
4
  require "uri"
5
5
  require "json"
6
6
  require "fileutils"
7
+ require_relative "locales/i18n"
7
8
 
8
9
  module Clacky
9
10
  # PlatformHttpClient provides a resilient HTTP client for all calls to the
@@ -41,18 +42,14 @@ module Clacky
41
42
  DOWNLOAD_MAX_REDIRECTS = 10
42
43
 
43
44
  # API error code → human-readable message table (shared across all callers)
44
- API_ERROR_MESSAGES = {
45
- "invalid_proof" => "Invalid license key please check and try again.",
46
- "invalid_signature" => "Invalid request signature.",
47
- "nonce_replayed" => "Duplicate request detected. Please try again.",
48
- "timestamp_expired" => "System clock is out of sync. Please adjust your time settings.",
49
- "license_revoked" => "This license has been revoked. Please contact support.",
50
- "license_expired" => "This license has expired. Please renew to continue.",
51
- "device_limit_reached" => "Device limit reached for this license.",
52
- "device_revoked" => "This device has been revoked from the license.",
53
- "invalid_license" => "License key not found. Please verify the key.",
54
- "device_not_found" => "Device not registered. Please re-activate."
55
- }.freeze
45
+ # Server error codes that have a localized message under the
46
+ # "platform.error.<code>" i18n key (see locales/en.rb & zh.rb).
47
+ KNOWN_ERROR_CODES = %w[
48
+ invalid_proof invalid_signature nonce_replayed timestamp_expired
49
+ license_revoked license_expired device_limit_reached device_revoked
50
+ invalid_license device_not_found contributor_required missing_device_token
51
+ invalid_device_token device_token_revoked device_token_expired owner_user_not_found
52
+ ].freeze
56
53
 
57
54
  # Auto-detects the target host(s):
58
55
  # - When CLACKY_LICENSE_SERVER is set → single host (dev override, no failover)
@@ -360,9 +357,15 @@ module Clacky
360
357
  else
361
358
  error_code = body["code"]
362
359
  server_msg = extract_server_error_message(body)
363
- error_msg = API_ERROR_MESSAGES[error_code] ||
364
- server_msg ||
365
- "Request failed (HTTP #{code}#{error_code ? ", code: #{error_code}" : ""}). Please contact support."
360
+ error_msg = if KNOWN_ERROR_CODES.include?(error_code)
361
+ Clacky::I18n.t("platform.error.#{error_code}")
362
+ elsif server_msg
363
+ server_msg
364
+ elsif error_code
365
+ Clacky::I18n.t("platform.error.generic_with_code", code: code, error_code: error_code)
366
+ else
367
+ Clacky::I18n.t("platform.error.generic", code: code)
368
+ end
366
369
  { success: false, error: error_msg, data: body }
367
370
  end
368
371
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "user_adapter_loader"
4
+
5
+ module Clacky
6
+ module Channel
7
+ module Adapters
8
+ # Loads channel adapters contributed by ext.yml containers via
9
+ # `contributes.channels: [{ id, adapter }]`. Reuses
10
+ # UserAdapterLoader.load_one so the require / register / interface check
11
+ # / error isolation contract stays identical.
12
+ module ExtensionAdapterLoader
13
+ Result = UserAdapterLoader::Result
14
+
15
+ def self.load_all
16
+ result = Result.new(loaded: [], skipped: [])
17
+ units = Array(Clacky::ExtensionLoader.last_result&.channels)
18
+ units.each do |unit|
19
+ name = "#{unit.ext_id}/#{unit.id}"
20
+ UserAdapterLoader.load_one(unit.spec["adapter_abs"], name, result)
21
+ end
22
+ @last_result = result
23
+ result
24
+ end
25
+
26
+ def self.last_result
27
+ @last_result || load_all
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -36,3 +36,9 @@ require_relative "channel/channel_manager"
36
36
  # Must run after the bundled adapters so user adapters can extend or override.
37
37
  require_relative "channel/user_adapter_loader"
38
38
  Clacky::Channel::Adapters::UserAdapterLoader.load_all
39
+
40
+ # Discover and load adapters contributed by ext.yml containers
41
+ # (contributes.channels). Runs last so any platform_id collision is won by
42
+ # user adapters, which is consistent with the override priority elsewhere.
43
+ require_relative "channel/extension_adapter_loader"
44
+ Clacky::Channel::Adapters::ExtensionAdapterLoader.load_all