openclacky 1.3.6 → 1.3.8
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/lib/clacky/agent/hook_manager.rb +10 -1
- data/lib/clacky/agent/system_prompt_builder.rb +1 -1
- data/lib/clacky/agent.rb +17 -3
- data/lib/clacky/agent_profile.rb +124 -53
- data/lib/clacky/billing/billing_store.rb +3 -2
- data/lib/clacky/brand_config.rb +309 -6
- data/lib/clacky/cli.rb +4 -57
- data/lib/clacky/default_extensions/coding/agents/coding/avatar.png +0 -0
- data/lib/clacky/default_extensions/coding/ext.yml +19 -0
- data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/avatar.png +0 -0
- data/lib/clacky/default_extensions/ext-studio/agents/ext-developer/system_prompt.md +95 -0
- data/lib/clacky/default_extensions/ext-studio/api/handler.rb +254 -0
- data/lib/clacky/default_extensions/ext-studio/ext.yml +33 -0
- data/lib/clacky/default_extensions/ext-studio/panels/studio/view.js +1288 -0
- data/lib/clacky/default_extensions/ext-studio/skills/ext-debug/SKILL.md +71 -0
- data/lib/clacky/default_extensions/ext-studio/skills/ext-publish/SKILL.md +74 -0
- data/lib/clacky/default_extensions/ext-studio/skills/ext-scaffold/SKILL.md +65 -0
- data/lib/clacky/default_extensions/general/agents/general/avatar.png +0 -0
- data/lib/clacky/default_extensions/general/ext.yml +19 -0
- data/lib/clacky/default_extensions/git/ext.yml +12 -0
- data/lib/clacky/{default_agents/_panels/git/panel.js → default_extensions/git/panels/git/view.js} +4 -5
- data/lib/clacky/default_extensions/meeting/{handler.rb → api/handler.rb} +78 -26
- data/lib/clacky/default_extensions/meeting/ext.yml +15 -0
- data/lib/clacky/default_extensions/meeting/{meeting.js → panels/meeting/view.js} +266 -90
- data/lib/clacky/default_extensions/meeting/skills/meeting-summarizer/SKILL.md +2 -1
- data/lib/clacky/default_extensions/time_machine/ext.yml +12 -0
- data/lib/clacky/{default_agents/_panels/time_machine/panel.js → default_extensions/time_machine/panels/time_machine/view.js} +58 -47
- data/lib/clacky/default_skills/channel-manager/discord_setup.rb +1 -1
- data/lib/clacky/default_skills/extend-openclacky/SKILL.md +83 -18
- data/lib/clacky/{api_extension.rb → extension/api_extension.rb} +27 -11
- data/lib/clacky/extension/api_loader.rb +136 -0
- data/lib/clacky/extension/cli_commands.rb +226 -0
- data/lib/clacky/{server/api_extension_dispatcher.rb → extension/dispatcher.rb} +22 -9
- data/lib/clacky/extension/hook_loader.rb +77 -0
- data/lib/clacky/extension/loader.rb +489 -0
- data/lib/clacky/extension/packager.rb +226 -0
- data/lib/clacky/{patch_loader.rb → extension/patch_loader.rb} +45 -0
- data/lib/clacky/extension/scaffold/template_renderer.rb +64 -0
- data/lib/clacky/extension/scaffold/templates/full/README.md.erb +48 -0
- data/lib/clacky/extension/scaffold/templates/full/agents/designer.md +5 -0
- data/lib/clacky/extension/scaffold/templates/full/api/handler.rb.erb +16 -0
- data/lib/clacky/extension/scaffold/templates/full/channels/noop.rb.erb +40 -0
- data/lib/clacky/extension/scaffold/templates/full/ext.yml.erb +41 -0
- data/lib/clacky/extension/scaffold/templates/full/hooks/audit.rb +9 -0
- data/lib/clacky/extension/scaffold/templates/full/panels/dashboard/view.js.erb +194 -0
- data/lib/clacky/extension/scaffold/templates/full/patches/audit.rb +15 -0
- data/lib/clacky/extension/scaffold/templates/full/skills/__slug__-skill/SKILL.md.erb +8 -0
- data/lib/clacky/extension/scaffold/templates/hello/api/handler.rb.erb +9 -0
- data/lib/clacky/extension/scaffold/templates/hello/ext.yml.erb +12 -0
- data/lib/clacky/extension/scaffold/templates/hello/panels/hello/view.js.erb +31 -0
- data/lib/clacky/extension/scaffold.rb +55 -0
- data/lib/clacky/extension/verifier.rb +196 -0
- data/lib/clacky/identity.rb +70 -0
- data/lib/clacky/locales/en.rb +19 -1
- data/lib/clacky/locales/zh.rb +19 -1
- data/lib/clacky/platform_http_client.rb +18 -15
- data/lib/clacky/server/channel/extension_adapter_loader.rb +32 -0
- data/lib/clacky/server/channel.rb +6 -0
- data/lib/clacky/server/http_server.rb +439 -146
- data/lib/clacky/server/session_registry.rb +9 -2
- data/lib/clacky/shell_hook_loader.rb +266 -22
- data/lib/clacky/skill_loader.rb +28 -1
- data/lib/clacky/ui2/components/welcome_banner.rb +1 -1
- data/lib/clacky/ui2/ui_controller.rb +9 -6
- data/lib/clacky/utils/workspace_rules.rb +2 -2
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +1034 -675
- data/lib/clacky/web/app.js +63 -15
- data/lib/clacky/web/auth.js +2 -0
- data/lib/clacky/web/components/notify.js +2 -0
- data/lib/clacky/web/components/sidebar.js +1 -5
- data/lib/clacky/web/core/ext.js +432 -89
- data/lib/clacky/web/features/backup/store.js +1 -0
- data/lib/clacky/web/features/backup/view.js +0 -1
- data/lib/clacky/web/features/brand/view.js +13 -5
- data/lib/clacky/web/features/extensions/store.js +184 -0
- data/lib/clacky/web/features/extensions/view.js +390 -0
- data/lib/clacky/web/features/new-session/store.js +199 -0
- data/lib/clacky/web/features/new-session/view.js +619 -0
- data/lib/clacky/web/features/share/view.js +63 -14
- data/lib/clacky/web/features/skills/store.js +3 -1
- data/lib/clacky/web/features/skills/view.js +1 -1
- data/lib/clacky/web/features/tasks/view.js +12 -0
- data/lib/clacky/web/features/trash/store.js +24 -6
- data/lib/clacky/web/features/trash/view.js +48 -12
- data/lib/clacky/web/features/workspace/store.js +2 -0
- data/lib/clacky/web/features/workspace/view.js +0 -1
- data/lib/clacky/web/i18n.js +152 -106
- data/lib/clacky/web/index.html +172 -190
- data/lib/clacky/web/sessions.js +67 -272
- data/lib/clacky/web/settings.js +1 -1
- data/lib/clacky/web/skills.js +88 -48
- data/lib/clacky/web/theme.js +5 -0
- data/lib/clacky/web/ws-dispatcher.js +12 -2
- data/lib/clacky/web/ws.js +2 -0
- data/lib/clacky.rb +21 -10
- metadata +52 -21
- data/benchmark/runner.rb +0 -441
- data/lib/clacky/api_extension_loader.rb +0 -168
- data/lib/clacky/default_agents/SOUL.md +0 -3
- data/lib/clacky/default_agents/USER.md +0 -1
- data/lib/clacky/default_agents/coding/profile.yml +0 -5
- data/lib/clacky/default_agents/coding/webui/.gitkeep +0 -0
- data/lib/clacky/default_agents/general/profile.yml +0 -2
- data/lib/clacky/default_extensions/meeting/meta.yml +0 -3
- data/lib/clacky/web/features/creator/store.js +0 -81
- data/lib/clacky/web/features/creator/view.js +0 -380
- /data/lib/clacky/{default_agents → default_extensions/coding/agents}/coding/system_prompt.md +0 -0
- /data/lib/clacky/{default_agents → default_extensions/general/agents}/general/system_prompt.md +0 -0
- /data/lib/clacky/{default_agents/base_prompt.md → prompts/base.md} +0 -0
data/lib/clacky/web/index.html
CHANGED
|
@@ -37,10 +37,10 @@
|
|
|
37
37
|
<span class="header-logo-divider"></span>
|
|
38
38
|
<span class="header-logo" id="header-logo">{{BRAND_NAME}}</span>
|
|
39
39
|
<!-- Owner badge: visible only for creator-tier licenses (user_licensed=true).
|
|
40
|
-
Clicking
|
|
41
|
-
#header-brand onclick (which
|
|
40
|
+
Clicking opens the Extension & Creation workspace. stopPropagation
|
|
41
|
+
prevents the parent #header-brand onclick (which navigates to chat). -->
|
|
42
42
|
<button id="header-owner-badge" class="header-owner-badge" style="display:none"
|
|
43
|
-
onclick="event.stopPropagation();
|
|
43
|
+
onclick="event.stopPropagation(); Clacky.ext.ui.openWorkspace('ext-studio')"
|
|
44
44
|
title="Creator / Owner" data-i18n-title="header.owner.tooltip">OWNER</button>
|
|
45
45
|
</div>
|
|
46
46
|
</div>
|
|
@@ -53,6 +53,14 @@
|
|
|
53
53
|
</div>
|
|
54
54
|
<div id="header-right">
|
|
55
55
|
<span id="ext-slot-header-right" data-slot="header.right"></span>
|
|
56
|
+
<button id="refresh-page-btn" class="theme-toggle-btn" data-i18n-title="header.refresh" title="Refresh" onclick="location.reload()">
|
|
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">
|
|
58
|
+
<path d="M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8"/>
|
|
59
|
+
<path d="M21 3v5h-5"/>
|
|
60
|
+
<path d="M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16"/>
|
|
61
|
+
<path d="M8 16H3v5"/>
|
|
62
|
+
</svg>
|
|
63
|
+
</button>
|
|
56
64
|
<button id="share-toggle-header" class="theme-toggle-btn" data-i18n-title="share.tooltip" title="Share">
|
|
57
65
|
<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">
|
|
58
66
|
<circle cx="18" cy="5" r="3"/>
|
|
@@ -117,25 +125,17 @@
|
|
|
117
125
|
<aside id="sidebar">
|
|
118
126
|
<!-- Sidebar navigation groups -->
|
|
119
127
|
<div id="sidebar-list">
|
|
128
|
+
<!-- TOP nav slot: extensions add first-class workspace entries here.
|
|
129
|
+
Above Sessions — reserved for major extension surfaces. -->
|
|
130
|
+
<div id="ext-slot-sidebar-nav-top" data-slot="sidebar.nav.top"></div>
|
|
131
|
+
|
|
120
132
|
<!-- Chat Group -->
|
|
121
133
|
<div id="chat-section">
|
|
122
|
-
<!-- Header: "Sessions" label + [+
|
|
134
|
+
<!-- Header: "Sessions" label + [+ New] button -->
|
|
123
135
|
<div class="sidebar-divider">
|
|
124
136
|
<span data-i18n="sidebar.chat">Sessions</span>
|
|
125
137
|
<div class="sidebar-divider-actions">
|
|
126
|
-
<
|
|
127
|
-
<button id="btn-new-session-inline" class="btn-split-main" title="New Session" data-i18n="sessions.newSession">+ New Session</button>
|
|
128
|
-
<button id="btn-new-session-arrow" class="btn-split-arrow" title="Options">▾</button>
|
|
129
|
-
<!-- Dropdown -->
|
|
130
|
-
<div id="new-session-dropdown" class="new-session-dropdown" hidden>
|
|
131
|
-
<div class="dropdown-item" id="btn-new-session-modal" data-i18n="sessions.newSessionAdvanced">
|
|
132
|
-
<svg width="10" height="10" viewBox="0 0 16 16" fill="currentColor" style="vertical-align: -1px; margin-right: 5px; opacity: 0.6;">
|
|
133
|
-
<path d="M8 0a.5.5 0 01.5.5v2a.5.5 0 01-1 0v-2A.5.5 0 018 0zm0 13a.5.5 0 01.5.5v2a.5.5 0 01-1 0v-2A.5.5 0 018 13zm8-5a.5.5 0 01-.5.5h-2a.5.5 0 010-1h2a.5.5 0 01.5.5zM3 8a.5.5 0 01-.5.5h-2a.5.5 0 010-1h2A.5.5 0 013 8zm10.657-5.657a.5.5 0 010 .707l-1.414 1.415a.5.5 0 11-.707-.708l1.414-1.414a.5.5 0 01.707 0zm-9.193 9.193a.5.5 0 010 .707L3.05 13.657a.5.5 0 01-.707-.707l1.414-1.414a.5.5 0 01.707 0zm9.193 2.121a.5.5 0 01-.707 0l-1.414-1.414a.5.5 0 01.707-.707l1.414 1.414a.5.5 0 010 .707zM4.464 4.465a.5.5 0 01-.707 0L2.343 3.05a.5.5 0 11.707-.707l1.414 1.414a.5.5 0 010 .708z"/>
|
|
134
|
-
</svg>
|
|
135
|
-
<span data-i18n="sessions.newSessionAdvanced">More Options</span>
|
|
136
|
-
</div>
|
|
137
|
-
</div>
|
|
138
|
-
</div>
|
|
138
|
+
<button id="btn-new-session-inline" class="btn-split-main" title="New Session" data-i18n="sessions.newSession">+ New Session</button>
|
|
139
139
|
</div>
|
|
140
140
|
</div>
|
|
141
141
|
|
|
@@ -154,7 +154,11 @@
|
|
|
154
154
|
<div id="session-list"></div>
|
|
155
155
|
<!-- Load more button rendered dynamically by Sessions.renderList() -->
|
|
156
156
|
</div>
|
|
157
|
-
|
|
157
|
+
|
|
158
|
+
<!-- MAIN nav slot: default landing spot for extension menus. Between
|
|
159
|
+
Sessions and Config so ext entries feel like standard nav items. -->
|
|
160
|
+
<div id="ext-slot-sidebar-nav" data-slot="sidebar.nav"></div>
|
|
161
|
+
|
|
158
162
|
<!-- Config Group -->
|
|
159
163
|
<div id="config-section">
|
|
160
164
|
<div class="sidebar-divider"><span data-i18n="sidebar.config">Config</span></div>
|
|
@@ -203,6 +207,17 @@
|
|
|
203
207
|
</div>
|
|
204
208
|
</div>
|
|
205
209
|
</div>
|
|
210
|
+
<div id="extensions-sidebar-item" class="task-item task-item-summary">
|
|
211
|
+
<div class="task-row">
|
|
212
|
+
<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="task-icon">
|
|
213
|
+
<path d="M20 7h-9"/><path d="M14 17H5"/>
|
|
214
|
+
<circle cx="17" cy="17" r="3"/><circle cx="7" cy="7" r="3"/>
|
|
215
|
+
</svg>
|
|
216
|
+
<div class="task-info">
|
|
217
|
+
<span class="task-name" id="extensions-sidebar-label" data-i18n="sidebar.extensions">Extension Market</span>
|
|
218
|
+
</div>
|
|
219
|
+
</div>
|
|
220
|
+
</div>
|
|
206
221
|
</div>
|
|
207
222
|
</div>
|
|
208
223
|
|
|
@@ -253,27 +268,8 @@
|
|
|
253
268
|
</div>
|
|
254
269
|
</div>
|
|
255
270
|
|
|
256
|
-
<!--
|
|
257
|
-
<div id="
|
|
258
|
-
<div class="sidebar-divider"><span data-i18n="sidebar.creatorSection">Creator</span></div>
|
|
259
|
-
<div id="creator-nav-items">
|
|
260
|
-
<div id="creator-sidebar-item" class="task-item task-item-summary">
|
|
261
|
-
<div class="task-row">
|
|
262
|
-
<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="task-icon">
|
|
263
|
-
<path d="M12 2L2 7l10 5 10-5-10-5z"/>
|
|
264
|
-
<path d="M2 17l10 5 10-5"/>
|
|
265
|
-
<path d="M2 12l10 5 10-5"/>
|
|
266
|
-
</svg>
|
|
267
|
-
<div class="task-info">
|
|
268
|
-
<span class="task-name" id="creator-sidebar-label" data-i18n="sidebar.creator">Creator Hub</span>
|
|
269
|
-
</div>
|
|
270
|
-
</div>
|
|
271
|
-
</div>
|
|
272
|
-
</div>
|
|
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>
|
|
271
|
+
<!-- BOTTOM nav slot: end-of-sidebar spot for secondary ext entries. -->
|
|
272
|
+
<div id="ext-slot-sidebar-nav-bottom" data-slot="sidebar.nav.bottom"></div>
|
|
277
273
|
</div>
|
|
278
274
|
|
|
279
275
|
<!-- Bottom Settings -->
|
|
@@ -303,39 +299,108 @@
|
|
|
303
299
|
<!-- ── MAIN ─────────────────────────────────────────────────────────── -->
|
|
304
300
|
<main id="main">
|
|
305
301
|
|
|
306
|
-
<!-- Extension workspace slot: extensions mount entirely new custom panels here.
|
|
307
|
-
|
|
302
|
+
<!-- Extension workspace slot: extensions mount entirely new custom panels here.
|
|
303
|
+
Hidden by default; the Router shows it (display:block) when handling
|
|
304
|
+
the `ext-workspace` view and re-renders it on every navigate(). -->
|
|
305
|
+
<div id="ext-slot-main-workspace" data-slot="main.workspace" style="display:none"></div>
|
|
308
306
|
|
|
309
307
|
|
|
310
308
|
<!-- Onboard panel: kept as empty shell (soul_setup auto-launches /onboard session) -->
|
|
311
309
|
<div id="onboard-panel" style="display:none"></div>
|
|
312
310
|
|
|
313
|
-
<!--
|
|
314
|
-
<div id="welcome" class="centered">
|
|
315
|
-
<div class="
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
<
|
|
326
|
-
<
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
<
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
311
|
+
<!-- New Session page (default landing view; hash: #new or empty) -->
|
|
312
|
+
<div id="welcome" class="centered new-session-page">
|
|
313
|
+
<div class="new-session-inner">
|
|
314
|
+
<div class="new-session-body">
|
|
315
|
+
<h2 class="new-session-title" data-i18n="sessions.new.title">Start a new session</h2>
|
|
316
|
+
<p class="new-session-subtitle" data-i18n="sessions.new.subtitle">Pick who you want to chat with, then type your first message.</p>
|
|
317
|
+
|
|
318
|
+
<div id="new-session-agents" class="new-session-agents"></div>
|
|
319
|
+
|
|
320
|
+
<!-- Panels the selected agent exposes (filled when an agent is picked) -->
|
|
321
|
+
<div id="new-session-agent-panels" class="new-session-agent-panels" style="display:none"></div>
|
|
322
|
+
|
|
323
|
+
<div class="new-session-advanced-wrap">
|
|
324
|
+
<button id="new-session-toggle-advanced" class="new-session-advanced-toggle" type="button" aria-expanded="false">
|
|
325
|
+
<span data-i18n="sessions.new.moreOptions">More options</span>
|
|
326
|
+
<svg class="new-session-advanced-caret" width="10" height="10" viewBox="0 0 16 16" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 6l4 4 4-4"/></svg>
|
|
327
|
+
</button>
|
|
328
|
+
|
|
329
|
+
<div id="new-session-advanced" class="new-session-advanced" hidden>
|
|
330
|
+
<div class="new-session-field">
|
|
331
|
+
<label class="new-session-label" data-i18n="sessions.modal.name">Session Name</label>
|
|
332
|
+
<input id="new-session-name" type="text" class="new-session-input"
|
|
333
|
+
data-i18n-placeholder="sessions.modal.name.placeholder"
|
|
334
|
+
placeholder="Leave empty to auto-generate">
|
|
335
|
+
</div>
|
|
336
|
+
|
|
337
|
+
<div class="new-session-field">
|
|
338
|
+
<label class="new-session-label" data-i18n="sessions.modal.model">Model</label>
|
|
339
|
+
<select id="new-session-model" class="new-session-select"></select>
|
|
340
|
+
</div>
|
|
341
|
+
|
|
342
|
+
<div class="new-session-field">
|
|
343
|
+
<label class="new-session-label" data-i18n="sessions.modal.directory">Working Directory</label>
|
|
344
|
+
<div class="new-session-input-row">
|
|
345
|
+
<input id="new-session-directory" type="text" class="new-session-input"
|
|
346
|
+
data-i18n-placeholder="sessions.modal.directory.placeholder"
|
|
347
|
+
placeholder="~/workspace/my-project">
|
|
348
|
+
<button id="new-session-browse-btn" type="button" class="new-session-browse-btn"
|
|
349
|
+
data-i18n-title="sessions.modal.directory.browse" title="Browse…" aria-label="Browse">
|
|
350
|
+
<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="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"/></svg>
|
|
351
|
+
</button>
|
|
352
|
+
</div>
|
|
353
|
+
</div>
|
|
354
|
+
|
|
355
|
+
<div id="new-session-init-project-field" class="new-session-checkbox-field" style="display:none">
|
|
356
|
+
<label class="new-session-checkbox-label">
|
|
357
|
+
<input id="new-session-init-project" type="checkbox" class="new-session-checkbox">
|
|
358
|
+
<span data-i18n="sessions.modal.initProject">Initialize full-stack project (/new)</span>
|
|
359
|
+
</label>
|
|
360
|
+
</div>
|
|
361
|
+
</div>
|
|
362
|
+
</div>
|
|
363
|
+
</div><!-- /.new-session-body -->
|
|
364
|
+
|
|
365
|
+
<div class="new-session-composer">
|
|
366
|
+
<!-- Skill autocomplete dropdown (shown when user types /xxx) -->
|
|
367
|
+
<div id="ns-skill-autocomplete" class="skill-autocomplete" style="display:none" role="listbox" aria-label="Skills">
|
|
368
|
+
<div class="skill-ac-header-row">
|
|
369
|
+
<div class="skill-ac-left">
|
|
370
|
+
<div class="skill-ac-title" data-i18n="sidebar.skills">Skills</div>
|
|
371
|
+
<label class="skill-ac-filter-toggle">
|
|
372
|
+
<input type="checkbox" id="ns-chk-ac-show-system-skills">
|
|
373
|
+
<span class="skill-ac-toggle-track"></span>
|
|
374
|
+
<span class="skill-ac-filter-label" data-i18n="skills.filter.showSystemShort">System</span>
|
|
375
|
+
</label>
|
|
376
|
+
</div>
|
|
377
|
+
</div>
|
|
378
|
+
<div id="ns-skill-autocomplete-list"></div>
|
|
379
|
+
</div>
|
|
380
|
+
<!-- Attachment preview strip (hidden when empty) -->
|
|
381
|
+
<div id="ns-image-preview-strip" style="display:none"></div>
|
|
382
|
+
<div id="ns-input-bar" class="new-session-input-bar">
|
|
383
|
+
<input type="file" id="ns-file-input" accept="*/*" multiple style="display:none">
|
|
384
|
+
<button id="ns-btn-attach" type="button" class="new-session-composer-btn"
|
|
385
|
+
title="Attach file (image, pdf, docx, md, tar.gz…) — drag & drop / Ctrl+V also work">
|
|
386
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
387
|
+
<path d="M21.44 11.05l-9.19 9.19a6 6 0 0 1-8.49-8.49l9.19-9.19a4 4 0 0 1 5.66 5.66L9.41 17.41a2 2 0 0 1-2.83-2.83l8.49-8.48"/>
|
|
388
|
+
</svg>
|
|
389
|
+
</button>
|
|
390
|
+
<button id="ns-btn-slash" type="button" class="new-session-composer-btn" title="Insert skill command (/)">
|
|
391
|
+
<span>/</span>
|
|
392
|
+
</button>
|
|
393
|
+
<textarea id="new-session-input"
|
|
394
|
+
class="new-session-textarea"
|
|
395
|
+
rows="1"
|
|
396
|
+
data-i18n-placeholder="chat.input.placeholder"
|
|
397
|
+
placeholder="Message… (Enter to send, Shift+Enter for newline)"></textarea>
|
|
398
|
+
<button id="new-session-send" class="new-session-send" type="button" title="Send message" disabled>
|
|
399
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2.5" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
|
|
400
|
+
</button>
|
|
401
|
+
</div>
|
|
402
|
+
</div>
|
|
337
403
|
</div>
|
|
338
|
-
<button id="btn-welcome-new" class="ce-blank" data-i18n="welcome.btn">Start a blank session</button>
|
|
339
404
|
</div>
|
|
340
405
|
|
|
341
406
|
<!-- Scheduled Tasks list panel (shown when user clicks "Scheduled Tasks") -->
|
|
@@ -370,6 +435,8 @@
|
|
|
370
435
|
<div id="new-message-banner" class="new-message-banner" style="display:none">
|
|
371
436
|
<span data-i18n="chat.newMessageHint">New messages ↓</span>
|
|
372
437
|
</div>
|
|
438
|
+
<!-- Composer slot: agent-scoped controls above the session info bar. -->
|
|
439
|
+
<div id="ext-slot-session-composer" class="session-composer" data-slot="session.composer"></div>
|
|
373
440
|
<!-- Session info bar — mirrors CLI bottom status bar -->
|
|
374
441
|
<div id="session-info-bar" style="display:none">
|
|
375
442
|
<!-- Order: status | id | dir | model | mode | tasks | cost -->
|
|
@@ -414,8 +481,7 @@
|
|
|
414
481
|
</span>
|
|
415
482
|
</div>
|
|
416
483
|
|
|
417
|
-
<!-- Composer slot:
|
|
418
|
-
<div id="ext-slot-session-composer" class="session-composer" data-slot="session.composer"></div>
|
|
484
|
+
<!-- Composer slot: moved above the session info bar. -->
|
|
419
485
|
<div id="input-area">
|
|
420
486
|
<div id="ws-disconnect-hint" style="display:none"></div>
|
|
421
487
|
<!-- Skill autocomplete dropdown (shown when user types /xxx) -->
|
|
@@ -474,67 +540,6 @@
|
|
|
474
540
|
</button>
|
|
475
541
|
</div>
|
|
476
542
|
|
|
477
|
-
<!-- ── CREATOR PANEL ─────────────────────────────────────────────── -->
|
|
478
|
-
<div id="creator-panel" style="display:none">
|
|
479
|
-
<div id="creator-body">
|
|
480
|
-
<div class="skills-page-header">
|
|
481
|
-
<h2 class="skills-page-title" data-i18n="creator.title">Creator Hub</h2>
|
|
482
|
-
<p class="skills-page-subtitle" data-i18n="creator.subtitle">Manage and publish your skills to the platform</p>
|
|
483
|
-
</div>
|
|
484
|
-
|
|
485
|
-
<!-- Promo banner: shown only to non-licensed users -->
|
|
486
|
-
<div id="creator-promo-banner" style="display:none">
|
|
487
|
-
<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">
|
|
488
|
-
<polygon points="12 2 15.09 8.26 22 9.27 17 14.14 18.18 21.02 12 17.77 5.82 21.02 7 14.14 2 9.27 8.91 8.26 12 2"/>
|
|
489
|
-
</svg>
|
|
490
|
-
<span data-i18n="creator.promo.text">Publish your skills & build your own brand on OpenClacky.</span>
|
|
491
|
-
<a href="https://www.openclacky.com/creators" target="_blank" data-i18n="creator.promo.link">Learn more →</a>
|
|
492
|
-
</div>
|
|
493
|
-
|
|
494
|
-
<!-- Section 1: Cloud skills (published) -->
|
|
495
|
-
<div class="creator-section-block" id="creator-cloud-block">
|
|
496
|
-
<div class="creator-section-header">
|
|
497
|
-
<span class="creator-section-label" data-i18n="creator.section.cloud">Cloud Skills</span>
|
|
498
|
-
<span class="creator-section-hint" data-i18n="creator.section.cloudHint">Published to the platform</span>
|
|
499
|
-
</div>
|
|
500
|
-
<div id="creator-cloud-list" class="creator-list"></div>
|
|
501
|
-
<!-- Lock overlay: shown only to non-licensed users -->
|
|
502
|
-
<div id="creator-cloud-lock" style="display:none">
|
|
503
|
-
<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">
|
|
504
|
-
<rect x="3" y="11" width="18" height="11" rx="2" ry="2"/><path d="M7 11V7a5 5 0 0 1 10 0v4"/>
|
|
505
|
-
</svg>
|
|
506
|
-
<span data-i18n="creator.cloud.locked">Brand license required to publish cloud skills.</span>
|
|
507
|
-
</div>
|
|
508
|
-
</div>
|
|
509
|
-
|
|
510
|
-
<!-- Section 2: Local skills (ready to publish) -->
|
|
511
|
-
<div class="creator-section-block" id="creator-local-block">
|
|
512
|
-
<div class="creator-section-header">
|
|
513
|
-
<span class="creator-section-label" data-i18n="creator.section.local">Local Skills</span>
|
|
514
|
-
<span class="creator-section-hint" data-i18n="creator.section.localHint">Ready to publish</span>
|
|
515
|
-
</div>
|
|
516
|
-
<div id="creator-local-list" class="creator-list"></div>
|
|
517
|
-
</div>
|
|
518
|
-
|
|
519
|
-
<!-- Section 3: Create new skill -->
|
|
520
|
-
<div class="creator-section-block" id="creator-new-block">
|
|
521
|
-
<div class="creator-section-header">
|
|
522
|
-
<span class="creator-section-label" data-i18n="creator.section.new">Create New Skill</span>
|
|
523
|
-
</div>
|
|
524
|
-
<div id="creator-new-entry" class="creator-new-card">
|
|
525
|
-
<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">
|
|
526
|
-
<path d="M12 2a10 10 0 1 0 10 10A10 10 0 0 0 12 2z"/><path d="M12 8v8"/><path d="M8 12h8"/>
|
|
527
|
-
</svg>
|
|
528
|
-
<span data-i18n="creator.newSkill.label">Create a new skill with /skill-creator</span>
|
|
529
|
-
<svg class="creator-new-arrow" xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
530
|
-
<path d="M5 12h14"/><path d="M12 5l7 7-7 7"/>
|
|
531
|
-
</svg>
|
|
532
|
-
</div>
|
|
533
|
-
</div>
|
|
534
|
-
|
|
535
|
-
</div>
|
|
536
|
-
</div>
|
|
537
|
-
|
|
538
543
|
<!-- ── SKILLS PANEL ───────────────────────────────────────────────── -->
|
|
539
544
|
<div id="skills-panel" style="display:none">
|
|
540
545
|
<div id="skills-body">
|
|
@@ -648,6 +653,29 @@
|
|
|
648
653
|
</div>
|
|
649
654
|
</div>
|
|
650
655
|
|
|
656
|
+
<!-- ── EXTENSIONS PANEL — public extension marketplace (browse only) ─── -->
|
|
657
|
+
<div id="extensions-panel" style="display:none">
|
|
658
|
+
<div id="extensions-body">
|
|
659
|
+
<div class="channels-page-header">
|
|
660
|
+
<h2 class="channels-page-title" data-i18n="extensions.title">Extension Market</h2>
|
|
661
|
+
<p class="channels-page-subtitle" data-i18n="extensions.subtitle">Browse extensions that creators can bundle into brand packages. Extensions are delivered with your license — there is no direct download here.</p>
|
|
662
|
+
</div>
|
|
663
|
+
|
|
664
|
+
<div class="extensions-toolbar">
|
|
665
|
+
<select id="extensions-sort" class="extensions-sort">
|
|
666
|
+
<option value="newest" data-i18n="extensions.sort.newest">Newest</option>
|
|
667
|
+
<option value="updated" data-i18n="extensions.sort.updated">Recently updated</option>
|
|
668
|
+
<option value="downloads" data-i18n="extensions.sort.downloads">Most downloaded</option>
|
|
669
|
+
</select>
|
|
670
|
+
<input type="text" id="extensions-search-input" class="extensions-search" placeholder="Search extensions…" />
|
|
671
|
+
</div>
|
|
672
|
+
|
|
673
|
+
<div id="extensions-warning" class="brand-skills-warning" style="display:none"></div>
|
|
674
|
+
<div id="extensions-list"></div>
|
|
675
|
+
</div>
|
|
676
|
+
<div id="extensions-detail" class="extension-detail" style="display:none"></div>
|
|
677
|
+
</div>
|
|
678
|
+
|
|
651
679
|
<!-- ── TRASH PANEL — Recently deleted files across all projects ─── -->
|
|
652
680
|
<div id="trash-panel" style="display:none">
|
|
653
681
|
<div id="trash-body">
|
|
@@ -663,30 +691,37 @@
|
|
|
663
691
|
</div>
|
|
664
692
|
</div>
|
|
665
693
|
|
|
694
|
+
<p class="trash-session-hint" id="trash-session-hint" style="display:none" data-i18n="trash.sessionAutoCleanHint">The system keeps the most recent 200 sessions; older ones are moved here.</p>
|
|
695
|
+
|
|
666
696
|
<div class="trash-toolbar">
|
|
697
|
+
<div class="trash-filter-bar" id="trash-filter-bar" style="display:none">
|
|
698
|
+
<button class="trash-filter-chip active" data-filter="all" data-i18n="trash.filterAll">All</button>
|
|
699
|
+
<button class="trash-filter-chip" data-filter="manual" data-i18n="trash.filterManual">Regular</button>
|
|
700
|
+
<button class="trash-filter-chip" data-filter="cron" data-i18n="trash.filterCron">Scheduled</button>
|
|
701
|
+
</div>
|
|
667
702
|
<span class="trash-summary" id="trash-summary"></span>
|
|
668
703
|
<div class="trash-actions">
|
|
669
|
-
<button id="btn-trash-refresh" class="btn-trash-action" title="Refresh">
|
|
704
|
+
<button id="btn-trash-refresh" class="btn-trash-action" data-i18n-title="trash.refresh.tooltip" title="Refresh">
|
|
670
705
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
671
706
|
<path d="M21 2v6h-6"/><path d="M3 12a9 9 0 0 1 15-6.7L21 8"/>
|
|
672
707
|
<path d="M3 22v-6h6"/><path d="M21 12a9 9 0 0 1-15 6.7L3 16"/>
|
|
673
708
|
</svg>
|
|
674
709
|
<span data-i18n="trash.refresh">Refresh</span>
|
|
675
710
|
</button>
|
|
676
|
-
<button id="btn-trash-empty-old" class="btn-trash-action" title="Permanently delete files older than 7 days">
|
|
711
|
+
<button id="btn-trash-empty-old" class="btn-trash-action" data-i18n-title="trash.emptyOld.tooltip" title="Permanently delete files older than 7 days">
|
|
677
712
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
678
713
|
<circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/>
|
|
679
714
|
</svg>
|
|
680
715
|
<span data-i18n="trash.emptyOld">Empty >7 days</span>
|
|
681
716
|
</button>
|
|
682
|
-
<button id="btn-trash-empty-orphans" class="btn-trash-action" title="Permanently delete entries whose original project directory no longer exists (e.g. test temp dirs)">
|
|
717
|
+
<button id="btn-trash-empty-orphans" class="btn-trash-action" data-i18n-title="trash.emptyOrphans.tooltip" title="Permanently delete entries whose original project directory no longer exists (e.g. test temp dirs)">
|
|
683
718
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
684
719
|
<path d="M10.29 3.86L1.82 18a2 2 0 0 0 1.71 3h16.94a2 2 0 0 0 1.71-3L13.71 3.86a2 2 0 0 0-3.42 0z"/>
|
|
685
720
|
<line x1="12" y1="9" x2="12" y2="13"/><line x1="12" y1="17" x2="12.01" y2="17"/>
|
|
686
721
|
</svg>
|
|
687
722
|
<span data-i18n="trash.emptyOrphans">Clean orphans</span>
|
|
688
723
|
</button>
|
|
689
|
-
<button id="btn-trash-empty-all" class="btn-trash-action btn-trash-danger" title="Permanently delete all trashed files">
|
|
724
|
+
<button id="btn-trash-empty-all" class="btn-trash-action btn-trash-danger" data-i18n-title="trash.emptyAll.tooltip" title="Permanently delete all trashed files">
|
|
690
725
|
<svg xmlns="http://www.w3.org/2000/svg" width="13" height="13" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
|
691
726
|
<polyline points="3 6 5 6 21 6"/>
|
|
692
727
|
<path d="M19 6l-1 14a2 2 0 0 1-2 2H8a2 2 0 0 1-2-2L5 6"/>
|
|
@@ -1394,61 +1429,6 @@
|
|
|
1394
1429
|
</div>
|
|
1395
1430
|
</div>
|
|
1396
1431
|
|
|
1397
|
-
<!-- ── NEW SESSION MODAL ─────────────────────────────────────────────────── -->
|
|
1398
|
-
<div id="new-session-modal" class="modal-overlay" style="display:none">
|
|
1399
|
-
<div class="modal-box new-session-modal">
|
|
1400
|
-
<div class="modal-header">
|
|
1401
|
-
<h3 class="modal-title" data-i18n="sessions.modal.title">Create New Session</h3>
|
|
1402
|
-
</div>
|
|
1403
|
-
<div class="modal-body">
|
|
1404
|
-
<div class="modal-field">
|
|
1405
|
-
<label class="modal-label" data-i18n="sessions.modal.agent">Agent</label>
|
|
1406
|
-
<select id="new-session-agent" class="modal-select">
|
|
1407
|
-
<option value="general" data-i18n="sessions.modal.agent.general">General</option>
|
|
1408
|
-
<option value="coding" data-i18n="sessions.modal.agent.coding">Coding</option>
|
|
1409
|
-
</select>
|
|
1410
|
-
</div>
|
|
1411
|
-
|
|
1412
|
-
<div class="modal-field">
|
|
1413
|
-
<label class="modal-label" data-i18n="sessions.modal.name">Session Name</label>
|
|
1414
|
-
<input id="new-session-name" type="text" class="modal-input"
|
|
1415
|
-
data-i18n-placeholder="sessions.modal.name.placeholder"
|
|
1416
|
-
placeholder="Leave empty to auto-generate">
|
|
1417
|
-
</div>
|
|
1418
|
-
|
|
1419
|
-
<div class="modal-field">
|
|
1420
|
-
<label class="modal-label" data-i18n="sessions.modal.model">Model</label>
|
|
1421
|
-
<select id="new-session-model" class="modal-select">
|
|
1422
|
-
<!-- Populated dynamically from configured models -->
|
|
1423
|
-
</select>
|
|
1424
|
-
</div>
|
|
1425
|
-
|
|
1426
|
-
<div class="modal-field">
|
|
1427
|
-
<label class="modal-label" data-i18n="sessions.modal.directory">Working Directory</label>
|
|
1428
|
-
<div class="modal-input-row">
|
|
1429
|
-
<input id="new-session-directory" type="text" class="modal-input"
|
|
1430
|
-
data-i18n-placeholder="sessions.modal.directory.placeholder"
|
|
1431
|
-
placeholder="~/workspace/my-project">
|
|
1432
|
-
<button id="new-session-browse-btn" type="button" class="modal-browse-btn" data-i18n-title="sessions.modal.directory.browse" title="Browse…" aria-label="Browse">
|
|
1433
|
-
<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="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"/></svg>
|
|
1434
|
-
</button>
|
|
1435
|
-
</div>
|
|
1436
|
-
</div>
|
|
1437
|
-
|
|
1438
|
-
<div id="new-session-init-project-field" class="modal-field-checkbox" style="display:none">
|
|
1439
|
-
<label class="modal-checkbox-label">
|
|
1440
|
-
<input id="new-session-init-project" type="checkbox" class="modal-checkbox">
|
|
1441
|
-
<span data-i18n="sessions.modal.initProject">Initialize full-stack project (/new)</span>
|
|
1442
|
-
</label>
|
|
1443
|
-
</div>
|
|
1444
|
-
</div>
|
|
1445
|
-
<div class="modal-footer">
|
|
1446
|
-
<button id="new-session-cancel" class="btn-secondary" data-i18n="modal.cancel">Cancel</button>
|
|
1447
|
-
<button id="new-session-create" class="btn-primary" data-i18n="sessions.modal.create">Create Session</button>
|
|
1448
|
-
</div>
|
|
1449
|
-
</div>
|
|
1450
|
-
</div>
|
|
1451
|
-
|
|
1452
1432
|
<!-- ── CONFIRMATION MODAL ────────────────────────────────────────────────── -->
|
|
1453
1433
|
<div id="modal-overlay" class="modal-overlay" style="display:none">
|
|
1454
1434
|
<div class="modal-box sm">
|
|
@@ -1531,8 +1511,12 @@
|
|
|
1531
1511
|
<script src="/skills.js"></script>
|
|
1532
1512
|
<script src="/features/mcp/store.js"></script>
|
|
1533
1513
|
<script src="/features/mcp/view.js"></script>
|
|
1514
|
+
<script src="/features/extensions/store.js"></script>
|
|
1515
|
+
<script src="/features/extensions/view.js"></script>
|
|
1534
1516
|
<script src="/features/backup/store.js"></script>
|
|
1535
1517
|
<script src="/features/backup/view.js"></script>
|
|
1518
|
+
<script src="/features/new-session/store.js"></script>
|
|
1519
|
+
<script src="/features/new-session/view.js"></script>
|
|
1536
1520
|
<script src="/features/model-tester/store.js"></script>
|
|
1537
1521
|
<script src="/features/model-tester/view.js"></script>
|
|
1538
1522
|
<script src="/settings.js"></script>
|
|
@@ -1541,8 +1525,6 @@
|
|
|
1541
1525
|
<script src="/components/onboard.js"></script>
|
|
1542
1526
|
<script src="/features/brand/store.js"></script>
|
|
1543
1527
|
<script src="/features/brand/view.js"></script>
|
|
1544
|
-
<script src="/features/creator/store.js"></script>
|
|
1545
|
-
<script src="/features/creator/view.js"></script>
|
|
1546
1528
|
<script src="/features/trash/store.js"></script>
|
|
1547
1529
|
<script src="/features/trash/view.js"></script>
|
|
1548
1530
|
<script src="/features/profile/store.js"></script>
|