openclacky 1.5.11 → 1.5.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 (82) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +82 -0
  3. data/lib/clacky/access_key.rb +59 -0
  4. data/lib/clacky/agent/cost_tracker.rb +2 -0
  5. data/lib/clacky/agent/message_compressor_helper.rb +53 -2
  6. data/lib/clacky/agent/session_serializer.rb +72 -19
  7. data/lib/clacky/agent/time_machine.rb +10 -1
  8. data/lib/clacky/agent.rb +107 -26
  9. data/lib/clacky/agent_config.rb +40 -0
  10. data/lib/clacky/agent_profile.rb +5 -5
  11. data/lib/clacky/billing/billing_record.rb +3 -0
  12. data/lib/clacky/billing/billing_store.rb +31 -5
  13. data/lib/clacky/billing/platform_billing.rb +231 -0
  14. data/lib/clacky/brand_config.rb +4 -3
  15. data/lib/clacky/cancel_flag.rb +23 -0
  16. data/lib/clacky/cli.rb +4 -2
  17. data/lib/clacky/client.rb +107 -0
  18. data/lib/clacky/default_extensions/advisor/advisors/general.md +23 -17
  19. data/lib/clacky/default_extensions/advisor/hooks/advisor.rb +104 -5
  20. data/lib/clacky/default_extensions/advisor/panels/advisor/view.js +92 -75
  21. data/lib/clacky/default_extensions/ext-studio/api/handler.rb +31 -0
  22. data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +74 -24
  23. data/lib/clacky/default_extensions/ext-studio/skills/ext-develop/SKILL.md +16 -37
  24. data/lib/clacky/default_extensions/git/ext.yml +1 -1
  25. data/lib/clacky/default_extensions/git/panels/git/view.js +483 -67
  26. data/lib/clacky/default_extensions/meeting/ext.yml +2 -1
  27. data/lib/clacky/default_extensions/time_machine/ext.yml +1 -1
  28. data/lib/clacky/default_extensions/time_machine/panels/time_machine/view.js +186 -208
  29. data/lib/clacky/extension/packager.rb +4 -2
  30. data/lib/clacky/extension/scaffold/templates/full/panels/dashboard/view.js.erb +2 -3
  31. data/lib/clacky/extension/verifier.rb +14 -1
  32. data/lib/clacky/fanout.rb +49 -2
  33. data/lib/clacky/json_ui_controller.rb +3 -2
  34. data/lib/clacky/message_format/open_ai.rb +5 -1
  35. data/lib/clacky/message_format/open_ai_responses.rb +409 -0
  36. data/lib/clacky/message_history.rb +43 -1
  37. data/lib/clacky/openai_responses_stream_aggregator.rb +294 -0
  38. data/lib/clacky/plain_ui_controller.rb +15 -5
  39. data/lib/clacky/providers.rb +24 -7
  40. data/lib/clacky/rich_ui/rich_ui_controller.rb +2 -2
  41. data/lib/clacky/server/channel/channel_manager.rb +93 -18
  42. data/lib/clacky/server/channel/channel_ui_controller.rb +16 -3
  43. data/lib/clacky/server/dir_picker.rb +154 -0
  44. data/lib/clacky/server/git_panel.rb +61 -9
  45. data/lib/clacky/server/http_server.rb +366 -42
  46. data/lib/clacky/server/web_ui_controller.rb +7 -5
  47. data/lib/clacky/session_manager.rb +74 -17
  48. data/lib/clacky/tools/ask_user.rb +3 -2
  49. data/lib/clacky/tools/terminal.rb +30 -3
  50. data/lib/clacky/ui2/markdown_renderer.rb +15 -12
  51. data/lib/clacky/ui2/strings_cjk_patch.rb +132 -0
  52. data/lib/clacky/ui2/themes/hacker_theme.rb +1 -1
  53. data/lib/clacky/ui2/themes/minimal_theme.rb +1 -1
  54. data/lib/clacky/ui2/ui_controller.rb +2 -2
  55. data/lib/clacky/ui_interface.rb +2 -2
  56. data/lib/clacky/utils/model_pricing.rb +92 -4
  57. data/lib/clacky/version.rb +1 -1
  58. data/lib/clacky/web/app.css +915 -142
  59. data/lib/clacky/web/components/code-editor.js +33 -1
  60. data/lib/clacky/web/components/composer.js +315 -0
  61. data/lib/clacky/web/components/custom-select.js +136 -0
  62. data/lib/clacky/web/components/mentions.js +655 -0
  63. data/lib/clacky/web/components/model-picker.js +527 -0
  64. data/lib/clacky/web/components/onboard.js +29 -55
  65. data/lib/clacky/web/core/aside.js +3 -3
  66. data/lib/clacky/web/core/ext.js +38 -0
  67. data/lib/clacky/web/features/billing/store.js +2 -6
  68. data/lib/clacky/web/features/billing/view.js +32 -16
  69. data/lib/clacky/web/features/extensions/view.js +22 -10
  70. data/lib/clacky/web/features/new-session/store.js +15 -1
  71. data/lib/clacky/web/features/new-session/view.js +80 -34
  72. data/lib/clacky/web/features/trash/view.js +31 -19
  73. data/lib/clacky/web/features/workspace/store.js +1 -0
  74. data/lib/clacky/web/features/workspace/view.js +766 -80
  75. data/lib/clacky/web/i18n.js +107 -17
  76. data/lib/clacky/web/index.html +125 -45
  77. data/lib/clacky/web/sessions.js +704 -635
  78. data/lib/clacky/web/settings.js +164 -190
  79. data/lib/clacky/web/skills.js +11 -17
  80. data/lib/clacky/web/ws-dispatcher.js +11 -33
  81. data/lib/clacky.rb +4 -0
  82. metadata +12 -1
@@ -79,37 +79,14 @@
79
79
  return map[kind] || "🧬";
80
80
  }
81
81
 
82
- // A phase is spawned by a tool call, so its card belongs inside that tool's
83
- // row — otherwise a fan-out of N subagents drops N sibling cards into the
84
- // main stream and buries the conversation. Falls back to the outer stream
85
- // for phases with no tool behind them (e.g. memory_update).
86
- //
87
- // The anchor is resolved from the DOM rather than Sessions._liveLastToolItem:
88
- // a subagent's own tool calls overwrite that pointer, which would nest the
89
- // second fan-out card inside the first job instead of beside it.
82
+ // Phase cards sit at the top level of the message stream, right after the
83
+ // tool call that spawned them (phase_start arrives just after that tool_call
84
+ // event, so DOM order is naturally "tool call, then its subagent cards").
85
+ // Nesting them inside the tool's row buried a level deep and collided with
86
+ // the single live tool-group pointer, so a fan-out of N subagents is now N
87
+ // sibling foldable cards in the outer stream instead.
90
88
  function _phaseHost() {
91
- const messages = RenderTarget.outer();
92
- if (!messages) return null;
93
-
94
- let item = null;
95
- const running = messages.querySelectorAll(".tool-item-status.running");
96
- for (let i = running.length - 1; i >= 0; i--) {
97
- const candidate = running[i].closest(".tool-item");
98
- if (candidate && !candidate.parentElement.closest(".msg-phase-body")) {
99
- item = candidate;
100
- break;
101
- }
102
- }
103
- if (!item) return messages;
104
-
105
- let nest = item.querySelector(":scope > .tool-item-phases");
106
- if (!nest) {
107
- nest = document.createElement("div");
108
- nest.className = "tool-item-phases";
109
- const stdout = item.querySelector(":scope > .tool-item-stdout");
110
- item.insertBefore(nest, stdout || null);
111
- }
112
- return nest;
89
+ return RenderTarget.outer();
113
90
  }
114
91
 
115
92
  function _beginPhase(ev) {
@@ -336,15 +313,16 @@ function _dispatchEvent(ev) {
336
313
  // send it now — after restoreFromHash has settled — so appendMsg won't be wiped.
337
314
  const pendingMsg = Sessions.takePendingMessage();
338
315
  if (pendingMsg && pendingMsg.session_id === ev.session_id) {
339
- const html = pendingMsg.files && pendingMsg.files.length
340
- ? (pendingMsg.display || SkillAC.renderUserMessageHtml(pendingMsg.content))
341
- : SkillAC.renderUserMessageHtml(pendingMsg.display || pendingMsg.content);
316
+ const html = pendingMsg.display
317
+ ? pendingMsg.display
318
+ : SkillAC.renderUserMessageHtml(pendingMsg.content);
342
319
  Sessions.appendMsg("user", html, { time: new Date() });
343
320
  WS.send({
344
321
  type: "message",
345
322
  session_id: pendingMsg.session_id,
346
323
  content: pendingMsg.content,
347
324
  files: pendingMsg.files || undefined,
325
+ references: pendingMsg.references || undefined,
348
326
  lang: I18n.lang(),
349
327
  });
350
328
  }
data/lib/clacky.rb CHANGED
@@ -64,9 +64,11 @@ end
64
64
  require_relative "clacky/version"
65
65
  require_relative "clacky/message_format/anthropic"
66
66
  require_relative "clacky/message_format/open_ai"
67
+ require_relative "clacky/message_format/open_ai_responses"
67
68
  require_relative "clacky/message_format/bedrock"
68
69
  require_relative "clacky/bedrock_stream_aggregator"
69
70
  require_relative "clacky/openai_stream_aggregator"
71
+ require_relative "clacky/openai_responses_stream_aggregator"
70
72
  require_relative "clacky/anthropic_stream_aggregator"
71
73
  require_relative "clacky/locales/i18n"
72
74
  require_relative "clacky/client"
@@ -86,6 +88,7 @@ require_relative "clacky/agent/message_compressor"
86
88
  require_relative "clacky/agent/hook_manager"
87
89
  require_relative "clacky/shell_hook_loader"
88
90
  require_relative "clacky/agent/tool_registry"
91
+ require_relative "clacky/cancel_flag"
89
92
  require_relative "clacky/fanout"
90
93
 
91
94
  # UI modules
@@ -99,6 +102,7 @@ require_relative "clacky/thread_registry"
99
102
  require_relative "clacky/proxy_config"
100
103
  require_relative "clacky/platform_http_client"
101
104
  require_relative "clacky/identity"
105
+ require_relative "clacky/access_key"
102
106
  require_relative "clacky/utils/encoding"
103
107
  require_relative "clacky/utils/environment_detector"
104
108
  require_relative "clacky/utils/browser_detector"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: openclacky
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.11
4
+ version: 1.5.13
5
5
  platform: ruby
6
6
  authors:
7
7
  - windy
@@ -339,6 +339,7 @@ files:
339
339
  - homebrew/README.md
340
340
  - homebrew/openclacky.rb
341
341
  - lib/clacky.rb
342
+ - lib/clacky/access_key.rb
342
343
  - lib/clacky/aes_gcm.rb
343
344
  - lib/clacky/agent.rb
344
345
  - lib/clacky/agent/cost_tracker.rb
@@ -366,8 +367,10 @@ files:
366
367
  - lib/clacky/bedrock_stream_aggregator.rb
367
368
  - lib/clacky/billing/billing_record.rb
368
369
  - lib/clacky/billing/billing_store.rb
370
+ - lib/clacky/billing/platform_billing.rb
369
371
  - lib/clacky/block_font.rb
370
372
  - lib/clacky/brand_config.rb
373
+ - lib/clacky/cancel_flag.rb
371
374
  - lib/clacky/cli.rb
372
375
  - lib/clacky/client.rb
373
376
  - lib/clacky/default_extensions/advisor/advisors/general.md
@@ -505,8 +508,10 @@ files:
505
508
  - lib/clacky/message_format/anthropic.rb
506
509
  - lib/clacky/message_format/bedrock.rb
507
510
  - lib/clacky/message_format/open_ai.rb
511
+ - lib/clacky/message_format/open_ai_responses.rb
508
512
  - lib/clacky/message_history.rb
509
513
  - lib/clacky/null_ui_controller.rb
514
+ - lib/clacky/openai_responses_stream_aggregator.rb
510
515
  - lib/clacky/openai_stream_aggregator.rb
511
516
  - lib/clacky/plain_ui_controller.rb
512
517
  - lib/clacky/platform_http_client.rb
@@ -557,6 +562,7 @@ files:
557
562
  - lib/clacky/server/channel/channel_ui_controller.rb
558
563
  - lib/clacky/server/channel/extension_adapter_loader.rb
559
564
  - lib/clacky/server/channel/user_adapter_loader.rb
565
+ - lib/clacky/server/dir_picker.rb
560
566
  - lib/clacky/server/discover.rb
561
567
  - lib/clacky/server/epipe_safe_io.rb
562
568
  - lib/clacky/server/git_panel.rb
@@ -612,6 +618,7 @@ files:
612
618
  - lib/clacky/ui2/progress_handle.rb
613
619
  - lib/clacky/ui2/progress_indicator.rb
614
620
  - lib/clacky/ui2/screen_buffer.rb
621
+ - lib/clacky/ui2/strings_cjk_patch.rb
615
622
  - lib/clacky/ui2/terminal_detector.rb
616
623
  - lib/clacky/ui2/theme_manager.rb
617
624
  - lib/clacky/ui2/themes/base_theme.rb
@@ -648,7 +655,11 @@ files:
648
655
  - lib/clacky/web/auth.js
649
656
  - lib/clacky/web/components/chat-navigator.js
650
657
  - lib/clacky/web/components/code-editor.js
658
+ - lib/clacky/web/components/composer.js
659
+ - lib/clacky/web/components/custom-select.js
651
660
  - lib/clacky/web/components/datepicker.js
661
+ - lib/clacky/web/components/mentions.js
662
+ - lib/clacky/web/components/model-picker.js
652
663
  - lib/clacky/web/components/notify.js
653
664
  - lib/clacky/web/components/onboard.js
654
665
  - lib/clacky/web/components/sidebar.js