claude-code-kanban 4.0.0 → 4.2.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/lib/parsers.js +319 -86
- package/package.json +1 -1
- package/plugin/plugins/claude-code-kanban/.claude-plugin/plugin.json +1 -1
- package/plugin/plugins/claude-code-kanban/hooks/hooks.json +10 -0
- package/plugin/plugins/claude-code-kanban/scripts/agent-spy.sh +4 -4
- package/public/app.js +381 -47
- package/public/index.html +25 -0
- package/public/style.css +308 -17
- package/server.js +323 -39
package/public/index.html
CHANGED
|
@@ -527,6 +527,12 @@
|
|
|
527
527
|
<button id="session-info-cost-btn" class="icon-btn" style="display:none" title="Open in Cost" onclick="openCost(_infoModalSessionId)">
|
|
528
528
|
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><circle cx="12" cy="12" r="10"/><path d="M16 8h-6a2 2 0 1 0 0 4h4a2 2 0 1 1 0 4H8"/><path d="M12 18V6"/></svg>
|
|
529
529
|
</button>
|
|
530
|
+
<button id="session-info-marketplace-btn" class="icon-btn" style="display:none" title="Open in Marketplace" onclick="openMarketplaceForInfoModal()">
|
|
531
|
+
<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="M6 2L3 6v14a2 2 0 002 2h14a2 2 0 002-2V6l-3-4z"/><line x1="3" y1="6" x2="21" y2="6"/><path d="M16 10a4 4 0 01-8 0"/></svg>
|
|
532
|
+
</button>
|
|
533
|
+
<button id="session-info-memory-btn" class="icon-btn" style="display:none" title="Open in Memory" onclick="openMemoryForInfoModal()">
|
|
534
|
+
<svg width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><ellipse cx="12" cy="5" rx="9" ry="3"/><path d="M21 12c0 1.66-4 3-9 3s-9-1.34-9-3"/><path d="M3 5v14c0 1.66 4 3 9 3s9-1.34 9-3V5"/></svg>
|
|
535
|
+
</button>
|
|
530
536
|
<button class="modal-close" aria-label="Close dialog" onclick="closeTeamModal()">
|
|
531
537
|
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2">
|
|
532
538
|
<path d="M18 6L6 18M6 6l12 12"/>
|
|
@@ -598,6 +604,25 @@
|
|
|
598
604
|
</div>
|
|
599
605
|
</div>
|
|
600
606
|
|
|
607
|
+
<!-- Loop Wakeups Modal -->
|
|
608
|
+
<div id="loop-modal" class="modal-overlay" onclick="closeLoopModal()">
|
|
609
|
+
<div class="modal plan-modal" onclick="event.stopPropagation()">
|
|
610
|
+
<div class="modal-header">
|
|
611
|
+
<h3 id="loop-modal-title" class="modal-title" style="display:flex;align-items:center;gap:8px;">
|
|
612
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" style="width:18px;height:18px;"><circle cx="12" cy="12" r="10"/><polyline points="12 6 12 12 16 14"/></svg>
|
|
613
|
+
Loop activity
|
|
614
|
+
</h3>
|
|
615
|
+
<button class="modal-close" aria-label="Close dialog" onclick="closeLoopModal()">
|
|
616
|
+
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M18 6L6 18M6 6l12 12"/></svg>
|
|
617
|
+
</button>
|
|
618
|
+
</div>
|
|
619
|
+
<div id="loop-modal-body" class="modal-body" style="overflow-y:auto;flex:0 1 auto;min-height:0;"></div>
|
|
620
|
+
<div class="modal-footer">
|
|
621
|
+
<button class="btn btn-primary" onclick="closeLoopModal()">Close</button>
|
|
622
|
+
</div>
|
|
623
|
+
</div>
|
|
624
|
+
</div>
|
|
625
|
+
|
|
601
626
|
<div id="agent-modal" class="modal-overlay plan-modal-overlay" onclick="closeAgentModal()">
|
|
602
627
|
<div class="modal plan-modal" onclick="event.stopPropagation()">
|
|
603
628
|
<div class="modal-header">
|
package/public/style.css
CHANGED
|
@@ -724,6 +724,12 @@ body::before {
|
|
|
724
724
|
font-weight: 600;
|
|
725
725
|
}
|
|
726
726
|
|
|
727
|
+
.sidebar-footer .footer-limits .footer-limit-reset {
|
|
728
|
+
color: var(--text-tertiary);
|
|
729
|
+
font-weight: 400;
|
|
730
|
+
opacity: 0.75;
|
|
731
|
+
}
|
|
732
|
+
|
|
727
733
|
.sidebar-footer a:hover {
|
|
728
734
|
color: var(--text-secondary);
|
|
729
735
|
}
|
|
@@ -1609,6 +1615,136 @@ body::before {
|
|
|
1609
1615
|
border-color: var(--plan);
|
|
1610
1616
|
}
|
|
1611
1617
|
|
|
1618
|
+
.loop-badge {
|
|
1619
|
+
width: 24px;
|
|
1620
|
+
height: 24px;
|
|
1621
|
+
display: inline-flex;
|
|
1622
|
+
align-items: center;
|
|
1623
|
+
justify-content: center;
|
|
1624
|
+
background: var(--bg-deep);
|
|
1625
|
+
border: 1px solid transparent;
|
|
1626
|
+
border-radius: 4px;
|
|
1627
|
+
color: var(--text-secondary);
|
|
1628
|
+
cursor: pointer;
|
|
1629
|
+
flex-shrink: 0;
|
|
1630
|
+
transition: all 0.15s ease;
|
|
1631
|
+
}
|
|
1632
|
+
|
|
1633
|
+
.loop-badge:hover {
|
|
1634
|
+
border-color: var(--accent, var(--plan));
|
|
1635
|
+
color: var(--accent, var(--plan));
|
|
1636
|
+
}
|
|
1637
|
+
|
|
1638
|
+
.loop-section-title {
|
|
1639
|
+
margin: 14px 0 8px;
|
|
1640
|
+
font-size: 12px;
|
|
1641
|
+
font-weight: 600;
|
|
1642
|
+
text-transform: uppercase;
|
|
1643
|
+
letter-spacing: 0.04em;
|
|
1644
|
+
color: var(--text-secondary);
|
|
1645
|
+
display: flex;
|
|
1646
|
+
align-items: center;
|
|
1647
|
+
gap: 8px;
|
|
1648
|
+
}
|
|
1649
|
+
|
|
1650
|
+
.loop-section-title:first-child {
|
|
1651
|
+
margin-top: 4px;
|
|
1652
|
+
}
|
|
1653
|
+
|
|
1654
|
+
.loop-count {
|
|
1655
|
+
font-size: 11px;
|
|
1656
|
+
font-weight: 500;
|
|
1657
|
+
padding: 1px 6px;
|
|
1658
|
+
border-radius: 10px;
|
|
1659
|
+
background: var(--bg-elevated);
|
|
1660
|
+
color: var(--text-secondary);
|
|
1661
|
+
text-transform: none;
|
|
1662
|
+
letter-spacing: 0;
|
|
1663
|
+
}
|
|
1664
|
+
|
|
1665
|
+
.loop-row {
|
|
1666
|
+
padding: 12px 14px;
|
|
1667
|
+
border: 1px solid var(--border);
|
|
1668
|
+
border-left: 3px solid var(--border);
|
|
1669
|
+
border-radius: 6px;
|
|
1670
|
+
background: var(--bg-elevated);
|
|
1671
|
+
margin-bottom: 10px;
|
|
1672
|
+
display: flex;
|
|
1673
|
+
flex-direction: column;
|
|
1674
|
+
gap: 10px;
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
.loop-row:has(.loop-fire-pending) {
|
|
1678
|
+
border-left-color: var(--accent, var(--plan));
|
|
1679
|
+
}
|
|
1680
|
+
|
|
1681
|
+
.loop-headline {
|
|
1682
|
+
display: flex;
|
|
1683
|
+
align-items: center;
|
|
1684
|
+
gap: 10px;
|
|
1685
|
+
flex-wrap: wrap;
|
|
1686
|
+
font-variant-numeric: tabular-nums;
|
|
1687
|
+
}
|
|
1688
|
+
|
|
1689
|
+
.loop-headline-rel {
|
|
1690
|
+
font-size: 15px;
|
|
1691
|
+
font-weight: 600;
|
|
1692
|
+
}
|
|
1693
|
+
|
|
1694
|
+
.loop-headline-abs {
|
|
1695
|
+
font-size: 12px;
|
|
1696
|
+
color: var(--text-secondary);
|
|
1697
|
+
margin-left: auto;
|
|
1698
|
+
}
|
|
1699
|
+
|
|
1700
|
+
.loop-fire-pending {
|
|
1701
|
+
color: var(--accent, var(--plan));
|
|
1702
|
+
}
|
|
1703
|
+
.loop-fire-fired {
|
|
1704
|
+
color: var(--text-secondary);
|
|
1705
|
+
}
|
|
1706
|
+
.loop-fire-fired .loop-headline-rel {
|
|
1707
|
+
font-weight: 500;
|
|
1708
|
+
}
|
|
1709
|
+
|
|
1710
|
+
.loop-field {
|
|
1711
|
+
display: grid;
|
|
1712
|
+
grid-template-columns: 80px 1fr;
|
|
1713
|
+
gap: 10px;
|
|
1714
|
+
align-items: start;
|
|
1715
|
+
font-size: 13px;
|
|
1716
|
+
line-height: 1.45;
|
|
1717
|
+
}
|
|
1718
|
+
|
|
1719
|
+
.loop-field-label {
|
|
1720
|
+
font-size: 10px;
|
|
1721
|
+
text-transform: uppercase;
|
|
1722
|
+
letter-spacing: 0.06em;
|
|
1723
|
+
color: var(--text-secondary);
|
|
1724
|
+
padding-top: 3px;
|
|
1725
|
+
}
|
|
1726
|
+
|
|
1727
|
+
.loop-field-val {
|
|
1728
|
+
color: var(--text-primary);
|
|
1729
|
+
word-break: break-word;
|
|
1730
|
+
}
|
|
1731
|
+
|
|
1732
|
+
.loop-field-val code {
|
|
1733
|
+
background: var(--bg);
|
|
1734
|
+
padding: 2px 6px;
|
|
1735
|
+
border-radius: 4px;
|
|
1736
|
+
font-family: ui-monospace, SFMono-Regular, Menlo, monospace;
|
|
1737
|
+
font-size: 12px;
|
|
1738
|
+
}
|
|
1739
|
+
|
|
1740
|
+
.loop-foot {
|
|
1741
|
+
font-size: 11px;
|
|
1742
|
+
color: var(--text-secondary);
|
|
1743
|
+
padding-top: 6px;
|
|
1744
|
+
border-top: 1px dashed var(--border);
|
|
1745
|
+
font-variant-numeric: tabular-nums;
|
|
1746
|
+
}
|
|
1747
|
+
|
|
1612
1748
|
/* #endregion */
|
|
1613
1749
|
|
|
1614
1750
|
/* #region OWNER_BADGE */
|
|
@@ -1743,6 +1879,55 @@ body::before {
|
|
|
1743
1879
|
border-top: 1px solid var(--border);
|
|
1744
1880
|
}
|
|
1745
1881
|
|
|
1882
|
+
.info-grid {
|
|
1883
|
+
display: grid;
|
|
1884
|
+
grid-template-columns: auto 1fr auto;
|
|
1885
|
+
gap: 6px 12px;
|
|
1886
|
+
align-items: center;
|
|
1887
|
+
margin-bottom: 16px;
|
|
1888
|
+
}
|
|
1889
|
+
.info-row-actions {
|
|
1890
|
+
display: flex;
|
|
1891
|
+
gap: 4px;
|
|
1892
|
+
opacity: 0.3;
|
|
1893
|
+
transition: opacity 0.15s ease;
|
|
1894
|
+
}
|
|
1895
|
+
.info-grid:hover .info-row-actions {
|
|
1896
|
+
opacity: 1;
|
|
1897
|
+
}
|
|
1898
|
+
.info-row-actions button {
|
|
1899
|
+
display: inline-flex;
|
|
1900
|
+
align-items: center;
|
|
1901
|
+
justify-content: center;
|
|
1902
|
+
width: 22px;
|
|
1903
|
+
height: 22px;
|
|
1904
|
+
padding: 0;
|
|
1905
|
+
background: var(--bg-elevated);
|
|
1906
|
+
border: 1px solid var(--border);
|
|
1907
|
+
border-radius: 4px;
|
|
1908
|
+
color: var(--text-secondary);
|
|
1909
|
+
cursor: pointer;
|
|
1910
|
+
transition:
|
|
1911
|
+
background 0.1s ease,
|
|
1912
|
+
border-color 0.1s ease,
|
|
1913
|
+
color 0.1s ease;
|
|
1914
|
+
}
|
|
1915
|
+
.info-row-actions button:hover {
|
|
1916
|
+
background: var(--bg-hover);
|
|
1917
|
+
border-color: var(--accent);
|
|
1918
|
+
color: var(--accent-text);
|
|
1919
|
+
}
|
|
1920
|
+
.info-row-actions button svg {
|
|
1921
|
+
width: 12px;
|
|
1922
|
+
height: 12px;
|
|
1923
|
+
display: block;
|
|
1924
|
+
}
|
|
1925
|
+
@media (hover: none) {
|
|
1926
|
+
.info-row-actions {
|
|
1927
|
+
opacity: 1;
|
|
1928
|
+
}
|
|
1929
|
+
}
|
|
1930
|
+
|
|
1746
1931
|
/* #endregion */
|
|
1747
1932
|
|
|
1748
1933
|
/* #region OWNER_FILTER */
|
|
@@ -2107,6 +2292,11 @@ body::before {
|
|
|
2107
2292
|
opacity: 1;
|
|
2108
2293
|
color: var(--text-primary);
|
|
2109
2294
|
}
|
|
2295
|
+
.agent-tab-copy svg {
|
|
2296
|
+
width: 14px;
|
|
2297
|
+
height: 14px;
|
|
2298
|
+
display: block;
|
|
2299
|
+
}
|
|
2110
2300
|
.toast {
|
|
2111
2301
|
position: fixed;
|
|
2112
2302
|
bottom: 16px;
|
|
@@ -2222,6 +2412,59 @@ body::before {
|
|
|
2222
2412
|
border-radius: 3px;
|
|
2223
2413
|
font-size: 11px;
|
|
2224
2414
|
}
|
|
2415
|
+
.user-attach-chips {
|
|
2416
|
+
display: flex;
|
|
2417
|
+
gap: 4px;
|
|
2418
|
+
flex-wrap: wrap;
|
|
2419
|
+
margin-top: 4px;
|
|
2420
|
+
}
|
|
2421
|
+
.user-attach-chip {
|
|
2422
|
+
font-size: 10px;
|
|
2423
|
+
padding: 1px 6px;
|
|
2424
|
+
border-radius: 10px;
|
|
2425
|
+
background: var(--bg-hover);
|
|
2426
|
+
color: var(--text-secondary);
|
|
2427
|
+
}
|
|
2428
|
+
.msg-text-muted {
|
|
2429
|
+
color: var(--text-secondary);
|
|
2430
|
+
font-size: 12px;
|
|
2431
|
+
}
|
|
2432
|
+
.user-attach-section {
|
|
2433
|
+
margin-top: 12px;
|
|
2434
|
+
padding-top: 10px;
|
|
2435
|
+
border-top: 1px solid var(--border);
|
|
2436
|
+
}
|
|
2437
|
+
.user-attach-label {
|
|
2438
|
+
font-size: 11px;
|
|
2439
|
+
color: var(--text-secondary);
|
|
2440
|
+
margin-bottom: 6px;
|
|
2441
|
+
text-transform: uppercase;
|
|
2442
|
+
letter-spacing: 0.5px;
|
|
2443
|
+
}
|
|
2444
|
+
.user-attach-images {
|
|
2445
|
+
display: flex;
|
|
2446
|
+
flex-wrap: wrap;
|
|
2447
|
+
gap: 8px;
|
|
2448
|
+
}
|
|
2449
|
+
.user-attach-image {
|
|
2450
|
+
max-width: 100%;
|
|
2451
|
+
max-height: 480px;
|
|
2452
|
+
border-radius: 4px;
|
|
2453
|
+
border: 1px solid var(--border);
|
|
2454
|
+
background: var(--bg-hover);
|
|
2455
|
+
}
|
|
2456
|
+
.user-attach-toolresult {
|
|
2457
|
+
margin-top: 6px;
|
|
2458
|
+
}
|
|
2459
|
+
.user-attach-toolresult > summary {
|
|
2460
|
+
cursor: pointer;
|
|
2461
|
+
font-size: 12px;
|
|
2462
|
+
color: var(--text-secondary);
|
|
2463
|
+
padding: 4px 0;
|
|
2464
|
+
}
|
|
2465
|
+
.user-attach-toolresult > summary code {
|
|
2466
|
+
font-size: 10px;
|
|
2467
|
+
}
|
|
2225
2468
|
.msg-item.msg-system {
|
|
2226
2469
|
border-left: 3px solid var(--border);
|
|
2227
2470
|
}
|
|
@@ -2241,6 +2484,52 @@ body::before {
|
|
|
2241
2484
|
border-left: 3px solid var(--border);
|
|
2242
2485
|
opacity: 0.75;
|
|
2243
2486
|
}
|
|
2487
|
+
.msg-item.msg-waiting {
|
|
2488
|
+
border-left: 3px solid var(--warning, #f5a623);
|
|
2489
|
+
background: color-mix(in srgb, var(--warning, #f5a623) 8%, transparent);
|
|
2490
|
+
animation: msg-waiting-pulse 2s ease-in-out infinite;
|
|
2491
|
+
cursor: pointer;
|
|
2492
|
+
}
|
|
2493
|
+
.msg-waiting-discard {
|
|
2494
|
+
flex-shrink: 0;
|
|
2495
|
+
background: none;
|
|
2496
|
+
border: none;
|
|
2497
|
+
color: var(--text-muted);
|
|
2498
|
+
cursor: pointer;
|
|
2499
|
+
padding: 2px;
|
|
2500
|
+
opacity: 0;
|
|
2501
|
+
transition: opacity 0.15s;
|
|
2502
|
+
margin-left: auto;
|
|
2503
|
+
align-self: flex-start;
|
|
2504
|
+
line-height: 0;
|
|
2505
|
+
}
|
|
2506
|
+
.msg-item.msg-waiting:hover .msg-waiting-discard {
|
|
2507
|
+
opacity: 0.6;
|
|
2508
|
+
}
|
|
2509
|
+
.msg-waiting-discard:hover {
|
|
2510
|
+
/* biome-ignore lint/complexity/noImportantStyles: override parent hover opacity */
|
|
2511
|
+
opacity: 1 !important;
|
|
2512
|
+
color: var(--danger, #e54d4d);
|
|
2513
|
+
}
|
|
2514
|
+
.msg-waiting .msg-text {
|
|
2515
|
+
font-weight: 600;
|
|
2516
|
+
}
|
|
2517
|
+
.msg-waiting-preview {
|
|
2518
|
+
font-size: 11px;
|
|
2519
|
+
opacity: 0.85;
|
|
2520
|
+
margin-top: 2px;
|
|
2521
|
+
white-space: pre-wrap;
|
|
2522
|
+
word-break: break-word;
|
|
2523
|
+
}
|
|
2524
|
+
@keyframes msg-waiting-pulse {
|
|
2525
|
+
0%,
|
|
2526
|
+
100% {
|
|
2527
|
+
background: color-mix(in srgb, var(--warning, #f5a623) 8%, transparent);
|
|
2528
|
+
}
|
|
2529
|
+
50% {
|
|
2530
|
+
background: color-mix(in srgb, var(--warning, #f5a623) 16%, transparent);
|
|
2531
|
+
}
|
|
2532
|
+
}
|
|
2244
2533
|
.msg-item.msg-idle .msg-icon {
|
|
2245
2534
|
width: 12px;
|
|
2246
2535
|
height: 12px;
|
|
@@ -2531,8 +2820,26 @@ body::before {
|
|
|
2531
2820
|
border: 1px solid var(--border);
|
|
2532
2821
|
}
|
|
2533
2822
|
.agent-badge {
|
|
2534
|
-
|
|
2823
|
+
display: inline-flex;
|
|
2824
|
+
align-items: center;
|
|
2825
|
+
justify-content: center;
|
|
2535
2826
|
cursor: default;
|
|
2827
|
+
line-height: 1;
|
|
2828
|
+
flex-shrink: 0;
|
|
2829
|
+
color: var(--text-secondary);
|
|
2830
|
+
}
|
|
2831
|
+
.agent-badge-waiting {
|
|
2832
|
+
color: var(--warning);
|
|
2833
|
+
animation: agent-badge-pulse 1.6s ease-in-out infinite;
|
|
2834
|
+
}
|
|
2835
|
+
@keyframes agent-badge-pulse {
|
|
2836
|
+
0%,
|
|
2837
|
+
100% {
|
|
2838
|
+
opacity: 0.65;
|
|
2839
|
+
}
|
|
2840
|
+
50% {
|
|
2841
|
+
opacity: 1;
|
|
2842
|
+
}
|
|
2536
2843
|
}
|
|
2537
2844
|
|
|
2538
2845
|
.linked-docs-badge,
|
|
@@ -3502,22 +3809,6 @@ pre.mermaid svg {
|
|
|
3502
3809
|
color: var(--accent);
|
|
3503
3810
|
}
|
|
3504
3811
|
|
|
3505
|
-
.marketplace-btn {
|
|
3506
|
-
color: #888;
|
|
3507
|
-
cursor: pointer;
|
|
3508
|
-
display: inline-flex;
|
|
3509
|
-
align-items: center;
|
|
3510
|
-
transition:
|
|
3511
|
-
color 0.15s,
|
|
3512
|
-
filter 0.15s;
|
|
3513
|
-
border-radius: 3px;
|
|
3514
|
-
}
|
|
3515
|
-
|
|
3516
|
-
.marketplace-btn:hover {
|
|
3517
|
-
color: var(--accent);
|
|
3518
|
-
filter: drop-shadow(0 0 3px var(--accent));
|
|
3519
|
-
}
|
|
3520
|
-
|
|
3521
3812
|
.project-group-header .group-count {
|
|
3522
3813
|
font-weight: 400;
|
|
3523
3814
|
color: var(--text-muted);
|