claude-code-kanban 4.27.0 → 4.28.0

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.
package/public/index.html CHANGED
@@ -21,24 +21,35 @@
21
21
  <link href="https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Playfair+Display:wght@400;500;600&display=swap" rel="stylesheet">
22
22
  <link rel="stylesheet" href="/style.css">
23
23
  <link rel="stylesheet" href="/themes.css">
24
- <script defer src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
25
- <script defer src="https://cdn.jsdelivr.net/npm/dompurify@3/dist/purify.min.js"></script>
26
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github-dark.min.css" id="hljs-theme-dark">
27
- <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css" id="hljs-theme-light" disabled>
28
- <script defer src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js"></script>
29
- <script defer src="https://cdn.jsdelivr.net/npm/mermaid/dist/mermaid.min.js"></script>
24
+ <script defer src="https://cdn.jsdelivr.net/npm/marked@15.0.12/marked.min.js" integrity="sha384-948ahk4ZmxYVYOc+rxN1H2gM1EJ2Duhp7uHtZ4WSLkV4Vtx5MUqnV+l7u9B+jFv+" crossorigin="anonymous"></script>
25
+ <script defer src="https://cdn.jsdelivr.net/npm/dompurify@3.4.16/dist/purify.min.js" integrity="sha384-a7SzOxErzJ3ZpQz0zJ32d67dSitNzPcbfybc/ykU9KJhMgZkwqfSxlhhdJRS+XGL" crossorigin="anonymous"></script>
26
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.12.0/build/styles/github-dark.min.css" integrity="sha384-wH75j6z1lH97ZOpMOInqhgKzFkAInZPPSPlZpYKYTOqsaizPvhQZmAtLcPKXpLyH" crossorigin="anonymous" id="hljs-theme-dark">
27
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.12.0/build/styles/github.min.css" integrity="sha384-eFTL69TLRZTkNfYZOLM+G04821K1qZao/4QLJbet1pP4tcF+fdXq/9CdqAbWRl/L" crossorigin="anonymous" id="hljs-theme-light" disabled>
28
+ <script defer src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11.12.0/build/highlight.min.js" integrity="sha384-wjfDDhOPPdjtva8vWBhWeVprSpmxisEu5aYT3q1JyACqXpdKpo3PWZTMVq24MBix" crossorigin="anonymous"></script>
29
+ <script defer src="https://cdn.jsdelivr.net/npm/mermaid@12.0.0/dist/mermaid.min.js" integrity="sha384-xzghz1GQ5u9HCpVskeDPqMsdogD1yvuMQbEK53+wi+G70+6J1AG0L2cfi9PHjDWI" crossorigin="anonymous"></script>
30
30
  <script>window.__STORAGE_NS__ = null;</script>
31
31
  <script defer src="/app.js"></script>
32
32
  </head>
33
- <body>
33
+ <body class="booting">
34
34
  <div id="offline-overlay" class="offline-overlay">
35
35
  <div class="offline-card">
36
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
37
- <rect width="512" height="512" rx="96" fill="#1a1a1a"/>
38
- <rect x="64" y="96" width="112" height="320" rx="32" fill="#e8927c"/>
39
- <rect x="208" y="96" width="112" height="224" rx="32" fill="#e8927c"/>
40
- <rect x="352" y="96" width="112" height="128" rx="32" fill="#e8927c"/>
41
- </svg>
36
+ <div class="clawd-sleep" aria-hidden="true">
37
+ <svg class="clawd clawd-asleep" viewBox="1 0 16 10" shape-rendering="crispEdges">
38
+ <rect x="3" y="0" width="12" height="2"/>
39
+ <rect x="3" y="2" width="2" height="2"/>
40
+ <rect x="5" y="2" width="1" height="1"/>
41
+ <rect x="6" y="2" width="6" height="2"/>
42
+ <rect x="12" y="2" width="1" height="1"/>
43
+ <rect x="13" y="2" width="2" height="2"/>
44
+ <rect x="1" y="4" width="16" height="2"/>
45
+ <rect x="3" y="6" width="12" height="2"/>
46
+ <rect x="4" y="8" width="1" height="2"/>
47
+ <rect x="6" y="8" width="1" height="2"/>
48
+ <rect x="11" y="8" width="1" height="2"/>
49
+ <rect x="13" y="8" width="1" height="2"/>
50
+ </svg>
51
+ <span class="clawd-zzz">z</span>
52
+ </div>
42
53
  <h2>Server Not Running</h2>
43
54
  <p>The dashboard needs the Claude Code Kanban server to stream live task data. Start it with:</p>
44
55
  <code>npx claude-code-kanban</code>
@@ -52,6 +63,7 @@
52
63
  <aside class="sidebar">
53
64
  <header class="sidebar-header">
54
65
  <div id="activity-chips" class="activity-chips"></div>
66
+ <button id="new-session-btn" class="new-session-pill" onclick="openNewSession()" title="New session (Ctrl+Alt+N)" hidden>+ New</button>
55
67
  <button id="sidebar-toggle" class="sidebar-toggle-btn" onclick="toggleSidebar()" title="Toggle sidebar" aria-label="Toggle sidebar">
56
68
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
57
69
  <path d="M15 18l-6-6 6-6"/>
@@ -145,7 +157,12 @@
145
157
  </button>
146
158
  </div>
147
159
  </div>
148
- <div id="sessions-list" class="sessions-list"></div>
160
+ <div id="sessions-list" class="sessions-list" aria-busy="true">
161
+ <div class="session-skeleton"><span></span><span></span></div>
162
+ <div class="session-skeleton"><span></span><span></span></div>
163
+ <div class="session-skeleton"><span></span><span></span></div>
164
+ <div class="session-skeleton"><span></span><span></span></div>
165
+ </div>
149
166
  </div>
150
167
 
151
168
  <div class="sidebar-footer" id="sidebar-footer"></div>
@@ -154,6 +171,23 @@
154
171
 
155
172
  <!-- Main -->
156
173
  <main class="main">
174
+ <div class="boot-splash" aria-hidden="true">
175
+ <svg class="clawd clawd-jump" viewBox="1 0 16 10" shape-rendering="crispEdges">
176
+ <g id="clawd-shape">
177
+ <rect x="3" y="0" width="12" height="2"/>
178
+ <rect x="3" y="2" width="2" height="2"/>
179
+ <rect x="6" y="2" width="6" height="2"/>
180
+ <rect x="13" y="2" width="2" height="2"/>
181
+ <rect x="1" y="4" width="16" height="2"/>
182
+ <rect x="3" y="6" width="12" height="2"/>
183
+ <rect x="4" y="8" width="1" height="2"/>
184
+ <rect x="6" y="8" width="1" height="2"/>
185
+ <rect x="11" y="8" width="1" height="2"/>
186
+ <rect x="13" y="8" width="1" height="2"/>
187
+ </g>
188
+ </svg>
189
+ <p id="boot-verb">Clawding…</p>
190
+ </div>
157
191
  <div id="no-session" class="empty-state">
158
192
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
159
193
  <path d="M9 5H7a2 2 0 00-2 2v12a2 2 0 002 2h10a2 2 0 002-2V7a2 2 0 00-2-2h-2M9 5a2 2 0 002 2h2a2 2 0 002-2M9 5a2 2 0 012-2h2a2 2 0 012 2"/>
@@ -174,6 +208,11 @@
174
208
  </div>
175
209
  <span id="progress-percent" class="progress-text">0%</span>
176
210
  </div>
211
+ <button id="terminal-toggle" class="icon-btn" onclick="event.shiftKey ? openTerminalManager() : toggleTerminal()" title="Show / hide terminal (Ctrl+`) · Focus (Alt+`) · End (Alt+Shift+`) · Shift+click or Ctrl+Shift+` for all terminals" aria-label="Toggle terminal" style="display: none;">
212
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
213
+ <polyline points="4 17 10 11 4 5"/><line x1="12" y1="19" x2="20" y2="19"/>
214
+ </svg>
215
+ </button>
177
216
  <button id="message-toggle" class="icon-btn" onclick="toggleMessagePanel()" title="Session log (L)" aria-label="Toggle session log">
178
217
  <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
179
218
  <path d="M21 15a2 2 0 0 1-2 2H7l-4 4V5a2 2 0 0 1 2-2h14a2 2 0 0 1 2 2z"/>
@@ -250,6 +289,22 @@
250
289
  <div id="completed-tasks" class="column-tasks" role="list" data-status="completed" ondragover="onColumnDragOver(event)" ondragleave="onColumnDragLeave(event)" ondrop="onColumnDrop(event)"></div>
251
290
  </div>
252
291
  </div>
292
+ <div id="terminal-pane" class="terminal-pane">
293
+ <div class="terminal-bar">
294
+ <span id="terminal-status" class="terminal-status"></span>
295
+ <button class="icon-btn" onclick="endTerminalSession()" title="End session (Alt+Shift+`)" aria-label="End terminal session">
296
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
297
+ <rect x="6" y="6" width="12" height="12" rx="1"/>
298
+ </svg>
299
+ </button>
300
+ </div>
301
+ <div id="terminal-prompt" class="terminal-prompt"></div>
302
+ <div id="terminal-boot" class="terminal-boot" aria-hidden="true">
303
+ <svg class="clawd clawd-jump" viewBox="1 0 16 10" shape-rendering="crispEdges"><use href="#clawd-shape"/></svg>
304
+ <p id="terminal-boot-verb"></p>
305
+ </div>
306
+ <div id="terminal-host" class="terminal-host"></div>
307
+ </div>
253
308
  <div id="agent-footer" class="agent-footer">
254
309
  <div class="agent-footer-header" onclick="toggleAgentFooter()">
255
310
  <span id="agent-footer-label">Agents</span>
@@ -628,6 +683,87 @@
628
683
  </div>
629
684
  </div>
630
685
 
686
+ <div id="terminal-manager-modal" class="modal-overlay" onclick="closeTerminalManager()">
687
+ <div class="modal terminal-manager-modal" onclick="event.stopPropagation()">
688
+ <div class="modal-header">
689
+ <h3 class="modal-title">Terminals</h3>
690
+ <button class="modal-close" aria-label="Close dialog" onclick="closeTerminalManager()">
691
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>
692
+ </button>
693
+ </div>
694
+ <div class="modal-body" id="terminal-manager-body"></div>
695
+ <div class="modal-footer terminal-manager-footer">
696
+ <span id="terminal-manager-count" class="terminal-manager-count"></span>
697
+ <button id="terminal-manager-end-all" class="btn btn-secondary terminal-manager-end" onclick="endAllTerminals()">End all</button>
698
+ </div>
699
+ </div>
700
+ </div>
701
+
702
+ <div id="new-session-modal" class="modal-overlay top-aligned" onclick="closeNewSession()">
703
+ <div class="modal new-session-modal" onclick="event.stopPropagation()" role="dialog" aria-labelledby="ns-title">
704
+ <div class="modal-header">
705
+ <h3 class="modal-title" id="ns-title">New session</h3>
706
+ <button class="modal-close" aria-label="Close dialog" onclick="closeNewSession()">
707
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>
708
+ </button>
709
+ </div>
710
+ <div class="modal-body ns-body">
711
+ <div class="ns-row">
712
+ <label class="ns-label" for="ns-folder">Folder</label>
713
+ <div class="ns-field ns-folder-field">
714
+ <div class="ns-inline">
715
+ <input type="text" id="ns-folder" class="form-input" placeholder="Type to find a project" autocomplete="off" spellcheck="false" role="combobox" aria-expanded="false" aria-controls="ns-folder-list">
716
+ <button type="button" id="ns-browse" class="btn btn-secondary ns-browse" onclick="browseNewSessionFolder()">Browse…</button>
717
+ </div>
718
+ <div id="ns-folder-list" class="ns-dropdown" role="listbox" hidden></div>
719
+ </div>
720
+ </div>
721
+ <div class="ns-row ns-extra">
722
+ <label class="ns-label" for="ns-name">Name</label>
723
+ <div class="ns-field">
724
+ <input type="text" id="ns-name" class="form-input" placeholder="Optional" maxlength="80" autocomplete="off" spellcheck="false">
725
+ </div>
726
+ </div>
727
+ <div class="ns-row ns-extra">
728
+ <label class="ns-label" for="ns-prompt">Prompt</label>
729
+ <div class="ns-field ns-prompt-field">
730
+ <textarea id="ns-prompt" class="form-input" rows="4" placeholder="Optional. Sent as the first message."></textarea>
731
+ <button type="button" id="ns-mic" class="ns-mic" title="Dictate" aria-label="Dictate" aria-pressed="false" hidden>
732
+ <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="2" width="6" height="12" rx="3"/><path d="M5 10a7 7 0 0 0 14 0M12 17v5"/></svg>
733
+ </button>
734
+ </div>
735
+ </div>
736
+ <div class="ns-row ns-extra">
737
+ <span class="ns-label">Worktree</span>
738
+ <div class="ns-field">
739
+ <div class="ns-inline">
740
+ <label class="ns-check"><input type="checkbox" id="ns-wt"> New worktree</label>
741
+ <input type="text" id="ns-wt-name" class="form-input" placeholder="Name (optional)" maxlength="64" autocomplete="off" spellcheck="false" disabled aria-label="Worktree name">
742
+ </div>
743
+ <div id="ns-wt-hint" class="ns-hint" hidden></div>
744
+ </div>
745
+ </div>
746
+ <div class="ns-row ns-extra">
747
+ <label class="ns-label" for="ns-model">Model</label>
748
+ <div class="ns-field">
749
+ <select id="ns-model" class="form-input">
750
+ <option value="">Default</option>
751
+ <option value="fable">Fable</option>
752
+ <option value="opus">Opus</option>
753
+ <option value="sonnet">Sonnet</option>
754
+ <option value="haiku">Haiku</option>
755
+ </select>
756
+ </div>
757
+ </div>
758
+ <div id="ns-error" class="ns-error" hidden></div>
759
+ </div>
760
+ <div class="modal-footer ns-footer">
761
+ <button type="button" class="btn btn-secondary" onclick="closeNewSession()">Cancel</button>
762
+ <button type="button" id="ns-start" class="btn btn-primary" onclick="startNewSession()" disabled>Start</button>
763
+ </div>
764
+ </div>
765
+ </div>
766
+
631
767
  <div id="session-picker-modal" class="modal-overlay top-aligned" onclick="closeSessionPicker()">
632
768
  <div class="modal session-picker" onclick="event.stopPropagation()">
633
769
  <input type="text" id="session-picker-input" class="form-input sp-input" placeholder="Jump to session..." autocomplete="off" spellcheck="false">