openclacky 1.5.12 → 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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +48 -0
- data/lib/clacky/access_key.rb +59 -0
- data/lib/clacky/agent/message_compressor_helper.rb +52 -1
- data/lib/clacky/agent/session_serializer.rb +35 -2
- data/lib/clacky/agent/time_machine.rb +9 -1
- data/lib/clacky/agent.rb +11 -7
- data/lib/clacky/agent_config.rb +40 -0
- data/lib/clacky/agent_profile.rb +5 -5
- data/lib/clacky/billing/platform_billing.rb +84 -1
- data/lib/clacky/brand_config.rb +4 -3
- data/lib/clacky/cli.rb +4 -2
- data/lib/clacky/client.rb +107 -0
- data/lib/clacky/default_extensions/ext-studio/api/handler.rb +3 -0
- data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +40 -21
- data/lib/clacky/default_extensions/git/ext.yml +1 -1
- data/lib/clacky/default_extensions/git/panels/git/view.js +483 -77
- data/lib/clacky/default_extensions/meeting/ext.yml +2 -1
- data/lib/clacky/default_extensions/time_machine/ext.yml +1 -1
- data/lib/clacky/default_extensions/time_machine/panels/time_machine/view.js +186 -208
- data/lib/clacky/extension/packager.rb +4 -2
- data/lib/clacky/extension/verifier.rb +14 -1
- data/lib/clacky/message_format/open_ai.rb +5 -1
- data/lib/clacky/message_format/open_ai_responses.rb +409 -0
- data/lib/clacky/message_history.rb +6 -2
- data/lib/clacky/openai_responses_stream_aggregator.rb +294 -0
- data/lib/clacky/providers.rb +18 -6
- data/lib/clacky/server/dir_picker.rb +154 -0
- data/lib/clacky/server/git_panel.rb +61 -9
- data/lib/clacky/server/http_server.rb +147 -103
- data/lib/clacky/tools/terminal.rb +27 -3
- data/lib/clacky/ui2/markdown_renderer.rb +15 -12
- data/lib/clacky/ui2/strings_cjk_patch.rb +132 -0
- data/lib/clacky/ui2/themes/hacker_theme.rb +1 -1
- data/lib/clacky/ui2/themes/minimal_theme.rb +1 -1
- data/lib/clacky/utils/model_pricing.rb +70 -4
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +412 -108
- data/lib/clacky/web/components/composer.js +45 -7
- data/lib/clacky/web/components/custom-select.js +136 -0
- data/lib/clacky/web/components/mentions.js +58 -2
- data/lib/clacky/web/components/model-picker.js +527 -0
- data/lib/clacky/web/components/onboard.js +29 -55
- data/lib/clacky/web/core/ext.js +38 -0
- data/lib/clacky/web/features/billing/view.js +20 -6
- data/lib/clacky/web/features/extensions/view.js +22 -10
- data/lib/clacky/web/features/new-session/store.js +15 -1
- data/lib/clacky/web/features/new-session/view.js +31 -22
- data/lib/clacky/web/features/trash/view.js +31 -19
- data/lib/clacky/web/features/workspace/store.js +1 -0
- data/lib/clacky/web/features/workspace/view.js +54 -3
- data/lib/clacky/web/i18n.js +73 -11
- data/lib/clacky/web/index.html +92 -37
- data/lib/clacky/web/sessions.js +550 -592
- data/lib/clacky/web/settings.js +163 -190
- data/lib/clacky.rb +3 -0
- metadata +8 -1
data/lib/clacky/web/index.html
CHANGED
|
@@ -100,14 +100,22 @@
|
|
|
100
100
|
</div>
|
|
101
101
|
<!-- Filter row -->
|
|
102
102
|
<div class="search-filter-row">
|
|
103
|
-
<
|
|
104
|
-
<
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
103
|
+
<div class="custom-select-wrapper search-select" id="session-search-type">
|
|
104
|
+
<div class="custom-select-trigger custom-select-trigger--bare" tabindex="0">
|
|
105
|
+
<span class="custom-select-value placeholder" data-i18n="sessions.search.typeAll">All types</span>
|
|
106
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
107
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
108
|
+
</svg>
|
|
109
|
+
</div>
|
|
110
|
+
<div class="custom-select-dropdown">
|
|
111
|
+
<div class="custom-select-option" data-value="" data-i18n="sessions.search.typeAll">All types</div>
|
|
112
|
+
<div class="custom-select-option" data-value="manual" data-i18n="sessions.search.typeManual">Default</div>
|
|
113
|
+
<div class="custom-select-option" data-value="cron" data-i18n="sessions.search.typeCron">Scheduled</div>
|
|
114
|
+
<div class="custom-select-option" data-value="channel" data-i18n="sessions.search.typeChannel">Channel</div>
|
|
115
|
+
<div class="custom-select-option" data-value="setup" data-i18n="sessions.search.typeSetup">Setup</div>
|
|
116
|
+
<div class="custom-select-option" data-value="coding" data-i18n="sessions.search.typeCoding">Coding</div>
|
|
117
|
+
</div>
|
|
118
|
+
</div>
|
|
111
119
|
<div class="search-date-wrap">
|
|
112
120
|
<button id="session-search-date" class="search-date datepicker-trigger" type="button" data-value="" data-i18n="sessions.search.datePlaceholder"></button>
|
|
113
121
|
</div>
|
|
@@ -140,7 +148,7 @@
|
|
|
140
148
|
<span class="chat-section-title">
|
|
141
149
|
<span data-i18n="sidebar.chat">Sessions</span>
|
|
142
150
|
<!-- Chevron: hidden by default, shown on hover or when collapsed -->
|
|
143
|
-
<svg class="chat-section-chevron" width="
|
|
151
|
+
<svg class="chat-section-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg">
|
|
144
152
|
<path d="M6 9l6 6 6-6"/>
|
|
145
153
|
</svg>
|
|
146
154
|
</span>
|
|
@@ -191,7 +199,7 @@
|
|
|
191
199
|
<div class="sidebar-divider" id="projects-section-header">
|
|
192
200
|
<span class="projects-section-title">
|
|
193
201
|
<span data-i18n="sidebar.projects">Projects</span>
|
|
194
|
-
<svg class="projects-section-chevron" width="
|
|
202
|
+
<svg class="projects-section-chevron" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round">
|
|
195
203
|
<path d="M6 9l6 6 6-6"/>
|
|
196
204
|
</svg>
|
|
197
205
|
</span>
|
|
@@ -720,15 +728,31 @@
|
|
|
720
728
|
</div>
|
|
721
729
|
<div class="extensions-toolbar-right">
|
|
722
730
|
<input type="text" id="extensions-search-input" class="extensions-search" placeholder="Search extensions…" />
|
|
723
|
-
<
|
|
724
|
-
<
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
<
|
|
731
|
-
|
|
731
|
+
<div class="custom-select-wrapper extensions-select" id="extensions-sort">
|
|
732
|
+
<div class="custom-select-trigger" tabindex="0">
|
|
733
|
+
<span class="custom-select-value" data-i18n="extensions.sort.downloads">Most downloaded</span>
|
|
734
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
735
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
736
|
+
</svg>
|
|
737
|
+
</div>
|
|
738
|
+
<div class="custom-select-dropdown">
|
|
739
|
+
<div class="custom-select-option" data-value="downloads" data-i18n="extensions.sort.downloads">Most downloaded</div>
|
|
740
|
+
<div class="custom-select-option" data-value="newest" data-i18n="extensions.sort.newest">Newest</div>
|
|
741
|
+
<div class="custom-select-option" data-value="updated" data-i18n="extensions.sort.updated">Recently updated</div>
|
|
742
|
+
</div>
|
|
743
|
+
</div>
|
|
744
|
+
<div class="custom-select-wrapper extensions-select" id="extensions-installed-filter">
|
|
745
|
+
<div class="custom-select-trigger" tabindex="0">
|
|
746
|
+
<span class="custom-select-value" data-i18n="extensions.filter.all">All</span>
|
|
747
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
748
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
749
|
+
</svg>
|
|
750
|
+
</div>
|
|
751
|
+
<div class="custom-select-dropdown">
|
|
752
|
+
<div class="custom-select-option" data-value="all" data-i18n="extensions.filter.all">All</div>
|
|
753
|
+
<div class="custom-select-option" data-value="installed" data-i18n="extensions.filter.installed">Installed</div>
|
|
754
|
+
</div>
|
|
755
|
+
</div>
|
|
732
756
|
</div>
|
|
733
757
|
</div>
|
|
734
758
|
|
|
@@ -764,9 +788,15 @@
|
|
|
764
788
|
<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="trash-filter-project-icon">
|
|
765
789
|
<path d="M22 19a2 2 0 0 1-2 2H4a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h5l2 3h9a2 2 0 0 1 2 2z"/>
|
|
766
790
|
</svg>
|
|
767
|
-
<
|
|
768
|
-
<
|
|
769
|
-
|
|
791
|
+
<div class="custom-select-wrapper" id="trash-filter-project">
|
|
792
|
+
<div class="custom-select-trigger custom-select-trigger--bare" tabindex="0">
|
|
793
|
+
<span class="custom-select-value placeholder" data-i18n="trash.filterAllProjects">所有项目</span>
|
|
794
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
795
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
796
|
+
</svg>
|
|
797
|
+
</div>
|
|
798
|
+
<div class="custom-select-dropdown"></div>
|
|
799
|
+
</div>
|
|
770
800
|
</div>
|
|
771
801
|
</div>
|
|
772
802
|
<span class="trash-summary" id="trash-summary"></span>
|
|
@@ -934,9 +964,15 @@
|
|
|
934
964
|
data-i18n-placeholder="settings.models.search.placeholder"
|
|
935
965
|
placeholder="Search model / provider / remark / base URL" autocomplete="off">
|
|
936
966
|
</div>
|
|
937
|
-
<
|
|
938
|
-
<
|
|
939
|
-
|
|
967
|
+
<div class="custom-select-wrapper model-provider-filter" id="model-provider-filter">
|
|
968
|
+
<div class="custom-select-trigger" tabindex="0">
|
|
969
|
+
<span class="custom-select-value placeholder" data-i18n="settings.models.filter.all">All providers</span>
|
|
970
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
971
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
972
|
+
</svg>
|
|
973
|
+
</div>
|
|
974
|
+
<div class="custom-select-dropdown"></div>
|
|
975
|
+
</div>
|
|
940
976
|
<button id="btn-add-model" class="btn-settings-add" data-i18n="settings.models.add">+ Add Model</button>
|
|
941
977
|
</div>
|
|
942
978
|
</div>
|
|
@@ -1122,11 +1158,19 @@
|
|
|
1122
1158
|
<div class="settings-network">
|
|
1123
1159
|
<p class="settings-network-desc" data-i18n="settings.search.desc">By default web_search scrapes DuckDuckGo and Bing, which needs no key but returns lower-quality results. Select a search provider to use an API instead — it falls back to the built-in engines if the provider fails.</p>
|
|
1124
1160
|
<div class="settings-network-url">
|
|
1125
|
-
<label class="settings-network-url-label" for="settings-search-provider" data-i18n="settings.search.provider">Provider</label>
|
|
1161
|
+
<label class="settings-network-url-label" for="settings-search-provider-trigger" data-i18n="settings.search.provider">Provider</label>
|
|
1126
1162
|
<div class="settings-network-url-row">
|
|
1127
|
-
<select id="settings-search-provider
|
|
1128
|
-
<
|
|
1129
|
-
|
|
1163
|
+
<div class="custom-select-wrapper" id="settings-search-provider-wrapper">
|
|
1164
|
+
<div class="custom-select-trigger" tabindex="0" id="settings-search-provider-trigger">
|
|
1165
|
+
<span class="custom-select-value placeholder" id="settings-search-provider-value" data-i18n="settings.search.builtin">Built-in (DuckDuckGo / Bing)</span>
|
|
1166
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
1167
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
1168
|
+
</svg>
|
|
1169
|
+
</div>
|
|
1170
|
+
<div class="custom-select-dropdown" id="settings-search-provider-dropdown">
|
|
1171
|
+
<div class="custom-select-option" data-value="" data-i18n="settings.search.builtin">Built-in (DuckDuckGo / Bing)</div>
|
|
1172
|
+
</div>
|
|
1173
|
+
</div>
|
|
1130
1174
|
<button type="button" id="btn-save-search" class="btn-settings-action" data-i18n="settings.search.save">Save</button>
|
|
1131
1175
|
</div>
|
|
1132
1176
|
<div id="settings-search-status" class="model-test-result"></div>
|
|
@@ -1368,7 +1412,7 @@
|
|
|
1368
1412
|
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
1369
1413
|
</svg>
|
|
1370
1414
|
</div>
|
|
1371
|
-
<div class="custom-select-dropdown" id="model-modal-provider-dropdown"></div>
|
|
1415
|
+
<div class="custom-select-dropdown custom-select-dropdown--footer" id="model-modal-provider-dropdown"></div>
|
|
1372
1416
|
</div>
|
|
1373
1417
|
<div id="model-modal-promo-hint" class="provider-promo-hint" data-index="modal"></div>
|
|
1374
1418
|
</label>
|
|
@@ -1416,11 +1460,20 @@
|
|
|
1416
1460
|
|
|
1417
1461
|
<label class="model-field" id="model-modal-apiformat-field">
|
|
1418
1462
|
<span class="field-label" data-i18n="settings.models.field.apiFormat">API Format</span>
|
|
1419
|
-
<select id="model-modal-api-format
|
|
1420
|
-
<
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1463
|
+
<div class="custom-select-wrapper" id="model-modal-api-format-wrapper">
|
|
1464
|
+
<div class="custom-select-trigger" tabindex="0" id="model-modal-api-format-trigger">
|
|
1465
|
+
<span class="custom-select-value placeholder" id="model-modal-api-format-value" data-i18n="settings.models.apiFormat.auto">Auto (detect from provider & model)</span>
|
|
1466
|
+
<svg class="custom-select-arrow" fill="none" stroke="currentColor" viewBox="0 0 24 24">
|
|
1467
|
+
<path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7"></path>
|
|
1468
|
+
</svg>
|
|
1469
|
+
</div>
|
|
1470
|
+
<div class="custom-select-dropdown" id="model-modal-api-format-dropdown">
|
|
1471
|
+
<div class="custom-select-option" data-value="" data-i18n="settings.models.apiFormat.auto">Auto (detect from provider & model)</div>
|
|
1472
|
+
<div class="custom-select-option" data-value="anthropic-messages" data-i18n="settings.models.apiFormat.anthropicMessages">Anthropic Messages API</div>
|
|
1473
|
+
<div class="custom-select-option" data-value="openai-completions" data-i18n="settings.models.apiFormat.openaiCompletions">OpenAI Chat Completions</div>
|
|
1474
|
+
<div class="custom-select-option" data-value="openai-responses" data-i18n="settings.models.apiFormat.openaiResponses">OpenAI Responses API</div>
|
|
1475
|
+
</div>
|
|
1476
|
+
</div>
|
|
1424
1477
|
</label>
|
|
1425
1478
|
|
|
1426
1479
|
<label class="model-field">
|
|
@@ -1531,9 +1584,9 @@
|
|
|
1531
1584
|
</li>
|
|
1532
1585
|
<li>
|
|
1533
1586
|
<strong data-i18n="onboard.device.success.model.label">Trial model:</strong>
|
|
1534
|
-
<span id="setup-device-success-model">or-gemini-3-
|
|
1587
|
+
<span id="setup-device-success-model">or-gemini-3-8-flash</span>
|
|
1535
1588
|
</li>
|
|
1536
|
-
<li class="setup-device-success-note" data-i18n="onboard.device.success.note">During the trial only Gemini 3.
|
|
1589
|
+
<li class="setup-device-success-note" data-i18n="onboard.device.success.note">During the trial only Gemini 3.8 Flash is available — top up any amount to unlock all frontier models on this same key.</li>
|
|
1537
1590
|
</ul>
|
|
1538
1591
|
<button id="setup-btn-device-continue" class="setup-submit-btn" data-i18n="onboard.device.success.btn">Start using Clacky →</button>
|
|
1539
1592
|
</div>
|
|
@@ -1682,11 +1735,13 @@
|
|
|
1682
1735
|
<script src="/components/composer.js"></script>
|
|
1683
1736
|
<script src="/components/mentions.js"></script>
|
|
1684
1737
|
<script src="/i18n.js"></script>
|
|
1738
|
+
<script src="/components/model-picker.js"></script>
|
|
1685
1739
|
<script src="/auth.js"></script>
|
|
1686
1740
|
<script src="/theme.js"></script>
|
|
1687
1741
|
<script src="/components/notify.js"></script>
|
|
1688
1742
|
<script src="/ws.js"></script>
|
|
1689
1743
|
<script src="/ws-dispatcher.js"></script>
|
|
1744
|
+
<script src="/components/custom-select.js"></script>
|
|
1690
1745
|
<script src="/sessions.js"></script>
|
|
1691
1746
|
<script src="/projects.js"></script>
|
|
1692
1747
|
<script src="/features/workspace/store.js"></script>
|