openclacky 1.3.2 → 1.3.4
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 +54 -0
- data/Dockerfile +3 -0
- data/README.md +1 -1
- data/README_JA.md +237 -0
- data/docs/rich_ui_guide.md +277 -0
- data/docs/rich_ui_refactor_plan.md +396 -0
- data/lib/clacky/agent/llm_caller.rb +10 -4
- data/lib/clacky/agent/session_serializer.rb +52 -7
- data/lib/clacky/agent/time_machine.rb +247 -26
- data/lib/clacky/agent.rb +15 -3
- data/lib/clacky/api_extension.rb +262 -0
- data/lib/clacky/api_extension_loader.rb +156 -0
- data/lib/clacky/cli.rb +93 -3
- data/lib/clacky/client.rb +38 -13
- data/lib/clacky/default_agents/_panels/git/panel.js +201 -0
- data/lib/clacky/default_agents/_panels/time_machine/panel.js +640 -0
- data/lib/clacky/default_agents/coding/profile.yml +3 -0
- data/lib/clacky/default_agents/coding/webui/.gitkeep +0 -0
- data/lib/clacky/default_skills/cron-task-creator/SKILL.md +1 -1
- data/lib/clacky/default_skills/extend-openclacky/SKILL.md +6 -4
- data/lib/clacky/default_skills/media-gen/SKILL.md +37 -10
- data/lib/clacky/idle_compression_timer.rb +3 -1
- data/lib/clacky/locales/en.rb +26 -0
- data/lib/clacky/locales/i18n.rb +26 -0
- data/lib/clacky/locales/zh.rb +26 -0
- data/lib/clacky/media/openai_compat.rb +64 -1
- data/lib/clacky/message_history.rb +9 -0
- data/lib/clacky/rich_ui/components/base_component.rb +50 -0
- data/lib/clacky/rich_ui/components/dialogs/approval_dialog.rb +142 -0
- data/lib/clacky/rich_ui/components/dialogs/config_menu_dialog.rb +106 -0
- data/lib/clacky/rich_ui/components/dialogs/form_dialog.rb +128 -0
- data/lib/clacky/rich_ui/components/sidebar.rb +119 -0
- data/lib/clacky/rich_ui/components/sidebar_panels.rb +134 -0
- data/lib/clacky/rich_ui/components/status_view.rb +58 -0
- data/lib/clacky/rich_ui/components/thinking_live_view.rb +79 -0
- data/lib/clacky/rich_ui/entry_tracker.rb +56 -0
- data/lib/clacky/rich_ui/layout_adapter.rb +16 -0
- data/lib/clacky/rich_ui/progress_handle_adapter.rb +24 -0
- data/lib/clacky/rich_ui/rich_ui_controller.rb +868 -0
- data/lib/clacky/rich_ui/shell/rich_agent_shell.rb +184 -0
- data/lib/clacky/rich_ui/view_renderer.rb +291 -0
- data/lib/clacky/rich_ui.rb +57 -0
- data/lib/clacky/rich_ui_controller.rb +3 -1549
- data/lib/clacky/server/api_extension_dispatcher.rb +120 -0
- data/lib/clacky/server/channel/channel_manager.rb +26 -0
- data/lib/clacky/server/git_panel.rb +115 -0
- data/lib/clacky/server/http_server.rb +547 -15
- data/lib/clacky/server/server_master.rb +6 -4
- data/lib/clacky/server/session_registry.rb +1 -1
- data/lib/clacky/shell_hook_loader.rb +1 -1
- data/lib/clacky/tools/edit.rb +14 -2
- data/lib/clacky/ui2/ui_controller.rb +7 -0
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +511 -101
- data/lib/clacky/web/app.js +95 -14
- data/lib/clacky/web/components/code-editor.js +197 -0
- data/lib/clacky/web/{notify.js → components/notify.js} +1 -1
- data/lib/clacky/web/{onboard.js → components/onboard.js} +18 -2
- data/lib/clacky/web/core/aside.js +117 -0
- data/lib/clacky/web/core/ext.js +387 -0
- data/lib/clacky/web/features/backup/store.js +92 -0
- data/lib/clacky/web/features/backup/view.js +94 -0
- data/lib/clacky/web/features/billing/store.js +163 -0
- data/lib/clacky/web/{billing.js → features/billing/view.js} +132 -240
- data/lib/clacky/web/features/brand/store.js +110 -0
- data/lib/clacky/web/{brand.js → features/brand/view.js} +49 -199
- data/lib/clacky/web/features/channels/store.js +103 -0
- data/lib/clacky/web/{channels.js → features/channels/view.js} +50 -127
- data/lib/clacky/web/features/creator/store.js +81 -0
- data/lib/clacky/web/{creator.js → features/creator/view.js} +53 -102
- data/lib/clacky/web/features/mcp/store.js +158 -0
- data/lib/clacky/web/{mcp.js → features/mcp/view.js} +57 -134
- data/lib/clacky/web/features/model-tester/store.js +77 -0
- data/lib/clacky/web/features/model-tester/view.js +7 -0
- data/lib/clacky/web/features/profile/store.js +170 -0
- data/lib/clacky/web/{profile.js → features/profile/view.js} +94 -144
- data/lib/clacky/web/features/share/store.js +145 -0
- data/lib/clacky/web/{share.js → features/share/view.js} +66 -202
- data/lib/clacky/web/features/skills/store.js +331 -0
- data/lib/clacky/web/features/skills/view.js +581 -0
- data/lib/clacky/web/features/tasks/store.js +135 -0
- data/lib/clacky/web/features/tasks/view.js +241 -0
- data/lib/clacky/web/features/trash/store.js +242 -0
- data/lib/clacky/web/{trash.js → features/trash/view.js} +102 -293
- data/lib/clacky/web/features/version/store.js +165 -0
- data/lib/clacky/web/features/version/view.js +323 -0
- data/lib/clacky/web/features/workspace/store.js +99 -0
- data/lib/clacky/web/features/workspace/view.js +305 -0
- data/lib/clacky/web/i18n.js +68 -6
- data/lib/clacky/web/index.html +113 -62
- data/lib/clacky/web/sessions.js +493 -39
- data/lib/clacky/web/settings.js +143 -49
- data/lib/clacky/web/skills.js +3 -863
- data/lib/clacky/web/vendor/codemirror/codemirror.min.js +29 -0
- data/lib/clacky/web/ws-dispatcher.js +7 -3
- data/lib/clacky.rb +17 -1
- metadata +81 -20
- data/lib/clacky/web/backup.js +0 -119
- data/lib/clacky/web/model-tester.js +0 -66
- data/lib/clacky/web/tasks.js +0 -373
- data/lib/clacky/web/version.js +0 -449
- data/lib/clacky/web/workspace.js +0 -316
- /data/lib/clacky/web/{notify.mp3 → assets/notify.mp3} +0 -0
- /data/lib/clacky/web/{datepicker.js → components/datepicker.js} +0 -0
- /data/lib/clacky/web/{sidebar.js → components/sidebar.js} +0 -0
- /data/lib/clacky/web/{marked.min.js → vendor/marked/marked.min.js} +0 -0
data/lib/clacky/web/index.html
CHANGED
|
@@ -25,6 +25,7 @@
|
|
|
25
25
|
<!-- ── TOP HEADER ──────────────────────────────────────────────────────── -->
|
|
26
26
|
<header id="top-header">
|
|
27
27
|
<div id="header-left">
|
|
28
|
+
<span id="ext-slot-header-left" data-slot="header.left"></span>
|
|
28
29
|
<button id="btn-toggle-sidebar" class="sidebar-toggle-btn" title="Toggle sidebar">
|
|
29
30
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-sm">
|
|
30
31
|
<rect width="18" height="18" x="3" y="3" rx="2"/>
|
|
@@ -51,6 +52,7 @@
|
|
|
51
52
|
</button>
|
|
52
53
|
</div>
|
|
53
54
|
<div id="header-right">
|
|
55
|
+
<span id="ext-slot-header-right" data-slot="header.right"></span>
|
|
54
56
|
<button id="share-toggle-header" class="theme-toggle-btn" data-i18n-title="share.tooltip" title="Share">
|
|
55
57
|
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="icon-sm">
|
|
56
58
|
<circle cx="18" cy="5" r="3"/>
|
|
@@ -269,10 +271,14 @@
|
|
|
269
271
|
</div>
|
|
270
272
|
</div>
|
|
271
273
|
</div>
|
|
274
|
+
|
|
275
|
+
<!-- Extension nav slot: extensions add custom menu items / entry points to whole new workspaces here. -->
|
|
276
|
+
<div id="ext-slot-sidebar-nav" data-slot="sidebar.nav"></div>
|
|
272
277
|
</div>
|
|
273
278
|
|
|
274
279
|
<!-- Bottom Settings -->
|
|
275
280
|
<div id="sidebar-footer">
|
|
281
|
+
<span id="ext-slot-sidebar-footer" data-slot="sidebar.footer"></span>
|
|
276
282
|
<div class="sidebar-nav-row">
|
|
277
283
|
<button id="btn-settings" class="sidebar-nav-btn" title="Settings">
|
|
278
284
|
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
@@ -297,6 +303,9 @@
|
|
|
297
303
|
<!-- ── MAIN ─────────────────────────────────────────────────────────── -->
|
|
298
304
|
<main id="main">
|
|
299
305
|
|
|
306
|
+
<!-- Extension workspace slot: extensions mount entirely new custom panels here. -->
|
|
307
|
+
<div id="ext-slot-main-workspace" data-slot="main.workspace"></div>
|
|
308
|
+
|
|
300
309
|
|
|
301
310
|
<!-- Onboard panel: kept as empty shell (soul_setup auto-launches /onboard session) -->
|
|
302
311
|
<div id="onboard-panel" style="display:none"></div>
|
|
@@ -354,6 +363,8 @@
|
|
|
354
363
|
|
|
355
364
|
<!-- Chat column (messages + info bar + input) -->
|
|
356
365
|
<div id="chat-main">
|
|
366
|
+
<!-- Banner slot: agent-scoped notices/toolbars above the message stream. -->
|
|
367
|
+
<div id="ext-slot-session-banner" class="session-banner" data-slot="session.banner"></div>
|
|
357
368
|
<div id="messages" class="chat-messages-scroll"></div>
|
|
358
369
|
<!-- New message notification banner -->
|
|
359
370
|
<div id="new-message-banner" class="new-message-banner" style="display:none">
|
|
@@ -403,6 +414,8 @@
|
|
|
403
414
|
</span>
|
|
404
415
|
</div>
|
|
405
416
|
|
|
417
|
+
<!-- Composer slot: agent-scoped controls just above the input bar. -->
|
|
418
|
+
<div id="ext-slot-session-composer" class="session-composer" data-slot="session.composer"></div>
|
|
406
419
|
<div id="input-area">
|
|
407
420
|
<div id="ws-disconnect-hint" style="display:none"></div>
|
|
408
421
|
<!-- Skill autocomplete dropdown (shown when user types /xxx) -->
|
|
@@ -441,33 +454,23 @@
|
|
|
441
454
|
</div>
|
|
442
455
|
</div><!-- /#chat-main -->
|
|
443
456
|
|
|
444
|
-
<!-- ──
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
<button id="btn-workspace-close" class="workspace-icon-btn" data-i18n-title="workspace.collapse" title="Collapse">
|
|
457
|
-
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
458
|
-
<path d="M9 18l6-6-6-6"/>
|
|
459
|
-
</svg>
|
|
460
|
-
</button>
|
|
461
|
-
</div>
|
|
462
|
-
</div>
|
|
463
|
-
<div id="workspace-tree" role="tree"></div>
|
|
464
|
-
</aside>
|
|
457
|
+
<!-- ── SESSION ASIDE (right) ────────────────────────────────────────
|
|
458
|
+
One resizable / collapsible right column. The tab bar and tab bodies
|
|
459
|
+
are rendered into #ext-slot-session-aside by Clacky.ext (tabbed slot);
|
|
460
|
+
the chrome here (resize handle, collapse button) is host-owned and
|
|
461
|
+
sits outside the slot container so re-renders never clobber it. -->
|
|
462
|
+
<div id="session-aside" class="session-aside">
|
|
463
|
+
<div id="session-aside-resize" class="session-aside-resize"></div>
|
|
464
|
+
<button id="btn-aside-collapse" class="session-aside-collapse" data-i18n-title="aside.collapse" title="Collapse">
|
|
465
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="15" height="15" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M9 18l6-6-6-6"/></svg>
|
|
466
|
+
</button>
|
|
467
|
+
<div id="ext-slot-session-aside" class="session-aside-slot" data-slot="session.aside"></div>
|
|
468
|
+
</div>
|
|
465
469
|
|
|
466
470
|
<!-- Collapsed-state opener tab -->
|
|
467
|
-
<
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
</svg>
|
|
471
|
+
<div id="workspace-overlay"></div>
|
|
472
|
+
<button id="btn-aside-open" class="session-aside-opener" data-i18n-title="aside.expand" title="Open panel" style="display:none">
|
|
473
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M15 18l-6-6 6-6"/></svg>
|
|
471
474
|
</button>
|
|
472
475
|
</div>
|
|
473
476
|
|
|
@@ -741,7 +744,10 @@
|
|
|
741
744
|
<div id="profile-soul-body" class="profile-markdown"></div>
|
|
742
745
|
<div class="profile-pane-footer">
|
|
743
746
|
<p class="profile-pane-footer-hint" data-i18n="profile.soul.curateHint">Not quite right? Let the assistant curate this through a short conversation.</p>
|
|
744
|
-
<
|
|
747
|
+
<div class="profile-pane-footer-actions">
|
|
748
|
+
<button id="btn-profile-curate-soul" class="btn-profile-update" data-i18n="profile.soul.curateBtn">Have the assistant curate this</button>
|
|
749
|
+
<button id="btn-profile-edit-soul" class="btn-profile-edit" data-i18n="profile.soul.editBtn">Edit directly</button>
|
|
750
|
+
</div>
|
|
745
751
|
</div>
|
|
746
752
|
</section>
|
|
747
753
|
|
|
@@ -757,7 +763,10 @@
|
|
|
757
763
|
<div id="profile-user-body" class="profile-markdown"></div>
|
|
758
764
|
<div class="profile-pane-footer">
|
|
759
765
|
<p class="profile-pane-footer-hint" data-i18n="profile.user.curateHint">Changed jobs? Picked up new interests? Let the assistant update your profile.</p>
|
|
760
|
-
<
|
|
766
|
+
<div class="profile-pane-footer-actions">
|
|
767
|
+
<button id="btn-profile-curate-user" class="btn-profile-update" data-i18n="profile.user.curateBtn">Have the assistant update this</button>
|
|
768
|
+
<button id="btn-profile-edit-user" class="btn-profile-edit" data-i18n="profile.user.editBtn">Edit directly</button>
|
|
769
|
+
</div>
|
|
761
770
|
</div>
|
|
762
771
|
</section>
|
|
763
772
|
|
|
@@ -797,9 +806,14 @@
|
|
|
797
806
|
<button class="settings-tab" data-tab="ui" data-i18n="settings.tabs.ui">UI</button>
|
|
798
807
|
<button class="settings-tab" data-tab="general" data-i18n="settings.tabs.general">General</button>
|
|
799
808
|
<button class="settings-tab" data-tab="about" data-i18n="settings.tabs.about">About</button>
|
|
809
|
+
<!-- Extension tab slot: extensions add custom settings tabs here (button needs data-tab="<id>"). -->
|
|
810
|
+
<span id="ext-slot-settings-tabs" data-slot="settings.tabs"></span>
|
|
800
811
|
</div>
|
|
801
812
|
|
|
802
813
|
<div id="settings-body">
|
|
814
|
+
<!-- Extension tab-content slot: matching panels go here (root needs data-tab-content="<id>"). -->
|
|
815
|
+
<span id="ext-slot-settings-body" data-slot="settings.body"></span>
|
|
816
|
+
|
|
803
817
|
|
|
804
818
|
<!-- ══ Tab: Models ══ -->
|
|
805
819
|
<div class="settings-tab-content active" data-tab-content="models">
|
|
@@ -934,22 +948,24 @@
|
|
|
934
948
|
</div>
|
|
935
949
|
<p class="settings-section-desc" data-i18n="settings.backup.desc">Back up your ~/.clacky directory (config, skills, memories, tasks, sessions). Regenerable caches and logs are excluded.</p>
|
|
936
950
|
|
|
937
|
-
<div class="backup-auto-
|
|
938
|
-
<
|
|
939
|
-
<
|
|
940
|
-
|
|
951
|
+
<div class="backup-auto-card">
|
|
952
|
+
<div class="backup-auto-row">
|
|
953
|
+
<label class="toggle-switch">
|
|
954
|
+
<input type="checkbox" id="backup-auto-toggle">
|
|
955
|
+
<span class="toggle-slider"></span>
|
|
956
|
+
</label>
|
|
957
|
+
<span class="backup-auto-label" data-i18n="settings.backup.autoLabel">Automatic backup</span>
|
|
958
|
+
<span class="backup-auto-hint" data-i18n="settings.backup.autoHint">Daily at 03:00, keeps the latest 7</span>
|
|
959
|
+
</div>
|
|
960
|
+
|
|
961
|
+
<label class="backup-option backup-option-nested">
|
|
962
|
+
<input type="checkbox" id="backup-include-sessions">
|
|
963
|
+
<span data-i18n="settings.backup.includeSessions">Include session history (larger archive)</span>
|
|
941
964
|
</label>
|
|
942
|
-
<span class="backup-auto-label" data-i18n="settings.backup.autoLabel">Automatic backup</span>
|
|
943
|
-
<span class="backup-auto-hint" data-i18n="settings.backup.autoHint">Daily at 03:00, keeps the latest 7</span>
|
|
944
965
|
</div>
|
|
945
966
|
|
|
946
|
-
<label class="backup-option">
|
|
947
|
-
<input type="checkbox" id="backup-include-sessions">
|
|
948
|
-
<span data-i18n="settings.backup.includeSessions">Include session history (larger archive)</span>
|
|
949
|
-
</label>
|
|
950
|
-
|
|
951
967
|
<div class="backup-actions">
|
|
952
|
-
<button id="btn-backup-now" class="btn-settings-action" data-i18n="settings.backup.runNow"
|
|
968
|
+
<button id="btn-backup-now" class="btn-settings-action" data-i18n="settings.backup.runNow">Download backup (full snapshot)</button>
|
|
953
969
|
<span id="backup-status" class="model-test-result"></span>
|
|
954
970
|
</div>
|
|
955
971
|
</section>
|
|
@@ -1097,6 +1113,7 @@
|
|
|
1097
1113
|
</div>
|
|
1098
1114
|
<div class="modal-body">
|
|
1099
1115
|
<input type="hidden" id="model-modal-index" value="-1">
|
|
1116
|
+
<input type="hidden" id="model-modal-source-id" value="">
|
|
1100
1117
|
|
|
1101
1118
|
<label class="model-field" id="model-modal-provider-field">
|
|
1102
1119
|
<span class="field-label" data-i18n="settings.models.field.provider">Provider</span>
|
|
@@ -1263,9 +1280,9 @@
|
|
|
1263
1280
|
</div>
|
|
1264
1281
|
|
|
1265
1282
|
<!-- Secondary path: manual key entry, collapsed by default -->
|
|
1266
|
-
<
|
|
1267
|
-
<summary id="setup-manual-summary" data-i18n="onboard.manual.toggle">Configure manually with your own API key</summary>
|
|
1283
|
+
<button id="setup-manual-toggle" class="setup-manual-toggle-btn" data-i18n="onboard.manual.toggle">Configure manually with your own API key</button>
|
|
1268
1284
|
|
|
1285
|
+
<div id="setup-manual-section" style="display:none">
|
|
1269
1286
|
<div class="setup-field">
|
|
1270
1287
|
<label class="setup-label" data-i18n="onboard.key.provider">Provider</label>
|
|
1271
1288
|
<div class="custom-select-wrapper" id="setup-provider-wrapper">
|
|
@@ -1319,7 +1336,7 @@
|
|
|
1319
1336
|
</div>
|
|
1320
1337
|
</div>
|
|
1321
1338
|
|
|
1322
|
-
<div class="setup-docs-hint" style="font-size:0.75rem;margin-top:
|
|
1339
|
+
<div class="setup-docs-hint" style="font-size:0.75rem;margin-top:8px;margin-bottom:10px;text-align:left;">
|
|
1323
1340
|
<span style="color:var(--muted,#6b7280);" data-i18n="onboard.key.docsGuide.question">New to AI keys?</span>
|
|
1324
1341
|
<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>
|
|
1325
1342
|
</div>
|
|
@@ -1330,7 +1347,7 @@
|
|
|
1330
1347
|
<button id="setup-btn-back" class="setup-back-btn" data-i18n="onboard.key.btn.back">← Back</button>
|
|
1331
1348
|
<button id="setup-btn-test" class="setup-submit-btn" data-i18n="onboard.key.btn.test">Test & Continue →</button>
|
|
1332
1349
|
</div>
|
|
1333
|
-
</
|
|
1350
|
+
</div>
|
|
1334
1351
|
</div>
|
|
1335
1352
|
|
|
1336
1353
|
</div>
|
|
@@ -1395,6 +1412,10 @@
|
|
|
1395
1412
|
<div id="modal-overlay" class="modal-overlay" style="display:none">
|
|
1396
1413
|
<div class="modal-box sm">
|
|
1397
1414
|
<div id="modal-message" class="modal-confirm-message"></div>
|
|
1415
|
+
<label id="modal-skip-label" style="display:none;align-items:center;gap:.5rem;font-size:.82rem;margin-bottom:.5rem;cursor:pointer">
|
|
1416
|
+
<input type="checkbox" id="modal-skip-cb">
|
|
1417
|
+
<span id="modal-skip-text"></span>
|
|
1418
|
+
</label>
|
|
1398
1419
|
<div class="modal-actions">
|
|
1399
1420
|
<button id="modal-no" class="btn-secondary" data-i18n="modal.no">No</button>
|
|
1400
1421
|
<button id="modal-yes" class="btn-primary" data-i18n="modal.yes">Yes</button>
|
|
@@ -1441,38 +1462,68 @@
|
|
|
1441
1462
|
|
|
1442
1463
|
<div id="tooltip" style="display:none"></div>
|
|
1443
1464
|
|
|
1444
|
-
<script src="/
|
|
1465
|
+
<script src="/vendor/codemirror/codemirror.min.js"></script>
|
|
1466
|
+
<script src="/components/code-editor.js"></script>
|
|
1467
|
+
<script src="/vendor/marked/marked.min.js"></script>
|
|
1445
1468
|
<script src="/vendor/hljs/highlight.min.js"></script>
|
|
1446
1469
|
<script src="/vendor/katex/katex.min.js"></script>
|
|
1447
1470
|
<script src="/vendor/katex/auto-render.min.js"></script>
|
|
1448
1471
|
<script src="/utils.js"></script>
|
|
1472
|
+
<script src="/core/ext.js"></script>
|
|
1473
|
+
<script src="/core/aside.js"></script>
|
|
1449
1474
|
<script src="/i18n.js"></script>
|
|
1450
1475
|
<script src="/auth.js"></script>
|
|
1451
1476
|
<script src="/theme.js"></script>
|
|
1452
|
-
<script src="/notify.js"></script>
|
|
1477
|
+
<script src="/components/notify.js"></script>
|
|
1453
1478
|
<script src="/ws.js"></script>
|
|
1454
1479
|
<script src="/ws-dispatcher.js"></script>
|
|
1455
1480
|
<script src="/sessions.js"></script>
|
|
1456
|
-
<script src="/workspace.js"></script>
|
|
1457
|
-
<script src="/
|
|
1458
|
-
<script src="/
|
|
1481
|
+
<script src="/features/workspace/store.js"></script>
|
|
1482
|
+
<script src="/features/workspace/view.js"></script>
|
|
1483
|
+
<script src="/components/datepicker.js"></script>
|
|
1484
|
+
<script src="/features/tasks/store.js"></script>
|
|
1485
|
+
<script src="/features/tasks/view.js"></script>
|
|
1486
|
+
<script src="/features/skills/store.js"></script>
|
|
1487
|
+
<script src="/features/skills/view.js"></script>
|
|
1488
|
+
<script src="/features/channels/store.js"></script>
|
|
1489
|
+
<script src="/features/channels/view.js"></script>
|
|
1459
1490
|
<script src="/skills.js"></script>
|
|
1460
|
-
<script src="/
|
|
1461
|
-
<script src="/mcp.js"></script>
|
|
1462
|
-
<script src="/backup.js"></script>
|
|
1463
|
-
<script src="/
|
|
1491
|
+
<script src="/features/mcp/store.js"></script>
|
|
1492
|
+
<script src="/features/mcp/view.js"></script>
|
|
1493
|
+
<script src="/features/backup/store.js"></script>
|
|
1494
|
+
<script src="/features/backup/view.js"></script>
|
|
1495
|
+
<script src="/features/model-tester/store.js"></script>
|
|
1496
|
+
<script src="/features/model-tester/view.js"></script>
|
|
1464
1497
|
<script src="/settings.js"></script>
|
|
1465
|
-
<script src="/billing.js"></script>
|
|
1466
|
-
<script src="/
|
|
1467
|
-
<script src="/
|
|
1468
|
-
<script src="/
|
|
1469
|
-
<script src="/
|
|
1470
|
-
<script src="/
|
|
1471
|
-
<script src="/
|
|
1472
|
-
<script src="/
|
|
1498
|
+
<script src="/features/billing/store.js"></script>
|
|
1499
|
+
<script src="/features/billing/view.js"></script>
|
|
1500
|
+
<script src="/components/onboard.js"></script>
|
|
1501
|
+
<script src="/features/brand/store.js"></script>
|
|
1502
|
+
<script src="/features/brand/view.js"></script>
|
|
1503
|
+
<script src="/features/creator/store.js"></script>
|
|
1504
|
+
<script src="/features/creator/view.js"></script>
|
|
1505
|
+
<script src="/features/trash/store.js"></script>
|
|
1506
|
+
<script src="/features/trash/view.js"></script>
|
|
1507
|
+
<script src="/features/profile/store.js"></script>
|
|
1508
|
+
<script src="/features/profile/view.js"></script>
|
|
1509
|
+
<script src="/features/version/store.js"></script>
|
|
1510
|
+
<script src="/features/version/view.js"></script>
|
|
1511
|
+
<script src="/components/sidebar.js"></script>
|
|
1473
1512
|
<script src="/vendor/qrcode/qrcode.min.js"></script>
|
|
1474
|
-
<script src="/share.js"></script>
|
|
1513
|
+
<script src="/features/share/store.js"></script>
|
|
1514
|
+
<script src="/features/share/view.js"></script>
|
|
1475
1515
|
<script src="/app.js"></script>
|
|
1476
|
-
|
|
1516
|
+
{{EXT_SCRIPTS}}
|
|
1517
|
+
<script>
|
|
1518
|
+
Tooltip.init();
|
|
1519
|
+
// Render every host-declared slot once extensions have registered.
|
|
1520
|
+
// Each [data-slot] element is a named injection point; renderSlot isolates
|
|
1521
|
+
// failing extensions so a crash degrades only that slot.
|
|
1522
|
+
(function () {
|
|
1523
|
+
document.querySelectorAll("[data-slot]").forEach(function (el) {
|
|
1524
|
+
Clacky.ext.renderSlot(el.getAttribute("data-slot"), el, {});
|
|
1525
|
+
});
|
|
1526
|
+
})();
|
|
1527
|
+
</script>
|
|
1477
1528
|
</body>
|
|
1478
1529
|
</html>
|