clay-server 2.10.0 → 2.11.0-beta.10
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/bin/cli.js +157 -1
- package/lib/daemon.js +341 -2
- package/lib/dm.js +135 -0
- package/lib/os-users.js +301 -0
- package/lib/pages.js +36 -0
- package/lib/project.js +386 -67
- package/lib/public/app.js +675 -17
- package/lib/public/css/admin.css +99 -10
- package/lib/public/css/filebrowser.css +22 -0
- package/lib/public/css/icon-strip.css +162 -1
- package/lib/public/css/menus.css +23 -0
- package/lib/public/css/messages.css +245 -0
- package/lib/public/css/overlays.css +88 -0
- package/lib/public/css/server-settings.css +30 -2
- package/lib/public/css/sidebar.css +4 -0
- package/lib/public/index.html +140 -66
- package/lib/public/modules/admin.js +179 -12
- package/lib/public/modules/input.js +13 -2
- package/lib/public/modules/notifications.js +3 -1
- package/lib/public/modules/project-settings.js +154 -168
- package/lib/public/modules/server-settings.js +78 -189
- package/lib/public/modules/settings-defaults.js +243 -0
- package/lib/public/modules/sidebar.js +112 -6
- package/lib/public/modules/terminal.js +48 -10
- package/lib/public/modules/tools.js +214 -1
- package/lib/sdk-bridge.js +634 -6
- package/lib/sdk-worker.js +446 -0
- package/lib/server.js +335 -3
- package/lib/sessions.js +26 -0
- package/lib/terminal-manager.js +2 -2
- package/lib/terminal.js +20 -4
- package/lib/updater.js +38 -11
- package/lib/users.js +79 -0
- package/package.json +2 -2
|
@@ -984,6 +984,14 @@ pre.mermaid-error {
|
|
|
984
984
|
color: var(--text-dimmer);
|
|
985
985
|
}
|
|
986
986
|
|
|
987
|
+
.subagent-summary {
|
|
988
|
+
margin: 2px 0 2px 24px;
|
|
989
|
+
padding: 2px 12px;
|
|
990
|
+
font-size: 12px;
|
|
991
|
+
color: var(--text-muted);
|
|
992
|
+
font-style: italic;
|
|
993
|
+
}
|
|
994
|
+
|
|
987
995
|
.subagent-stop-btn {
|
|
988
996
|
margin-left: auto;
|
|
989
997
|
padding: 2px 10px;
|
|
@@ -1459,9 +1467,246 @@ pre.mermaid-error {
|
|
|
1459
1467
|
|
|
1460
1468
|
.context-overflow-btn:hover { background: var(--accent-hover); }
|
|
1461
1469
|
|
|
1470
|
+
/* ==========================================================================
|
|
1471
|
+
Auth Required Message
|
|
1472
|
+
========================================================================== */
|
|
1473
|
+
|
|
1474
|
+
.auth-required-msg {
|
|
1475
|
+
max-width: var(--content-width);
|
|
1476
|
+
margin: 12px auto;
|
|
1477
|
+
padding: 14px 18px;
|
|
1478
|
+
background: color-mix(in srgb, var(--warning) 8%, var(--bg));
|
|
1479
|
+
border: 1px solid color-mix(in srgb, var(--warning) 30%, transparent);
|
|
1480
|
+
border-radius: 12px;
|
|
1481
|
+
font-size: 13px;
|
|
1482
|
+
}
|
|
1483
|
+
|
|
1484
|
+
.auth-required-header {
|
|
1485
|
+
font-weight: 600;
|
|
1486
|
+
color: var(--warning);
|
|
1487
|
+
margin-bottom: 4px;
|
|
1488
|
+
}
|
|
1489
|
+
|
|
1490
|
+
.auth-required-hint {
|
|
1491
|
+
color: var(--text-muted);
|
|
1492
|
+
font-size: 12px;
|
|
1493
|
+
line-height: 1.5;
|
|
1494
|
+
margin-bottom: 4px;
|
|
1495
|
+
}
|
|
1496
|
+
|
|
1497
|
+
.auth-required-guide {
|
|
1498
|
+
color: var(--text-muted);
|
|
1499
|
+
font-size: 11px;
|
|
1500
|
+
line-height: 1.4;
|
|
1501
|
+
margin-bottom: 8px;
|
|
1502
|
+
opacity: 0.8;
|
|
1503
|
+
}
|
|
1504
|
+
|
|
1505
|
+
.auth-required-cmd {
|
|
1506
|
+
display: block;
|
|
1507
|
+
padding: 8px 12px;
|
|
1508
|
+
margin-bottom: 12px;
|
|
1509
|
+
background: var(--input-bg);
|
|
1510
|
+
border: 1px solid var(--border);
|
|
1511
|
+
border-radius: 6px;
|
|
1512
|
+
font-family: var(--font-mono);
|
|
1513
|
+
font-size: 13px;
|
|
1514
|
+
color: var(--text);
|
|
1515
|
+
user-select: all;
|
|
1516
|
+
}
|
|
1517
|
+
|
|
1518
|
+
.auth-required-btn {
|
|
1519
|
+
padding: 8px 20px;
|
|
1520
|
+
border: none;
|
|
1521
|
+
border-radius: 8px;
|
|
1522
|
+
background: var(--accent);
|
|
1523
|
+
color: #fff;
|
|
1524
|
+
font-size: 13px;
|
|
1525
|
+
font-weight: 500;
|
|
1526
|
+
font-family: inherit;
|
|
1527
|
+
cursor: pointer;
|
|
1528
|
+
transition: background 0.15s;
|
|
1529
|
+
}
|
|
1530
|
+
|
|
1531
|
+
.auth-required-btn:hover { background: var(--accent-hover); }
|
|
1532
|
+
|
|
1462
1533
|
/* ==========================================================================
|
|
1463
1534
|
Rate Limit Message
|
|
1464
1535
|
========================================================================== */
|
|
1465
1536
|
|
|
1466
1537
|
/* Rate limit inline cards removed — now header-only with popover (see title-bar.css) */
|
|
1467
1538
|
|
|
1539
|
+
/* ==========================================================================
|
|
1540
|
+
DM Messages (P2P chat)
|
|
1541
|
+
========================================================================== */
|
|
1542
|
+
|
|
1543
|
+
/* --- Slack-style DM messages --- */
|
|
1544
|
+
|
|
1545
|
+
.dm-msg {
|
|
1546
|
+
display: flex;
|
|
1547
|
+
align-items: flex-start;
|
|
1548
|
+
gap: 8px;
|
|
1549
|
+
padding: 4px 16px;
|
|
1550
|
+
}
|
|
1551
|
+
|
|
1552
|
+
.dm-msg:hover {
|
|
1553
|
+
background: var(--bg-alt);
|
|
1554
|
+
}
|
|
1555
|
+
|
|
1556
|
+
.dm-msg-avatar {
|
|
1557
|
+
width: 36px;
|
|
1558
|
+
height: 36px;
|
|
1559
|
+
border-radius: 6px;
|
|
1560
|
+
flex-shrink: 0;
|
|
1561
|
+
margin-top: 2px;
|
|
1562
|
+
}
|
|
1563
|
+
|
|
1564
|
+
.dm-msg-content {
|
|
1565
|
+
flex: 1;
|
|
1566
|
+
min-width: 0;
|
|
1567
|
+
}
|
|
1568
|
+
|
|
1569
|
+
.dm-msg-header {
|
|
1570
|
+
display: flex;
|
|
1571
|
+
align-items: baseline;
|
|
1572
|
+
gap: 8px;
|
|
1573
|
+
}
|
|
1574
|
+
|
|
1575
|
+
.dm-msg-name {
|
|
1576
|
+
font-weight: 700;
|
|
1577
|
+
font-size: 15px;
|
|
1578
|
+
color: var(--text);
|
|
1579
|
+
}
|
|
1580
|
+
|
|
1581
|
+
.dm-msg-time {
|
|
1582
|
+
font-size: 12px;
|
|
1583
|
+
color: var(--text-dimmer);
|
|
1584
|
+
}
|
|
1585
|
+
|
|
1586
|
+
.dm-msg-body {
|
|
1587
|
+
font-size: 15px;
|
|
1588
|
+
line-height: 1.46;
|
|
1589
|
+
color: var(--text);
|
|
1590
|
+
word-wrap: break-word;
|
|
1591
|
+
white-space: pre-wrap;
|
|
1592
|
+
}
|
|
1593
|
+
|
|
1594
|
+
/* Compact: same sender within 5 min */
|
|
1595
|
+
.dm-msg-compact {
|
|
1596
|
+
padding: 1px 16px 1px 60px; /* 16 + 36 avatar + 8 gap = 60 */
|
|
1597
|
+
position: relative;
|
|
1598
|
+
}
|
|
1599
|
+
|
|
1600
|
+
.dm-msg-compact:hover .dm-msg-hover-time {
|
|
1601
|
+
opacity: 1;
|
|
1602
|
+
}
|
|
1603
|
+
|
|
1604
|
+
.dm-msg-hover-time {
|
|
1605
|
+
position: absolute;
|
|
1606
|
+
left: 16px;
|
|
1607
|
+
width: 36px;
|
|
1608
|
+
text-align: center;
|
|
1609
|
+
font-size: 11px;
|
|
1610
|
+
color: var(--text-dimmer);
|
|
1611
|
+
opacity: 0;
|
|
1612
|
+
transition: opacity 0.1s;
|
|
1613
|
+
line-height: 1.46;
|
|
1614
|
+
}
|
|
1615
|
+
|
|
1616
|
+
/* Typing indicator */
|
|
1617
|
+
.dm-typing-indicator {
|
|
1618
|
+
align-items: center;
|
|
1619
|
+
gap: 8px;
|
|
1620
|
+
padding: 4px 16px;
|
|
1621
|
+
}
|
|
1622
|
+
|
|
1623
|
+
.dm-typing-indicator .dm-msg-avatar {
|
|
1624
|
+
opacity: 0.7;
|
|
1625
|
+
}
|
|
1626
|
+
|
|
1627
|
+
.dm-typing-dots {
|
|
1628
|
+
display: flex;
|
|
1629
|
+
align-items: center;
|
|
1630
|
+
gap: 4px;
|
|
1631
|
+
padding: 8px 12px;
|
|
1632
|
+
background: var(--bg-alt);
|
|
1633
|
+
border-radius: 12px;
|
|
1634
|
+
}
|
|
1635
|
+
|
|
1636
|
+
.dm-typing-dots span {
|
|
1637
|
+
width: 7px;
|
|
1638
|
+
height: 7px;
|
|
1639
|
+
border-radius: 50%;
|
|
1640
|
+
background: var(--text-dimmer);
|
|
1641
|
+
animation: dm-typing-bounce 1.4s infinite ease-in-out both;
|
|
1642
|
+
}
|
|
1643
|
+
|
|
1644
|
+
.dm-typing-dots span:nth-child(1) { animation-delay: 0s; }
|
|
1645
|
+
.dm-typing-dots span:nth-child(2) { animation-delay: 0.2s; }
|
|
1646
|
+
.dm-typing-dots span:nth-child(3) { animation-delay: 0.4s; }
|
|
1647
|
+
|
|
1648
|
+
@keyframes dm-typing-bounce {
|
|
1649
|
+
0%, 80%, 100% { transform: scale(0.6); opacity: 0.4; }
|
|
1650
|
+
40% { transform: scale(1); opacity: 1; }
|
|
1651
|
+
}
|
|
1652
|
+
|
|
1653
|
+
/* DM mode: hide project-specific UI elements */
|
|
1654
|
+
#main-column.dm-mode .msg-group,
|
|
1655
|
+
#main-column.dm-mode #suggestion-chips,
|
|
1656
|
+
#main-column.dm-mode .tool-group {
|
|
1657
|
+
display: none;
|
|
1658
|
+
}
|
|
1659
|
+
|
|
1660
|
+
/* DM mode: simplify input bar (no voice, no model config, no context, no slash menu) */
|
|
1661
|
+
#main-column.dm-mode #stt-btn,
|
|
1662
|
+
#main-column.dm-mode #config-chip-wrap,
|
|
1663
|
+
#main-column.dm-mode #context-mini,
|
|
1664
|
+
#main-column.dm-mode #slash-menu {
|
|
1665
|
+
display: none !important;
|
|
1666
|
+
}
|
|
1667
|
+
|
|
1668
|
+
/* DM mode: hide sidebar column and resize handle */
|
|
1669
|
+
#sidebar-column.dm-mode {
|
|
1670
|
+
display: none !important;
|
|
1671
|
+
}
|
|
1672
|
+
|
|
1673
|
+
#sidebar-resize-handle.dm-mode {
|
|
1674
|
+
display: none !important;
|
|
1675
|
+
}
|
|
1676
|
+
|
|
1677
|
+
/* DM header bar: replaces normal title-bar-content */
|
|
1678
|
+
.dm-header-bar {
|
|
1679
|
+
display: none;
|
|
1680
|
+
align-items: center;
|
|
1681
|
+
gap: 12px;
|
|
1682
|
+
padding: 0 16px;
|
|
1683
|
+
height: 48px;
|
|
1684
|
+
flex-shrink: 0;
|
|
1685
|
+
}
|
|
1686
|
+
|
|
1687
|
+
#main-column.dm-mode .title-bar-content {
|
|
1688
|
+
display: none;
|
|
1689
|
+
}
|
|
1690
|
+
|
|
1691
|
+
#main-column.dm-mode .dm-header-bar {
|
|
1692
|
+
display: flex;
|
|
1693
|
+
}
|
|
1694
|
+
|
|
1695
|
+
.dm-header-avatar {
|
|
1696
|
+
width: 28px;
|
|
1697
|
+
height: 28px;
|
|
1698
|
+
border-radius: 50%;
|
|
1699
|
+
object-fit: cover;
|
|
1700
|
+
flex-shrink: 0;
|
|
1701
|
+
}
|
|
1702
|
+
|
|
1703
|
+
.dm-header-name {
|
|
1704
|
+
font-size: 15px;
|
|
1705
|
+
font-weight: 700;
|
|
1706
|
+
color: #fff;
|
|
1707
|
+
white-space: nowrap;
|
|
1708
|
+
overflow: hidden;
|
|
1709
|
+
text-overflow: ellipsis;
|
|
1710
|
+
}
|
|
1711
|
+
|
|
1712
|
+
|
|
@@ -860,6 +860,94 @@ button.top-bar-pill.pill-accent:hover { background: color-mix(in srgb, var(--acc
|
|
|
860
860
|
|
|
861
861
|
#add-project-error.hidden { display: none; }
|
|
862
862
|
|
|
863
|
+
/* --- Add project mode selector --- */
|
|
864
|
+
.add-project-modes {
|
|
865
|
+
display: flex;
|
|
866
|
+
gap: 2px;
|
|
867
|
+
margin-bottom: 14px;
|
|
868
|
+
background: var(--input-bg);
|
|
869
|
+
border-radius: 8px;
|
|
870
|
+
padding: 2px;
|
|
871
|
+
border: 1px solid var(--border);
|
|
872
|
+
}
|
|
873
|
+
|
|
874
|
+
.add-project-mode-btn {
|
|
875
|
+
flex: 1;
|
|
876
|
+
padding: 6px 4px;
|
|
877
|
+
border: 1px solid transparent;
|
|
878
|
+
border-radius: 6px;
|
|
879
|
+
background: none;
|
|
880
|
+
color: var(--text-muted);
|
|
881
|
+
font-size: 12px;
|
|
882
|
+
font-weight: 500;
|
|
883
|
+
font-family: inherit;
|
|
884
|
+
cursor: pointer;
|
|
885
|
+
transition: background 0.15s, color 0.15s, border-color 0.15s;
|
|
886
|
+
white-space: nowrap;
|
|
887
|
+
}
|
|
888
|
+
|
|
889
|
+
.add-project-mode-btn:hover:not(:disabled) {
|
|
890
|
+
color: var(--text-secondary);
|
|
891
|
+
}
|
|
892
|
+
|
|
893
|
+
.add-project-mode-btn.active {
|
|
894
|
+
color: var(--accent);
|
|
895
|
+
background: var(--bg);
|
|
896
|
+
border-color: var(--border);
|
|
897
|
+
box-shadow: 0 1px 3px rgba(var(--shadow-rgb), 0.15);
|
|
898
|
+
}
|
|
899
|
+
|
|
900
|
+
.add-project-mode-btn:disabled {
|
|
901
|
+
opacity: 0.35;
|
|
902
|
+
cursor: not-allowed;
|
|
903
|
+
}
|
|
904
|
+
|
|
905
|
+
.add-project-panel { display: none; }
|
|
906
|
+
.add-project-panel.active { display: block; }
|
|
907
|
+
|
|
908
|
+
#add-project-create-input,
|
|
909
|
+
#add-project-clone-input {
|
|
910
|
+
width: 100%;
|
|
911
|
+
background: var(--input-bg);
|
|
912
|
+
border: 1px solid var(--border);
|
|
913
|
+
border-radius: 8px;
|
|
914
|
+
color: var(--text);
|
|
915
|
+
font-size: 13px;
|
|
916
|
+
font-family: "Roboto Mono", monospace;
|
|
917
|
+
padding: 10px 12px;
|
|
918
|
+
outline: none;
|
|
919
|
+
transition: border-color 0.2s;
|
|
920
|
+
}
|
|
921
|
+
|
|
922
|
+
#add-project-create-input:focus,
|
|
923
|
+
#add-project-clone-input:focus { border-color: var(--text-dimmer); }
|
|
924
|
+
|
|
925
|
+
#add-project-create-input::placeholder,
|
|
926
|
+
#add-project-clone-input::placeholder {
|
|
927
|
+
color: var(--text-muted);
|
|
928
|
+
font-family: "Pretendard", system-ui, sans-serif;
|
|
929
|
+
}
|
|
930
|
+
|
|
931
|
+
#add-project-clone-progress {
|
|
932
|
+
font-size: 12px;
|
|
933
|
+
color: var(--text-muted);
|
|
934
|
+
margin-top: 8px;
|
|
935
|
+
display: flex;
|
|
936
|
+
align-items: center;
|
|
937
|
+
gap: 8px;
|
|
938
|
+
}
|
|
939
|
+
|
|
940
|
+
#add-project-clone-progress.hidden { display: none; }
|
|
941
|
+
|
|
942
|
+
.clone-spinner {
|
|
943
|
+
width: 12px;
|
|
944
|
+
height: 12px;
|
|
945
|
+
border: 2px solid var(--border);
|
|
946
|
+
border-top-color: var(--accent);
|
|
947
|
+
border-radius: 50%;
|
|
948
|
+
animation: spin 0.6s linear infinite;
|
|
949
|
+
}
|
|
950
|
+
|
|
863
951
|
/* --- Connect overlay --- */
|
|
864
952
|
#connect-overlay {
|
|
865
953
|
position: fixed;
|
|
@@ -79,8 +79,7 @@
|
|
|
79
79
|
font-size: 12px;
|
|
80
80
|
font-weight: 700;
|
|
81
81
|
color: var(--text-muted);
|
|
82
|
-
|
|
83
|
-
letter-spacing: 0.05em;
|
|
82
|
+
letter-spacing: 0.02em;
|
|
84
83
|
padding: 0 10px 10px;
|
|
85
84
|
border-bottom: 1px solid var(--border-subtle);
|
|
86
85
|
margin-bottom: 8px;
|
|
@@ -480,6 +479,35 @@
|
|
|
480
479
|
color: #fff;
|
|
481
480
|
}
|
|
482
481
|
|
|
482
|
+
.settings-budget-row {
|
|
483
|
+
display: flex;
|
|
484
|
+
align-items: center;
|
|
485
|
+
gap: 10px;
|
|
486
|
+
margin-top: 12px;
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
.settings-budget-label {
|
|
490
|
+
font-size: 12px;
|
|
491
|
+
color: var(--text-muted);
|
|
492
|
+
white-space: nowrap;
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
.settings-budget-input {
|
|
496
|
+
width: 90px;
|
|
497
|
+
padding: 5px 8px;
|
|
498
|
+
border: 1px solid var(--border);
|
|
499
|
+
border-radius: 6px;
|
|
500
|
+
background: var(--bg);
|
|
501
|
+
color: var(--text);
|
|
502
|
+
font-size: 13px;
|
|
503
|
+
font-family: inherit;
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
.settings-budget-input:focus {
|
|
507
|
+
border-color: var(--accent);
|
|
508
|
+
outline: none;
|
|
509
|
+
}
|
|
510
|
+
|
|
483
511
|
/* --- PIN input --- */
|
|
484
512
|
.settings-pin-input-row {
|
|
485
513
|
display: flex;
|