openclacky 1.5.13 → 1.5.14

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 (66) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +51 -0
  3. data/lib/clacky/agent/chunk_index.rb +83 -0
  4. data/lib/clacky/agent/history_navigation.rb +239 -0
  5. data/lib/clacky/agent/session_serializer.rb +38 -97
  6. data/lib/clacky/agent.rb +281 -276
  7. data/lib/clacky/agent_config.rb +1 -1
  8. data/lib/clacky/billing/billing_store.rb +2 -2
  9. data/lib/clacky/billing/platform_billing.rb +6 -0
  10. data/lib/clacky/brand_config.rb +13 -2
  11. data/lib/clacky/cli.rb +27 -0
  12. data/lib/clacky/client.rb +2 -2
  13. data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/system_prompt.md +70 -134
  14. data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +91 -5
  15. data/lib/clacky/default_extensions/ext-studio/skills/ext-develop/SKILL.md +179 -577
  16. data/lib/clacky/default_extensions/git/panels/git/view.js +34 -14
  17. data/lib/clacky/default_extensions/preview/ext.yml +20 -0
  18. data/lib/clacky/default_extensions/preview/panels/preview/view.js +475 -0
  19. data/lib/clacky/default_extensions/time_machine/panels/time_machine/view.js +1 -10
  20. data/lib/clacky/extension/api_extension.rb +1 -1
  21. data/lib/clacky/extension/verifier.rb +1 -1
  22. data/lib/clacky/media/openai_compat.rb +70 -30
  23. data/lib/clacky/message_format/bedrock.rb +6 -1
  24. data/lib/clacky/prompts/base.md +1 -1
  25. data/lib/clacky/providers.rb +38 -3
  26. data/lib/clacky/rich_ui/rich_ui_controller.rb +1 -1
  27. data/lib/clacky/search_config.rb +3 -3
  28. data/lib/clacky/server/channel/channel_manager.rb +8 -5
  29. data/lib/clacky/server/git_panel.rb +10 -2
  30. data/lib/clacky/server/http_server.rb +161 -14
  31. data/lib/clacky/server/preview.rb +351 -0
  32. data/lib/clacky/server/web_ui_controller.rb +1 -1
  33. data/lib/clacky/skill.rb +48 -0
  34. data/lib/clacky/tools/browser.rb +176 -19
  35. data/lib/clacky/tools/web_search.rb +79 -8
  36. data/lib/clacky/ui2/components/command_suggestions.rb +2 -1
  37. data/lib/clacky/ui2/components/input_area.rb +22 -2
  38. data/lib/clacky/ui2/components/modal_component.rb +35 -6
  39. data/lib/clacky/ui2/ui_controller.rb +44 -7
  40. data/lib/clacky/utils/file_processor.rb +19 -7
  41. data/lib/clacky/utils/mac_app_detector.rb +186 -0
  42. data/lib/clacky/utils/model_pricing.rb +114 -66
  43. data/lib/clacky/utils/windows_app_detector.rb +334 -0
  44. data/lib/clacky/version.rb +1 -1
  45. data/lib/clacky/web/app.css +596 -130
  46. data/lib/clacky/web/components/chat-navigator.js +489 -202
  47. data/lib/clacky/web/components/code-editor.js +191 -5
  48. data/lib/clacky/web/components/model-picker.js +2 -1
  49. data/lib/clacky/web/components/quote-select.js +235 -0
  50. data/lib/clacky/web/core/aside.js +157 -8
  51. data/lib/clacky/web/core/ext.js +16 -0
  52. data/lib/clacky/web/features/billing/view.js +75 -21
  53. data/lib/clacky/web/features/skills/store.js +18 -1
  54. data/lib/clacky/web/features/skills/view.js +128 -7
  55. data/lib/clacky/web/features/workspace/store.js +80 -7
  56. data/lib/clacky/web/features/workspace/view.js +392 -40
  57. data/lib/clacky/web/i18n.js +90 -5
  58. data/lib/clacky/web/index.html +15 -6
  59. data/lib/clacky/web/sessions.js +193 -38
  60. data/lib/clacky/web/utils.js +34 -0
  61. data/lib/clacky/web/vendor/codemirror/codemirror.min.js +24 -19
  62. data/lib/clacky/web/vendor/codemirror/entry.js +130 -0
  63. data/lib/clacky/web/vendor/codemirror/package.json +29 -0
  64. data/lib/clacky/web/ws-dispatcher.js +20 -0
  65. data/lib/clacky.rb +2 -0
  66. metadata +11 -1
@@ -0,0 +1,130 @@
1
+ // CodeMirror 6 bundle entry — exposes a single `CM` global with the editor
2
+ // core plus mainstream language support for the workspace file viewer.
3
+ import { EditorState } from "@codemirror/state";
4
+ import {
5
+ EditorView,
6
+ keymap,
7
+ lineNumbers,
8
+ highlightActiveLineGutter,
9
+ highlightSpecialChars,
10
+ drawSelection,
11
+ dropCursor,
12
+ rectangularSelection,
13
+ crosshairCursor,
14
+ highlightActiveLine,
15
+ } from "@codemirror/view";
16
+ import {
17
+ defaultKeymap,
18
+ history,
19
+ historyKeymap,
20
+ indentWithTab,
21
+ } from "@codemirror/commands";
22
+ import { search, searchKeymap, highlightSelectionMatches } from "@codemirror/search";
23
+ import {
24
+ bracketMatching,
25
+ foldGutter,
26
+ foldKeymap,
27
+ indentOnInput,
28
+ syntaxHighlighting,
29
+ defaultHighlightStyle,
30
+ StreamLanguage,
31
+ } from "@codemirror/language";
32
+ import { markdown, markdownLanguage } from "@codemirror/lang-markdown";
33
+ import { oneDark } from "@codemirror/theme-one-dark";
34
+
35
+ // ── Lezer languages (best highlighting quality) ────────────────────────────
36
+ import { python } from "@codemirror/lang-python";
37
+ import {
38
+ javascript,
39
+ typescriptLanguage,
40
+ jsxLanguage,
41
+ tsxLanguage,
42
+ } from "@codemirror/lang-javascript";
43
+ import { html } from "@codemirror/lang-html";
44
+ import { css } from "@codemirror/lang-css";
45
+ import { json } from "@codemirror/lang-json";
46
+ import { sql } from "@codemirror/lang-sql";
47
+ import { xml } from "@codemirror/lang-xml";
48
+ import { rust } from "@codemirror/lang-rust";
49
+ import { java } from "@codemirror/lang-java";
50
+ import { cpp } from "@codemirror/lang-cpp";
51
+ import { php } from "@codemirror/lang-php";
52
+
53
+ // ── Legacy (StreamParser) languages ────────────────────────────────────────
54
+ import { ruby } from "@codemirror/legacy-modes/mode/ruby";
55
+ import { go } from "@codemirror/legacy-modes/mode/go";
56
+ import { shell } from "@codemirror/legacy-modes/mode/shell";
57
+ import { yaml } from "@codemirror/legacy-modes/mode/yaml";
58
+ import { toml } from "@codemirror/legacy-modes/mode/toml";
59
+ import { dockerFile } from "@codemirror/legacy-modes/mode/dockerfile";
60
+
61
+ const rubyLang = StreamLanguage.define(ruby);
62
+ const goLang = StreamLanguage.define(go);
63
+ const shellLang = StreamLanguage.define(shell);
64
+ const yamlLang = StreamLanguage.define(yaml);
65
+ const tomlLang = StreamLanguage.define(toml);
66
+ const dockerfileLang = StreamLanguage.define(dockerFile);
67
+
68
+ // Lezer languages are already functions returning a LanguageSupport.
69
+ // LRLanguage objects and StreamLanguage supports are wrapped so CodeEditor
70
+ // can call every language uniformly as `CM.<lang>()`.
71
+ const typescript = () => typescriptLanguage;
72
+ const jsx = () => jsxLanguage;
73
+ const tsx = () => tsxLanguage;
74
+ const rubyFn = () => rubyLang;
75
+ const goFn = () => goLang;
76
+ const shellFn = () => shellLang;
77
+ const yamlFn = () => yamlLang;
78
+ const tomlFn = () => tomlLang;
79
+ const dockerfileFn = () => dockerfileLang;
80
+
81
+ export {
82
+ EditorState,
83
+ EditorView,
84
+ keymap,
85
+ lineNumbers,
86
+ highlightActiveLineGutter,
87
+ highlightSpecialChars,
88
+ drawSelection,
89
+ dropCursor,
90
+ rectangularSelection,
91
+ crosshairCursor,
92
+ highlightActiveLine,
93
+ highlightSelectionMatches,
94
+ defaultKeymap,
95
+ history,
96
+ historyKeymap,
97
+ indentWithTab,
98
+ search,
99
+ searchKeymap,
100
+ bracketMatching,
101
+ foldGutter,
102
+ foldKeymap,
103
+ indentOnInput,
104
+ syntaxHighlighting,
105
+ defaultHighlightStyle,
106
+ StreamLanguage,
107
+ markdown,
108
+ markdownLanguage,
109
+ oneDark,
110
+ python,
111
+ javascript,
112
+ typescript,
113
+ jsx,
114
+ tsx,
115
+ html,
116
+ css,
117
+ json,
118
+ sql,
119
+ xml,
120
+ rust,
121
+ java,
122
+ cpp,
123
+ php,
124
+ rubyFn as ruby,
125
+ goFn as go,
126
+ shellFn as shell,
127
+ yamlFn as yaml,
128
+ tomlFn as toml,
129
+ dockerfileFn as dockerfile,
130
+ };
@@ -0,0 +1,29 @@
1
+ {
2
+ "name": "cm-build",
3
+ "version": "1.0.0",
4
+ "private": true,
5
+ "type": "module",
6
+ "dependencies": {
7
+ "@codemirror/commands": "^6.8.1",
8
+ "@codemirror/lang-cpp": "^6.0.2",
9
+ "@codemirror/lang-css": "^6.3.1",
10
+ "@codemirror/lang-html": "^6.4.9",
11
+ "@codemirror/lang-java": "^6.0.1",
12
+ "@codemirror/lang-javascript": "^6.2.3",
13
+ "@codemirror/lang-json": "^6.0.1",
14
+ "@codemirror/lang-markdown": "^6.3.2",
15
+ "@codemirror/lang-php": "^6.0.1",
16
+ "@codemirror/lang-python": "^6.2.0",
17
+ "@codemirror/lang-rust": "^6.0.1",
18
+ "@codemirror/lang-sql": "^6.8.1",
19
+ "@codemirror/lang-xml": "^6.1.0",
20
+ "@codemirror/language": "^6.11.0",
21
+ "@codemirror/legacy-modes": "^6.5.1",
22
+ "@codemirror/search": "^6.5.10",
23
+ "@codemirror/state": "^6.5.2",
24
+ "@codemirror/theme-one-dark": "^6.1.2",
25
+ "@codemirror/view": "^6.36.8",
26
+ "esbuild": "^0.25.0",
27
+ "jsdom": "^30.0.1"
28
+ }
29
+ }
@@ -226,6 +226,20 @@ function _dispatchEvent(ev) {
226
226
  }
227
227
  }
228
228
 
229
+ const eventSession = ev.session_id || ev.session?.id;
230
+ if (eventSession === Sessions.activeId) {
231
+ if (["history_user_message", "task_finished", "interrupted"].includes(ev.type) ||
232
+ (ev.type === "session_update" && (ev.status || ev.session))) {
233
+ window.ChatNavigator?.refresh();
234
+ }
235
+ // Keep live output out of a detached historical window. Session status,
236
+ // notifications and extension delivery above continue normally.
237
+ const historyOutput = ["history_user_message", "assistant_message", "tool_call", "tool_result",
238
+ "tool_error", "tool_stdout", "phase_start", "phase_end", "request_feedback", "progress",
239
+ "complete", "interrupted", "info", "warning", "success", "error", "token_usage"];
240
+ if (historyOutput.includes(ev.type) && Sessions.deferLiveHistory(ev)) return;
241
+ }
242
+
229
243
  switch (ev.type) {
230
244
 
231
245
  // ── Phase grouping ─────────────────────────────────────────────────
@@ -424,6 +438,7 @@ function _dispatchEvent(ev) {
424
438
  if (ev.session_id !== Sessions.activeId) break;
425
439
  Sessions.clearProgress();
426
440
  Sessions.appendMsg("assistant", ev.content);
441
+ if (!ev.phase_id && !ev.interim) window.ChatNavigator?.refresh();
427
442
  break;
428
443
 
429
444
  case "tool_call":
@@ -470,6 +485,11 @@ function _dispatchEvent(ev) {
470
485
  break;
471
486
 
472
487
  case "complete":
488
+ // The agent may have created/edited files under the working dir; notify
489
+ // the workspace store so the Files tree reloads on completion.
490
+ if (typeof Workspace !== "undefined" && Workspace.notifyTaskCompleted) {
491
+ Workspace.notifyTaskCompleted(ev.session_id);
492
+ }
473
493
  if (ev.session_id !== Sessions.activeId) break;
474
494
  Sessions.clearProgress();
475
495
  Sessions.collapseToolGroup();
data/lib/clacky.rb CHANGED
@@ -105,6 +105,8 @@ require_relative "clacky/identity"
105
105
  require_relative "clacky/access_key"
106
106
  require_relative "clacky/utils/encoding"
107
107
  require_relative "clacky/utils/environment_detector"
108
+ require_relative "clacky/utils/mac_app_detector"
109
+ require_relative "clacky/utils/windows_app_detector"
108
110
  require_relative "clacky/utils/browser_detector"
109
111
  require_relative "clacky/utils/scripts_manager"
110
112
  require_relative "clacky/utils/searcher_manager"
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.13
4
+ version: 1.5.14
5
5
  platform: ruby
6
6
  authors:
7
7
  - windy
@@ -342,10 +342,12 @@ files:
342
342
  - lib/clacky/access_key.rb
343
343
  - lib/clacky/aes_gcm.rb
344
344
  - lib/clacky/agent.rb
345
+ - lib/clacky/agent/chunk_index.rb
345
346
  - lib/clacky/agent/cost_tracker.rb
346
347
  - lib/clacky/agent/fake_tool_call_detector.rb
347
348
  - lib/clacky/agent/goal_manager.rb
348
349
  - lib/clacky/agent/goal_state.rb
350
+ - lib/clacky/agent/history_navigation.rb
349
351
  - lib/clacky/agent/hook_manager.rb
350
352
  - lib/clacky/agent/llm_caller.rb
351
353
  - lib/clacky/agent/memory_updater.rb
@@ -398,6 +400,8 @@ files:
398
400
  - lib/clacky/default_extensions/meeting/ext.yml
399
401
  - lib/clacky/default_extensions/meeting/panels/meeting/view.js
400
402
  - lib/clacky/default_extensions/meeting/skills/meeting-summarizer/SKILL.md
403
+ - lib/clacky/default_extensions/preview/ext.yml
404
+ - lib/clacky/default_extensions/preview/panels/preview/view.js
401
405
  - lib/clacky/default_extensions/time_machine/ext.yml
402
406
  - lib/clacky/default_extensions/time_machine/panels/time_machine/view.js
403
407
  - lib/clacky/default_parsers/doc_parser.rb
@@ -568,6 +572,7 @@ files:
568
572
  - lib/clacky/server/git_panel.rb
569
573
  - lib/clacky/server/http_server.rb
570
574
  - lib/clacky/server/model_prices.rb
575
+ - lib/clacky/server/preview.rb
571
576
  - lib/clacky/server/project_manager.rb
572
577
  - lib/clacky/server/scheduler.rb
573
578
  - lib/clacky/server/server_master.rb
@@ -638,6 +643,7 @@ files:
638
643
  - lib/clacky/utils/limit_stack.rb
639
644
  - lib/clacky/utils/logger.rb
640
645
  - lib/clacky/utils/login_shell.rb
646
+ - lib/clacky/utils/mac_app_detector.rb
641
647
  - lib/clacky/utils/model_pricing.rb
642
648
  - lib/clacky/utils/parser_manager.rb
643
649
  - lib/clacky/utils/path_helper.rb
@@ -645,6 +651,7 @@ files:
645
651
  - lib/clacky/utils/searcher_manager.rb
646
652
  - lib/clacky/utils/string_matcher.rb
647
653
  - lib/clacky/utils/trash_directory.rb
654
+ - lib/clacky/utils/windows_app_detector.rb
648
655
  - lib/clacky/utils/workspace_rules.rb
649
656
  - lib/clacky/version.rb
650
657
  - lib/clacky/vision/resolver.rb
@@ -662,6 +669,7 @@ files:
662
669
  - lib/clacky/web/components/model-picker.js
663
670
  - lib/clacky/web/components/notify.js
664
671
  - lib/clacky/web/components/onboard.js
672
+ - lib/clacky/web/components/quote-select.js
665
673
  - lib/clacky/web/components/sidebar.js
666
674
  - lib/clacky/web/core/aside.js
667
675
  - lib/clacky/web/core/ext.js
@@ -711,6 +719,8 @@ files:
711
719
  - lib/clacky/web/theme.js
712
720
  - lib/clacky/web/utils.js
713
721
  - lib/clacky/web/vendor/codemirror/codemirror.min.js
722
+ - lib/clacky/web/vendor/codemirror/entry.js
723
+ - lib/clacky/web/vendor/codemirror/package.json
714
724
  - lib/clacky/web/vendor/hljs/highlight.min.js
715
725
  - lib/clacky/web/vendor/hljs/hljs-theme.css
716
726
  - lib/clacky/web/vendor/katex/auto-render.min.js