openclacky 1.3.3 → 1.3.5

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 (89) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +53 -0
  3. data/docs/rich_ui_guide.md +277 -0
  4. data/docs/rich_ui_refactor_plan.md +396 -0
  5. data/lib/clacky/agent/fake_tool_call_detector.rb +52 -0
  6. data/lib/clacky/agent/llm_caller.rb +10 -4
  7. data/lib/clacky/agent/session_serializer.rb +5 -3
  8. data/lib/clacky/agent/tool_executor.rb +0 -12
  9. data/lib/clacky/agent.rb +77 -11
  10. data/lib/clacky/agent_config.rb +2 -14
  11. data/lib/clacky/api_extension.rb +343 -0
  12. data/lib/clacky/api_extension_loader.rb +168 -0
  13. data/lib/clacky/cli.rb +93 -3
  14. data/lib/clacky/client.rb +47 -25
  15. data/lib/clacky/default_agents/_panels/git/panel.js +1 -1
  16. data/lib/clacky/default_agents/_panels/time_machine/panel.js +23 -1
  17. data/lib/clacky/default_agents/base_prompt.md +1 -0
  18. data/lib/clacky/default_extensions/meeting/handler.rb +331 -0
  19. data/lib/clacky/default_extensions/meeting/meeting.js +790 -0
  20. data/lib/clacky/default_extensions/meeting/meta.yml +3 -0
  21. data/lib/clacky/default_extensions/meeting/skills/meeting-summarizer/SKILL.md +44 -0
  22. data/lib/clacky/default_skills/media-gen/SKILL.md +72 -6
  23. data/lib/clacky/default_skills/media-gen/scripts/video_seq.sh +114 -0
  24. data/lib/clacky/idle_compression_timer.rb +3 -1
  25. data/lib/clacky/json_ui_controller.rb +1 -1
  26. data/lib/clacky/locales/en.rb +26 -0
  27. data/lib/clacky/locales/i18n.rb +26 -0
  28. data/lib/clacky/locales/zh.rb +26 -0
  29. data/lib/clacky/media/base.rb +60 -0
  30. data/lib/clacky/media/dashscope.rb +385 -21
  31. data/lib/clacky/media/gemini.rb +9 -0
  32. data/lib/clacky/media/generator.rb +52 -0
  33. data/lib/clacky/media/openai_compat.rb +166 -0
  34. data/lib/clacky/null_ui_controller.rb +13 -0
  35. data/lib/clacky/plain_ui_controller.rb +1 -1
  36. data/lib/clacky/providers.rb +50 -2
  37. data/lib/clacky/rich_ui/components/base_component.rb +50 -0
  38. data/lib/clacky/rich_ui/components/dialogs/approval_dialog.rb +142 -0
  39. data/lib/clacky/rich_ui/components/dialogs/config_menu_dialog.rb +106 -0
  40. data/lib/clacky/rich_ui/components/dialogs/form_dialog.rb +128 -0
  41. data/lib/clacky/rich_ui/components/sidebar.rb +119 -0
  42. data/lib/clacky/rich_ui/components/sidebar_panels.rb +134 -0
  43. data/lib/clacky/rich_ui/components/status_view.rb +58 -0
  44. data/lib/clacky/rich_ui/components/thinking_live_view.rb +79 -0
  45. data/lib/clacky/rich_ui/entry_tracker.rb +56 -0
  46. data/lib/clacky/rich_ui/layout_adapter.rb +16 -0
  47. data/lib/clacky/rich_ui/progress_handle_adapter.rb +24 -0
  48. data/lib/clacky/rich_ui/rich_ui_controller.rb +868 -0
  49. data/lib/clacky/rich_ui/shell/rich_agent_shell.rb +184 -0
  50. data/lib/clacky/rich_ui/view_renderer.rb +291 -0
  51. data/lib/clacky/rich_ui.rb +57 -0
  52. data/lib/clacky/rich_ui_controller.rb +3 -1549
  53. data/lib/clacky/server/api_extension_dispatcher.rb +120 -0
  54. data/lib/clacky/server/channel/channel_ui_controller.rb +1 -1
  55. data/lib/clacky/server/http_server.rb +291 -109
  56. data/lib/clacky/server/session_registry.rb +5 -3
  57. data/lib/clacky/server/web_ui_controller.rb +3 -2
  58. data/lib/clacky/shell_hook_loader.rb +1 -1
  59. data/lib/clacky/skill_loader.rb +14 -2
  60. data/lib/clacky/tools/edit.rb +14 -2
  61. data/lib/clacky/tools/terminal/output_cleaner.rb +1 -3
  62. data/lib/clacky/tools/terminal.rb +0 -43
  63. data/lib/clacky/ui2/components/modal_component.rb +1 -1
  64. data/lib/clacky/ui2/ui_controller.rb +147 -31
  65. data/lib/clacky/ui_interface.rb +10 -1
  66. data/lib/clacky/utils/encoding.rb +25 -0
  67. data/lib/clacky/version.rb +1 -1
  68. data/lib/clacky/web/app.css +201 -81
  69. data/lib/clacky/web/app.js +65 -7
  70. data/lib/clacky/web/components/onboard.js +19 -16
  71. data/lib/clacky/web/core/aside.js +8 -3
  72. data/lib/clacky/web/core/ext.js +1 -1
  73. data/lib/clacky/web/features/brand/view.js +8 -5
  74. data/lib/clacky/web/features/channels/store.js +1 -20
  75. data/lib/clacky/web/features/mcp/store.js +1 -20
  76. data/lib/clacky/web/features/profile/store.js +1 -13
  77. data/lib/clacky/web/features/profile/view.js +16 -4
  78. data/lib/clacky/web/features/skills/store.js +36 -23
  79. data/lib/clacky/web/features/skills/view.js +32 -1
  80. data/lib/clacky/web/features/version/store.js +2 -0
  81. data/lib/clacky/web/features/workspace/view.js +1 -1
  82. data/lib/clacky/web/i18n.js +48 -13
  83. data/lib/clacky/web/index.html +24 -17
  84. data/lib/clacky/web/sessions.js +427 -79
  85. data/lib/clacky/web/settings.js +143 -113
  86. data/lib/clacky/web/ws-dispatcher.js +18 -6
  87. data/lib/clacky.rb +27 -5
  88. metadata +45 -2
  89. data/lib/clacky/media/output_dir.rb +0 -43
@@ -835,19 +835,6 @@
835
835
  Optional. Image / video / audio / vision models.
836
836
  </div>
837
837
  <div id="media-rows"></div>
838
-
839
- <!-- Output directory: scoped under media section -->
840
- <div class="settings-subsection" id="media-output-dir-section">
841
- <p class="settings-subsection-desc" data-i18n="settings.media.output_dir.desc">Where generated images, videos and audio are saved (optional)</p>
842
- <div class="settings-network-url">
843
- <div class="settings-network-url-row">
844
- <input type="text" id="settings-media-output-dir" class="field-input" placeholder="" autocomplete="off" spellcheck="false" readonly>
845
- <button type="button" id="btn-browse-media-output-dir" class="btn-settings-action" data-i18n="settings.media.output_dir.browse">Browse…</button>
846
- <button type="button" id="btn-clear-media-output-dir" class="btn-settings-action" data-i18n="settings.media.output_dir.clear">Clear</button>
847
- </div>
848
- <div id="settings-media-output-dir-status" class="model-test-result"></div>
849
- </div>
850
- </div>
851
838
  </section>
852
839
  </div>
853
840
 
@@ -903,6 +890,21 @@
903
890
  </label>
904
891
  </div>
905
892
  </section>
893
+
894
+ <!-- Accent Color section -->
895
+ <section class="settings-section" id="accent-color-section">
896
+ <div class="settings-section-title">
897
+ <span data-i18n="settings.accentColor.title">Accent Color</span>
898
+ </div>
899
+ <div class="settings-accent-swatches">
900
+ <button class="settings-accent-swatch swatch-indigo" data-color="#4f46e5" title="Indigo"></button>
901
+ <button class="settings-accent-swatch swatch-aurora-blue" data-color="#3B82F6" title="Aurora Blue"></button>
902
+ <button class="settings-accent-swatch swatch-forest-green" data-color="#10B981" title="Forest Green"></button>
903
+ <button class="settings-accent-swatch swatch-sunrise-orange" data-color="#F59E0B" title="Sunrise Orange"></button>
904
+ <button class="settings-accent-swatch swatch-rose-violet" data-color="#8B5CF6" title="Rose Violet"></button>
905
+ <button class="settings-accent-swatch swatch-coral-red" data-color="#EF4444" title="Coral Red"></button>
906
+ </div>
907
+ </section>
906
908
  </div>
907
909
 
908
910
  <!-- ══ Tab: General ══ -->
@@ -1126,6 +1128,7 @@
1126
1128
  </div>
1127
1129
  <div class="modal-body">
1128
1130
  <input type="hidden" id="model-modal-index" value="-1">
1131
+ <input type="hidden" id="model-modal-source-id" value="">
1129
1132
 
1130
1133
  <label class="model-field" id="model-modal-provider-field">
1131
1134
  <span class="field-label" data-i18n="settings.models.field.provider">Provider</span>
@@ -1292,9 +1295,9 @@
1292
1295
  </div>
1293
1296
 
1294
1297
  <!-- Secondary path: manual key entry, collapsed by default -->
1295
- <details id="setup-manual-details">
1296
- <summary id="setup-manual-summary" data-i18n="onboard.manual.toggle">Configure manually with your own API key</summary>
1298
+ <button id="setup-manual-toggle" class="setup-manual-toggle-btn" data-i18n="onboard.manual.toggle">Configure manually with your own API key</button>
1297
1299
 
1300
+ <div id="setup-manual-section" style="display:none">
1298
1301
  <div class="setup-field">
1299
1302
  <label class="setup-label" data-i18n="onboard.key.provider">Provider</label>
1300
1303
  <div class="custom-select-wrapper" id="setup-provider-wrapper">
@@ -1348,7 +1351,7 @@
1348
1351
  </div>
1349
1352
  </div>
1350
1353
 
1351
- <div class="setup-docs-hint" style="font-size:0.75rem;margin-top:2px;text-align:left;">
1354
+ <div class="setup-docs-hint" style="font-size:0.75rem;margin-top:8px;margin-bottom:10px;text-align:left;">
1352
1355
  <span style="color:var(--muted,#6b7280);" data-i18n="onboard.key.docsGuide.question">New to AI keys?</span>
1353
1356
  <a id="setup-docs-link" href="https://www.openclacky.com/docs/ai-key-guide" target="_blank" rel="noopener" style="margin-left:0.25rem;color:var(--accent,#6366f1);text-decoration:none;" data-i18n="onboard.key.docsGuide.cta">See the guide →</a>
1354
1357
  </div>
@@ -1359,7 +1362,7 @@
1359
1362
  <button id="setup-btn-back" class="setup-back-btn" data-i18n="onboard.key.btn.back">← Back</button>
1360
1363
  <button id="setup-btn-test" class="setup-submit-btn" data-i18n="onboard.key.btn.test">Test & Continue →</button>
1361
1364
  </div>
1362
- </details>
1365
+ </div>
1363
1366
  </div>
1364
1367
 
1365
1368
  </div>
@@ -1424,6 +1427,10 @@
1424
1427
  <div id="modal-overlay" class="modal-overlay" style="display:none">
1425
1428
  <div class="modal-box sm">
1426
1429
  <div id="modal-message" class="modal-confirm-message"></div>
1430
+ <label id="modal-skip-label" style="display:none;align-items:center;gap:.5rem;font-size:.82rem;margin-bottom:.5rem;cursor:pointer">
1431
+ <input type="checkbox" id="modal-skip-cb">
1432
+ <span id="modal-skip-text"></span>
1433
+ </label>
1427
1434
  <div class="modal-actions">
1428
1435
  <button id="modal-no" class="btn-secondary" data-i18n="modal.no">No</button>
1429
1436
  <button id="modal-yes" class="btn-primary" data-i18n="modal.yes">Yes</button>