claude-code-kanban 4.26.0 → 4.28.0-rc.1
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/README.md +68 -44
- package/cli.js +235 -7
- package/lib/claude-dir.js +1 -1
- package/lib/dispatch-groups.js +93 -0
- package/lib/dispatch.js +171 -0
- package/lib/folder-dialog.js +91 -0
- package/lib/inline-assets.js +1 -1
- package/lib/net-guard.js +20 -3
- package/lib/parsers.js +113 -0
- package/lib/scratch-files.js +47 -0
- package/lib/session-events.js +22 -2
- package/lib/terminal.js +555 -0
- package/package.json +14 -3
- package/plugin/plugins/claude-code-kanban/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/claude-code-kanban/monitors.json +6 -0
- package/plugin/plugins/claude-code-kanban/scripts/approval-gate.sh +34 -2
- package/plugin/plugins/claude-code-kanban/scripts/postman.js +7 -2
- package/plugin/plugins/claude-code-kanban/skills/kanban-dispatch/SKILL.md +23 -0
- package/public/app.js +2250 -214
- package/public/index.html +155 -14
- package/public/style.css +1048 -132
- package/public/sw.js +2 -1
- package/public/themes.css +84 -80
- package/server.js +647 -91
- package/skill-guides/dispatch.md +72 -0
package/public/index.html
CHANGED
|
@@ -5,6 +5,11 @@
|
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
6
6
|
<title>CC Kanban</title>
|
|
7
7
|
<link rel="icon" type="image/svg+xml" href="data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 32 32'%3E%3Crect width='32' height='32' rx='6' fill='%231a1a1a'/%3E%3Crect x='4' y='6' width='7' height='20' rx='2' fill='%23e8927c'/%3E%3Crect x='13' y='6' width='7' height='14' rx='2' fill='%23e8927c'/%3E%3Crect x='22' y='6' width='7' height='8' rx='2' fill='%23e8927c'/%3E%3C/svg%3E">
|
|
8
|
+
<!-- Chrome uses the SVG only in the tab strip; app windows, shortcuts and the
|
|
9
|
+
history list need a raster icon or they fall back to /favicon.ico and then to
|
|
10
|
+
whatever icon localhost was last seen with, which is a sibling app's. -->
|
|
11
|
+
<link rel="icon" type="image/png" sizes="192x192" href="/icons/icon-192.png">
|
|
12
|
+
<link rel="icon" type="image/png" sizes="512x512" href="/icons/icon-512.png">
|
|
8
13
|
<link rel="manifest" href="/manifest.json">
|
|
9
14
|
<meta name="theme-color" content="#101114" media="(prefers-color-scheme: dark)">
|
|
10
15
|
<meta name="theme-color" content="#e8e6e3" media="(prefers-color-scheme: light)">
|
|
@@ -16,24 +21,35 @@
|
|
|
16
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">
|
|
17
22
|
<link rel="stylesheet" href="/style.css">
|
|
18
23
|
<link rel="stylesheet" href="/themes.css">
|
|
19
|
-
<script defer src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
|
|
20
|
-
<script defer src="https://cdn.jsdelivr.net/npm/dompurify@3/dist/purify.min.js"></script>
|
|
21
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github-dark.min.css" id="hljs-theme-dark">
|
|
22
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/styles/github.min.css" id="hljs-theme-light" disabled>
|
|
23
|
-
<script defer src="https://cdn.jsdelivr.net/gh/highlightjs/cdn-release@11/build/highlight.min.js"></script>
|
|
24
|
-
<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>
|
|
25
30
|
<script>window.__STORAGE_NS__ = null;</script>
|
|
26
31
|
<script defer src="/app.js"></script>
|
|
27
32
|
</head>
|
|
28
|
-
<body>
|
|
33
|
+
<body class="booting">
|
|
29
34
|
<div id="offline-overlay" class="offline-overlay">
|
|
30
35
|
<div class="offline-card">
|
|
31
|
-
<
|
|
32
|
-
<
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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>
|
|
37
53
|
<h2>Server Not Running</h2>
|
|
38
54
|
<p>The dashboard needs the Claude Code Kanban server to stream live task data. Start it with:</p>
|
|
39
55
|
<code>npx claude-code-kanban</code>
|
|
@@ -47,6 +63,7 @@
|
|
|
47
63
|
<aside class="sidebar">
|
|
48
64
|
<header class="sidebar-header">
|
|
49
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>
|
|
50
67
|
<button id="sidebar-toggle" class="sidebar-toggle-btn" onclick="toggleSidebar()" title="Toggle sidebar" aria-label="Toggle sidebar">
|
|
51
68
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
52
69
|
<path d="M15 18l-6-6 6-6"/>
|
|
@@ -140,7 +157,12 @@
|
|
|
140
157
|
</button>
|
|
141
158
|
</div>
|
|
142
159
|
</div>
|
|
143
|
-
<div id="sessions-list" class="sessions-list"
|
|
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>
|
|
144
166
|
</div>
|
|
145
167
|
|
|
146
168
|
<div class="sidebar-footer" id="sidebar-footer"></div>
|
|
@@ -149,6 +171,23 @@
|
|
|
149
171
|
|
|
150
172
|
<!-- Main -->
|
|
151
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>
|
|
152
191
|
<div id="no-session" class="empty-state">
|
|
153
192
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
|
|
154
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"/>
|
|
@@ -169,6 +208,11 @@
|
|
|
169
208
|
</div>
|
|
170
209
|
<span id="progress-percent" class="progress-text">0%</span>
|
|
171
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>
|
|
172
216
|
<button id="message-toggle" class="icon-btn" onclick="toggleMessagePanel()" title="Session log (L)" aria-label="Toggle session log">
|
|
173
217
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
174
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"/>
|
|
@@ -245,6 +289,22 @@
|
|
|
245
289
|
<div id="completed-tasks" class="column-tasks" role="list" data-status="completed" ondragover="onColumnDragOver(event)" ondragleave="onColumnDragLeave(event)" ondrop="onColumnDrop(event)"></div>
|
|
246
290
|
</div>
|
|
247
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>
|
|
248
308
|
<div id="agent-footer" class="agent-footer">
|
|
249
309
|
<div class="agent-footer-header" onclick="toggleAgentFooter()">
|
|
250
310
|
<span id="agent-footer-label">Agents</span>
|
|
@@ -623,6 +683,87 @@
|
|
|
623
683
|
</div>
|
|
624
684
|
</div>
|
|
625
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
|
+
|
|
626
767
|
<div id="session-picker-modal" class="modal-overlay top-aligned" onclick="closeSessionPicker()">
|
|
627
768
|
<div class="modal session-picker" onclick="event.stopPropagation()">
|
|
628
769
|
<input type="text" id="session-picker-input" class="form-input sp-input" placeholder="Jump to session..." autocomplete="off" spellcheck="false">
|