synabun 2026.4.26 → 2026.4.27
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/CHANGELOG.md +11 -126
- package/neural-interface/public/shared/cdx/cdx-panel.js +4 -4
- package/neural-interface/public/shared/cdx/cdx-styles.js +1 -1
- package/neural-interface/public/shared/ocp/ocp-panel.js +5 -4
- package/neural-interface/public/shared/ocp/ocp-styles.js +1 -1
- package/neural-interface/public/shared/styles.css +257 -151
- package/neural-interface/public/shared/ui-claude-panel.js +5 -5
- package/neural-interface/public/shared/ui-menubar.js +64 -36
- package/neural-interface/public/shared/ui-tool-updates.js +77 -3
- package/neural-interface/public/shared/ui-update.js +234 -32
- package/neural-interface/server.js +926 -74
- package/package.json +4 -1
- package/postinstall.js +20 -0
- package/preuninstall.js +140 -6
- package/updater.cmd +31 -0
- package/updater.mjs +245 -0
- package/updater.sh +29 -0
|
@@ -5094,15 +5094,51 @@
|
|
|
5094
5094
|
}
|
|
5095
5095
|
.update-backup-btn:hover { background: rgba(52,199,89,0.16); }
|
|
5096
5096
|
.update-backup-btn:disabled { opacity: 0.5; pointer-events: none; }
|
|
5097
|
-
.update-backup-status {
|
|
5098
|
-
display: flex;
|
|
5099
|
-
align-items: center;
|
|
5100
|
-
gap: 8px;
|
|
5097
|
+
.update-backup-status {
|
|
5098
|
+
display: flex;
|
|
5099
|
+
align-items: center;
|
|
5100
|
+
gap: 8px;
|
|
5101
5101
|
font-size: 11px;
|
|
5102
5102
|
color: var(--t-muted);
|
|
5103
|
-
padding: 4px 0;
|
|
5104
|
-
}
|
|
5105
|
-
.update-
|
|
5103
|
+
padding: 4px 0;
|
|
5104
|
+
}
|
|
5105
|
+
.update-run-status {
|
|
5106
|
+
align-items: flex-start;
|
|
5107
|
+
gap: 10px;
|
|
5108
|
+
padding: 10px 12px;
|
|
5109
|
+
border-radius: var(--r-card);
|
|
5110
|
+
border: 1px solid rgba(255,255,255,0.08);
|
|
5111
|
+
background: rgba(255,255,255,0.045);
|
|
5112
|
+
color: var(--t-secondary);
|
|
5113
|
+
font-size: 12px;
|
|
5114
|
+
line-height: 1.4;
|
|
5115
|
+
}
|
|
5116
|
+
.update-run-status .update-backup-icon {
|
|
5117
|
+
flex: 0 0 auto;
|
|
5118
|
+
margin-top: 1px;
|
|
5119
|
+
}
|
|
5120
|
+
.update-run-status strong {
|
|
5121
|
+
display: block;
|
|
5122
|
+
color: var(--t-primary);
|
|
5123
|
+
font-size: 12px;
|
|
5124
|
+
font-weight: 600;
|
|
5125
|
+
margin-bottom: 2px;
|
|
5126
|
+
}
|
|
5127
|
+
.update-run-detail,
|
|
5128
|
+
.update-run-hint {
|
|
5129
|
+
display: block;
|
|
5130
|
+
color: var(--t-muted);
|
|
5131
|
+
}
|
|
5132
|
+
.update-run-hint {
|
|
5133
|
+
margin-top: 5px;
|
|
5134
|
+
opacity: .82;
|
|
5135
|
+
}
|
|
5136
|
+
.update-run-status code {
|
|
5137
|
+
font-family: var(--ff-mono);
|
|
5138
|
+
font-size: 11px;
|
|
5139
|
+
color: var(--t-secondary);
|
|
5140
|
+
}
|
|
5141
|
+
.update-backup-icon { font-size: 14px; font-weight: 700; }
|
|
5106
5142
|
.update-backup-icon.spin { animation: updateSpin 1s linear infinite; }
|
|
5107
5143
|
@keyframes updateSpin {
|
|
5108
5144
|
from { transform: rotate(0deg); }
|
|
@@ -19449,150 +19485,150 @@
|
|
|
19449
19485
|
}
|
|
19450
19486
|
.sched-sidebar-new:hover { background: rgba(255,255,255,0.07); color: var(--t-bright); }
|
|
19451
19487
|
.sched-sidebar-empty { color: var(--t-muted); font-size: 11px; padding: 8px 6px; }
|
|
19452
|
-
.sched-sidebar-prompt {
|
|
19453
|
-
margin-top: auto; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
19454
|
-
border: 1px solid rgba(255,255,255,0.09); border-radius: 8px;
|
|
19455
|
-
background: rgba(255,255,255,0.04);
|
|
19456
|
-
color: var(--t-secondary); min-height: 34px; cursor: pointer; font-family: inherit;
|
|
19457
|
-
font-size: 12px; font-weight: 600; letter-spacing: 0;
|
|
19458
|
-
box-shadow: var(--shadow-highlight);
|
|
19459
|
-
transition: border-color 160ms ease, color 160ms ease, background 160ms ease, transform 120ms ease;
|
|
19460
|
-
}
|
|
19461
|
-
.sched-sidebar-prompt:hover {
|
|
19462
|
-
background: rgba(255,255,255,0.075);
|
|
19463
|
-
border-color: rgba(255,255,255,0.14);
|
|
19464
|
-
color: var(--t-bright);
|
|
19465
|
-
transform: translateY(-1px);
|
|
19466
|
-
}
|
|
19467
|
-
.sched-sidebar-prompt svg { width: 13px; height: 13px; color: var(--t-muted); }
|
|
19468
|
-
|
|
19469
|
-
.sched-prompt-backdrop {
|
|
19470
|
-
position: fixed; inset: 0; background: rgba(5,7,12,0.58);
|
|
19471
|
-
backdrop-filter: blur(7px); -webkit-backdrop-filter: blur(7px);
|
|
19472
|
-
z-index: 300010; opacity: 0; transition: opacity 160ms ease-out;
|
|
19473
|
-
pointer-events: auto;
|
|
19474
|
-
}
|
|
19475
|
-
.sched-prompt-backdrop.open { opacity: 1; }
|
|
19476
|
-
.sched-prompt-modal {
|
|
19477
|
-
position: fixed; left: 50%; top: 50%; transform: translate(-50%, -52%) scale(0.98);
|
|
19478
|
-
width: min(512px, calc(100vw - 32px)); padding: 0;
|
|
19479
|
-
border-radius: 12px; z-index: 300011;
|
|
19480
|
-
opacity: 0; transition: opacity 160ms ease-out, transform 200ms ease-out;
|
|
19481
|
-
background:
|
|
19482
|
-
linear-gradient(to bottom, rgba(255,255,255,0.035), rgba(255,255,255,0.01)),
|
|
19483
|
-
rgba(13,15,20,0.96);
|
|
19484
|
-
border: 1px solid rgba(255,255,255,0.085);
|
|
19485
|
-
box-shadow: 0 22px 64px rgba(0,0,0,0.58), var(--shadow-highlight);
|
|
19486
|
-
overflow: hidden;
|
|
19487
|
-
}
|
|
19488
|
-
.sched-prompt-modal.open { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
19489
|
-
.sched-prompt-head {
|
|
19490
|
-
display: flex; align-items: center; justify-content: space-between; gap: 12px;
|
|
19491
|
-
padding: 15px 16px 13px;
|
|
19492
|
-
border-bottom: 1px solid rgba(255,255,255,0.055);
|
|
19493
|
-
}
|
|
19494
|
-
.sched-prompt-head-text {
|
|
19495
|
-
display: flex; align-items: center; gap: 10px; min-width: 0;
|
|
19496
|
-
}
|
|
19497
|
-
.sched-prompt-icon {
|
|
19498
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
19499
|
-
width: 30px; height: 30px; border-radius: 8px; flex: 0 0 auto;
|
|
19500
|
-
background: rgba(255,255,255,0.055);
|
|
19501
|
-
border: 1px solid rgba(255,255,255,0.075);
|
|
19502
|
-
color: var(--t-secondary);
|
|
19503
|
-
box-shadow: var(--shadow-highlight);
|
|
19504
|
-
}
|
|
19505
|
-
.sched-prompt-icon svg { width: 14px; height: 14px; }
|
|
19506
|
-
.sched-prompt-head h3 {
|
|
19507
|
-
margin: 0; font-family: var(--ff-heading); font-size: 14px; font-weight: 650;
|
|
19508
|
-
color: var(--t-bright); letter-spacing: 0;
|
|
19509
|
-
}
|
|
19510
|
-
.sched-prompt-head p {
|
|
19511
|
-
margin: 2px 0 0; font-size: 11.5px; line-height: 1.35; color: var(--t-muted);
|
|
19512
|
-
}
|
|
19513
|
-
.sched-prompt-close {
|
|
19514
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
19515
|
-
width: 28px; height: 28px; flex: 0 0 auto;
|
|
19516
|
-
background: transparent; border: 1px solid transparent; border-radius: 7px;
|
|
19517
|
-
color: var(--t-muted); cursor: pointer; padding: 0;
|
|
19518
|
-
transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
19519
|
-
}
|
|
19520
|
-
.sched-prompt-close:hover {
|
|
19521
|
-
background: rgba(255,255,255,0.055);
|
|
19522
|
-
border-color: rgba(255,255,255,0.075);
|
|
19523
|
-
color: var(--t-bright);
|
|
19524
|
-
}
|
|
19525
|
-
.sched-prompt-close svg { width: 14px; height: 14px; }
|
|
19526
|
-
.sched-prompt-tiles {
|
|
19527
|
-
display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px;
|
|
19528
|
-
padding: 14px 16px 16px;
|
|
19529
|
-
}
|
|
19530
|
-
@media (max-width: 560px) { .sched-prompt-tiles { grid-template-columns: 1fr; } }
|
|
19531
|
-
.sched-prompt-tile {
|
|
19532
|
-
position: relative; display: grid; grid-template-columns: 32px minmax(0, 1fr);
|
|
19533
|
-
grid-template-areas: "logo pill" "body body"; align-content: start; gap: 10px 8px;
|
|
19534
|
-
min-height: 96px; padding: 12px; border-radius: 10px; cursor: pointer; font-family: inherit;
|
|
19535
|
-
background: rgba(255,255,255,0.032);
|
|
19536
|
-
border: 1px solid rgba(255,255,255,0.065);
|
|
19537
|
-
color: var(--t-secondary); text-align: left;
|
|
19538
|
-
backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
|
|
19539
|
-
transition: background 180ms ease, border-color 180ms ease, transform 160ms ease, box-shadow 180ms ease;
|
|
19540
|
-
overflow: hidden;
|
|
19541
|
-
}
|
|
19542
|
-
.sched-prompt-tile:not(.disabled) {
|
|
19543
|
-
background: rgba(255,255,255,0.045);
|
|
19544
|
-
border-color: rgba(255,255,255,0.095);
|
|
19545
|
-
box-shadow: var(--shadow-highlight);
|
|
19546
|
-
}
|
|
19547
|
-
.sched-prompt-tile:not(.disabled):hover {
|
|
19548
|
-
background: rgba(255,255,255,0.065);
|
|
19549
|
-
border-color: rgba(255,255,255,0.13);
|
|
19550
|
-
color: var(--t-bright); transform: translateY(-1px);
|
|
19551
|
-
box-shadow: var(--shadow-xs), var(--shadow-highlight);
|
|
19552
|
-
}
|
|
19553
|
-
.sched-prompt-tile:not(.disabled):active { transform: translateY(0); }
|
|
19554
|
-
.sched-prompt-tile:focus-visible {
|
|
19555
|
-
outline: none;
|
|
19556
|
-
border-color: rgba(255,255,255,0.18);
|
|
19557
|
-
box-shadow: 0 0 0 2px rgba(255,255,255,0.14), var(--shadow-highlight);
|
|
19558
|
-
}
|
|
19559
|
-
.sched-prompt-tile.disabled { opacity: 0.58; cursor: not-allowed; pointer-events: none; }
|
|
19560
|
-
.sched-prompt-tile-logo {
|
|
19561
|
-
grid-area: logo;
|
|
19562
|
-
display: inline-flex; align-items: center; justify-content: center;
|
|
19563
|
-
width: 32px; height: 32px; border-radius: 8px;
|
|
19564
|
-
background: rgba(255,255,255,0.045);
|
|
19565
|
-
border: 1px solid rgba(255,255,255,0.075);
|
|
19566
|
-
color: color-mix(in srgb, var(--provider-color, #fff) 62%, var(--t-secondary));
|
|
19567
|
-
box-shadow: var(--shadow-highlight);
|
|
19568
|
-
}
|
|
19569
|
-
.sched-prompt-tile-logo svg { width: 16px; height: 16px; display: block; }
|
|
19570
|
-
.sched-prompt-tile-body {
|
|
19571
|
-
grid-area: body; display: flex; flex-direction: column; gap: 2px; min-width: 0;
|
|
19572
|
-
}
|
|
19573
|
-
.sched-prompt-tile-title {
|
|
19574
|
-
font-size: 12.5px; font-weight: 650; color: var(--t-secondary); letter-spacing: 0;
|
|
19575
|
-
line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
19576
|
-
}
|
|
19577
|
-
.sched-prompt-tile:not(.disabled) .sched-prompt-tile-title {
|
|
19578
|
-
color: color-mix(in srgb, var(--provider-color, #fff) 56%, var(--t-bright));
|
|
19579
|
-
}
|
|
19580
|
-
.sched-prompt-tile-sub {
|
|
19581
|
-
font-size: 10.5px; color: var(--t-muted); letter-spacing: 0; line-height: 1.2;
|
|
19582
|
-
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
19583
|
-
}
|
|
19584
|
-
.sched-prompt-pill {
|
|
19585
|
-
grid-area: pill; justify-self: end; align-self: start;
|
|
19586
|
-
font-size: 10px; font-weight: 600; letter-spacing: 0;
|
|
19587
|
-
padding: 2px 6px; border-radius: var(--r-pill);
|
|
19588
|
-
background: rgba(255,255,255,0.045); color: var(--t-muted);
|
|
19589
|
-
border: 1px solid rgba(255,255,255,0.06);
|
|
19590
|
-
}
|
|
19591
|
-
.sched-prompt-pill--active {
|
|
19592
|
-
background: rgba(255,255,255,0.075);
|
|
19593
|
-
border-color: rgba(255,255,255,0.12);
|
|
19594
|
-
color: var(--t-secondary);
|
|
19595
|
-
}
|
|
19488
|
+
.sched-sidebar-prompt {
|
|
19489
|
+
margin-top: auto; display: inline-flex; align-items: center; justify-content: center; gap: 6px;
|
|
19490
|
+
border: 1px solid rgba(255,255,255,0.09); border-radius: 8px;
|
|
19491
|
+
background: rgba(255,255,255,0.04);
|
|
19492
|
+
color: var(--t-secondary); min-height: 34px; cursor: pointer; font-family: inherit;
|
|
19493
|
+
font-size: 12px; font-weight: 600; letter-spacing: 0;
|
|
19494
|
+
box-shadow: var(--shadow-highlight);
|
|
19495
|
+
transition: border-color 160ms ease, color 160ms ease, background 160ms ease, transform 120ms ease;
|
|
19496
|
+
}
|
|
19497
|
+
.sched-sidebar-prompt:hover {
|
|
19498
|
+
background: rgba(255,255,255,0.075);
|
|
19499
|
+
border-color: rgba(255,255,255,0.14);
|
|
19500
|
+
color: var(--t-bright);
|
|
19501
|
+
transform: translateY(-1px);
|
|
19502
|
+
}
|
|
19503
|
+
.sched-sidebar-prompt svg { width: 13px; height: 13px; color: var(--t-muted); }
|
|
19504
|
+
|
|
19505
|
+
.sched-prompt-backdrop {
|
|
19506
|
+
position: fixed; inset: 0; background: rgba(5,7,12,0.58);
|
|
19507
|
+
backdrop-filter: blur(7px); -webkit-backdrop-filter: blur(7px);
|
|
19508
|
+
z-index: 300010; opacity: 0; transition: opacity 160ms ease-out;
|
|
19509
|
+
pointer-events: auto;
|
|
19510
|
+
}
|
|
19511
|
+
.sched-prompt-backdrop.open { opacity: 1; }
|
|
19512
|
+
.sched-prompt-modal {
|
|
19513
|
+
position: fixed; left: 50%; top: 50%; transform: translate(-50%, -52%) scale(0.98);
|
|
19514
|
+
width: min(512px, calc(100vw - 32px)); padding: 0;
|
|
19515
|
+
border-radius: 12px; z-index: 300011;
|
|
19516
|
+
opacity: 0; transition: opacity 160ms ease-out, transform 200ms ease-out;
|
|
19517
|
+
background:
|
|
19518
|
+
linear-gradient(to bottom, rgba(255,255,255,0.035), rgba(255,255,255,0.01)),
|
|
19519
|
+
rgba(13,15,20,0.96);
|
|
19520
|
+
border: 1px solid rgba(255,255,255,0.085);
|
|
19521
|
+
box-shadow: 0 22px 64px rgba(0,0,0,0.58), var(--shadow-highlight);
|
|
19522
|
+
overflow: hidden;
|
|
19523
|
+
}
|
|
19524
|
+
.sched-prompt-modal.open { opacity: 1; transform: translate(-50%, -50%) scale(1); }
|
|
19525
|
+
.sched-prompt-head {
|
|
19526
|
+
display: flex; align-items: center; justify-content: space-between; gap: 12px;
|
|
19527
|
+
padding: 15px 16px 13px;
|
|
19528
|
+
border-bottom: 1px solid rgba(255,255,255,0.055);
|
|
19529
|
+
}
|
|
19530
|
+
.sched-prompt-head-text {
|
|
19531
|
+
display: flex; align-items: center; gap: 10px; min-width: 0;
|
|
19532
|
+
}
|
|
19533
|
+
.sched-prompt-icon {
|
|
19534
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
19535
|
+
width: 30px; height: 30px; border-radius: 8px; flex: 0 0 auto;
|
|
19536
|
+
background: rgba(255,255,255,0.055);
|
|
19537
|
+
border: 1px solid rgba(255,255,255,0.075);
|
|
19538
|
+
color: var(--t-secondary);
|
|
19539
|
+
box-shadow: var(--shadow-highlight);
|
|
19540
|
+
}
|
|
19541
|
+
.sched-prompt-icon svg { width: 14px; height: 14px; }
|
|
19542
|
+
.sched-prompt-head h3 {
|
|
19543
|
+
margin: 0; font-family: var(--ff-heading); font-size: 14px; font-weight: 650;
|
|
19544
|
+
color: var(--t-bright); letter-spacing: 0;
|
|
19545
|
+
}
|
|
19546
|
+
.sched-prompt-head p {
|
|
19547
|
+
margin: 2px 0 0; font-size: 11.5px; line-height: 1.35; color: var(--t-muted);
|
|
19548
|
+
}
|
|
19549
|
+
.sched-prompt-close {
|
|
19550
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
19551
|
+
width: 28px; height: 28px; flex: 0 0 auto;
|
|
19552
|
+
background: transparent; border: 1px solid transparent; border-radius: 7px;
|
|
19553
|
+
color: var(--t-muted); cursor: pointer; padding: 0;
|
|
19554
|
+
transition: background 150ms ease, border-color 150ms ease, color 150ms ease;
|
|
19555
|
+
}
|
|
19556
|
+
.sched-prompt-close:hover {
|
|
19557
|
+
background: rgba(255,255,255,0.055);
|
|
19558
|
+
border-color: rgba(255,255,255,0.075);
|
|
19559
|
+
color: var(--t-bright);
|
|
19560
|
+
}
|
|
19561
|
+
.sched-prompt-close svg { width: 14px; height: 14px; }
|
|
19562
|
+
.sched-prompt-tiles {
|
|
19563
|
+
display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px;
|
|
19564
|
+
padding: 14px 16px 16px;
|
|
19565
|
+
}
|
|
19566
|
+
@media (max-width: 560px) { .sched-prompt-tiles { grid-template-columns: 1fr; } }
|
|
19567
|
+
.sched-prompt-tile {
|
|
19568
|
+
position: relative; display: grid; grid-template-columns: 32px minmax(0, 1fr);
|
|
19569
|
+
grid-template-areas: "logo pill" "body body"; align-content: start; gap: 10px 8px;
|
|
19570
|
+
min-height: 96px; padding: 12px; border-radius: 10px; cursor: pointer; font-family: inherit;
|
|
19571
|
+
background: rgba(255,255,255,0.032);
|
|
19572
|
+
border: 1px solid rgba(255,255,255,0.065);
|
|
19573
|
+
color: var(--t-secondary); text-align: left;
|
|
19574
|
+
backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px);
|
|
19575
|
+
transition: background 180ms ease, border-color 180ms ease, transform 160ms ease, box-shadow 180ms ease;
|
|
19576
|
+
overflow: hidden;
|
|
19577
|
+
}
|
|
19578
|
+
.sched-prompt-tile:not(.disabled) {
|
|
19579
|
+
background: rgba(255,255,255,0.045);
|
|
19580
|
+
border-color: rgba(255,255,255,0.095);
|
|
19581
|
+
box-shadow: var(--shadow-highlight);
|
|
19582
|
+
}
|
|
19583
|
+
.sched-prompt-tile:not(.disabled):hover {
|
|
19584
|
+
background: rgba(255,255,255,0.065);
|
|
19585
|
+
border-color: rgba(255,255,255,0.13);
|
|
19586
|
+
color: var(--t-bright); transform: translateY(-1px);
|
|
19587
|
+
box-shadow: var(--shadow-xs), var(--shadow-highlight);
|
|
19588
|
+
}
|
|
19589
|
+
.sched-prompt-tile:not(.disabled):active { transform: translateY(0); }
|
|
19590
|
+
.sched-prompt-tile:focus-visible {
|
|
19591
|
+
outline: none;
|
|
19592
|
+
border-color: rgba(255,255,255,0.18);
|
|
19593
|
+
box-shadow: 0 0 0 2px rgba(255,255,255,0.14), var(--shadow-highlight);
|
|
19594
|
+
}
|
|
19595
|
+
.sched-prompt-tile.disabled { opacity: 0.58; cursor: not-allowed; pointer-events: none; }
|
|
19596
|
+
.sched-prompt-tile-logo {
|
|
19597
|
+
grid-area: logo;
|
|
19598
|
+
display: inline-flex; align-items: center; justify-content: center;
|
|
19599
|
+
width: 32px; height: 32px; border-radius: 8px;
|
|
19600
|
+
background: rgba(255,255,255,0.045);
|
|
19601
|
+
border: 1px solid rgba(255,255,255,0.075);
|
|
19602
|
+
color: color-mix(in srgb, var(--provider-color, #fff) 62%, var(--t-secondary));
|
|
19603
|
+
box-shadow: var(--shadow-highlight);
|
|
19604
|
+
}
|
|
19605
|
+
.sched-prompt-tile-logo svg { width: 16px; height: 16px; display: block; }
|
|
19606
|
+
.sched-prompt-tile-body {
|
|
19607
|
+
grid-area: body; display: flex; flex-direction: column; gap: 2px; min-width: 0;
|
|
19608
|
+
}
|
|
19609
|
+
.sched-prompt-tile-title {
|
|
19610
|
+
font-size: 12.5px; font-weight: 650; color: var(--t-secondary); letter-spacing: 0;
|
|
19611
|
+
line-height: 1.2; white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
19612
|
+
}
|
|
19613
|
+
.sched-prompt-tile:not(.disabled) .sched-prompt-tile-title {
|
|
19614
|
+
color: color-mix(in srgb, var(--provider-color, #fff) 56%, var(--t-bright));
|
|
19615
|
+
}
|
|
19616
|
+
.sched-prompt-tile-sub {
|
|
19617
|
+
font-size: 10.5px; color: var(--t-muted); letter-spacing: 0; line-height: 1.2;
|
|
19618
|
+
white-space: nowrap; overflow: hidden; text-overflow: ellipsis;
|
|
19619
|
+
}
|
|
19620
|
+
.sched-prompt-pill {
|
|
19621
|
+
grid-area: pill; justify-self: end; align-self: start;
|
|
19622
|
+
font-size: 10px; font-weight: 600; letter-spacing: 0;
|
|
19623
|
+
padding: 2px 6px; border-radius: var(--r-pill);
|
|
19624
|
+
background: rgba(255,255,255,0.045); color: var(--t-muted);
|
|
19625
|
+
border: 1px solid rgba(255,255,255,0.06);
|
|
19626
|
+
}
|
|
19627
|
+
.sched-prompt-pill--active {
|
|
19628
|
+
background: rgba(255,255,255,0.075);
|
|
19629
|
+
border-color: rgba(255,255,255,0.12);
|
|
19630
|
+
color: var(--t-secondary);
|
|
19631
|
+
}
|
|
19596
19632
|
|
|
19597
19633
|
.sched-main { flex: 1; min-width: 0; min-height: 0; display: flex; flex-direction: column; }
|
|
19598
19634
|
.sched-tabs {
|
|
@@ -24315,3 +24351,73 @@
|
|
|
24315
24351
|
.ig-lb-prev { left: 16px; }
|
|
24316
24352
|
.ig-lb-next { right: 16px; }
|
|
24317
24353
|
|
|
24354
|
+
/* ── Update-check toast (Apps > Check for updates) ── */
|
|
24355
|
+
.update-check-toast {
|
|
24356
|
+
position: fixed;
|
|
24357
|
+
right: 20px;
|
|
24358
|
+
bottom: 80px;
|
|
24359
|
+
z-index: 300050;
|
|
24360
|
+
display: flex;
|
|
24361
|
+
gap: 12px;
|
|
24362
|
+
align-items: flex-start;
|
|
24363
|
+
min-width: 240px;
|
|
24364
|
+
max-width: 360px;
|
|
24365
|
+
padding: 12px 14px;
|
|
24366
|
+
border-radius: 14px;
|
|
24367
|
+
background: rgba(20, 20, 24, 0.85);
|
|
24368
|
+
backdrop-filter: blur(20px) saturate(160%);
|
|
24369
|
+
-webkit-backdrop-filter: blur(20px) saturate(160%);
|
|
24370
|
+
border: 1px solid rgba(255, 255, 255, 0.08);
|
|
24371
|
+
color: var(--t-text);
|
|
24372
|
+
font-size: 12px;
|
|
24373
|
+
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.4);
|
|
24374
|
+
opacity: 0;
|
|
24375
|
+
transform: translateY(8px);
|
|
24376
|
+
transition: opacity 0.25s ease, transform 0.25s ease, background 0.15s ease;
|
|
24377
|
+
pointer-events: auto;
|
|
24378
|
+
}
|
|
24379
|
+
.update-check-toast.show { opacity: 1; transform: translateY(0); }
|
|
24380
|
+
.update-check-toast--clickable { cursor: pointer; }
|
|
24381
|
+
.update-check-toast--clickable:hover { background: rgba(28, 28, 32, 0.92); }
|
|
24382
|
+
.update-check-toast .utc-icon {
|
|
24383
|
+
width: 24px; height: 24px;
|
|
24384
|
+
border-radius: 50%;
|
|
24385
|
+
display: flex; align-items: center; justify-content: center;
|
|
24386
|
+
font-weight: 700; font-size: 14px;
|
|
24387
|
+
flex-shrink: 0;
|
|
24388
|
+
}
|
|
24389
|
+
.update-check-toast .utc-icon--up { background: rgba(52, 199, 89, 0.18); color: #34c759; }
|
|
24390
|
+
.update-check-toast .utc-icon--ok { background: rgba(52, 199, 89, 0.18); color: #34c759; }
|
|
24391
|
+
.update-check-toast .utc-icon--err { background: rgba(255, 69, 58, 0.18); color: #ff453a; }
|
|
24392
|
+
.update-check-toast .utc-body { flex: 1; min-width: 0; }
|
|
24393
|
+
.update-check-toast .utc-title { font-weight: 600; margin-bottom: 4px; }
|
|
24394
|
+
.update-check-toast .utc-list { list-style: none; margin: 0; padding: 0; }
|
|
24395
|
+
.update-check-toast .utc-list li { padding: 2px 0; color: var(--t-muted); }
|
|
24396
|
+
.update-check-toast .utc-list li .utc-src {
|
|
24397
|
+
display: inline-block;
|
|
24398
|
+
padding: 1px 6px;
|
|
24399
|
+
margin-left: 6px;
|
|
24400
|
+
border-radius: 6px;
|
|
24401
|
+
font-size: 10px;
|
|
24402
|
+
background: rgba(255, 255, 255, 0.08);
|
|
24403
|
+
color: var(--t-text);
|
|
24404
|
+
}
|
|
24405
|
+
.update-check-toast .utc-sub { color: var(--t-muted); }
|
|
24406
|
+
.update-check-toast .utc-hint { color: var(--t-muted); opacity: 0.7; margin-top: 6px; font-size: 11px; }
|
|
24407
|
+
|
|
24408
|
+
.update-channel-pill {
|
|
24409
|
+
display: inline-block;
|
|
24410
|
+
padding: 2px 8px;
|
|
24411
|
+
margin-left: 8px;
|
|
24412
|
+
font-size: 10px;
|
|
24413
|
+
font-weight: 600;
|
|
24414
|
+
letter-spacing: 0.04em;
|
|
24415
|
+
text-transform: uppercase;
|
|
24416
|
+
border-radius: 6px;
|
|
24417
|
+
vertical-align: middle;
|
|
24418
|
+
background: rgba(255, 159, 10, 0.18);
|
|
24419
|
+
color: #ff9f0a;
|
|
24420
|
+
}
|
|
24421
|
+
.update-channel-pill--beta { background: rgba(255, 159, 10, 0.18); color: #ff9f0a; }
|
|
24422
|
+
|
|
24423
|
+
|
|
@@ -439,7 +439,7 @@ function injectStyles() {
|
|
|
439
439
|
grid-template-columns: auto 1fr auto;
|
|
440
440
|
gap: 10px;
|
|
441
441
|
align-items: center;
|
|
442
|
-
margin: 8px
|
|
442
|
+
margin: 6px 8px 0;
|
|
443
443
|
padding: 10px 12px;
|
|
444
444
|
border: 1px solid rgba(255,180,80,0.45);
|
|
445
445
|
border-radius: 8px;
|
|
@@ -7331,8 +7331,8 @@ let _cliInstallFailureForced = false;
|
|
|
7331
7331
|
function _ensureCliBannerEl() {
|
|
7332
7332
|
if (!_panel) return null;
|
|
7333
7333
|
const container = _panel.querySelector('#cp-messages-container');
|
|
7334
|
-
if (!container) return null;
|
|
7335
|
-
let banner = container.querySelector(':scope > .cp-cli-banner');
|
|
7334
|
+
if (!container || !container.parentNode) return null;
|
|
7335
|
+
let banner = container.parentNode.querySelector(':scope > .cp-cli-banner');
|
|
7336
7336
|
if (banner) return banner;
|
|
7337
7337
|
const label = getCliLabel('claude-code');
|
|
7338
7338
|
const cmd = getCliInstallCommand('claude-code');
|
|
@@ -7350,7 +7350,7 @@ function _ensureCliBannerEl() {
|
|
|
7350
7350
|
<button class="cp-cli-banner-recheck" type="button">Re-check</button>
|
|
7351
7351
|
</div>
|
|
7352
7352
|
`;
|
|
7353
|
-
container.insertBefore(banner, container
|
|
7353
|
+
container.parentNode.insertBefore(banner, container);
|
|
7354
7354
|
const btn = banner.querySelector('.cp-cli-banner-recheck');
|
|
7355
7355
|
btn?.addEventListener('click', async () => {
|
|
7356
7356
|
btn.disabled = true;
|
|
@@ -7368,7 +7368,7 @@ function _ensureCliBannerEl() {
|
|
|
7368
7368
|
|
|
7369
7369
|
function _removeCliBannerEl() {
|
|
7370
7370
|
if (!_panel) return;
|
|
7371
|
-
const banner = _panel.querySelector('
|
|
7371
|
+
const banner = _panel.querySelector(':scope > .cp-cli-banner');
|
|
7372
7372
|
banner?.remove();
|
|
7373
7373
|
}
|
|
7374
7374
|
|
|
@@ -12,7 +12,8 @@ import { openHelp } from './ui-help.js';
|
|
|
12
12
|
import { registerAction } from './ui-keybinds.js';
|
|
13
13
|
import { isGuest, hasPermission } from './ui-sync.js';
|
|
14
14
|
import { sendToPanel } from './ui-claude-panel.js';
|
|
15
|
-
import { forceCheckToolUpdates } from './ui-tool-updates.js';
|
|
15
|
+
import { forceCheckToolUpdates, showUpdateToast, TOOL_LABELS } from './ui-tool-updates.js';
|
|
16
|
+
import { forceCheckSynabunUpdate, openSynabunUpdateModal } from './ui-update.js';
|
|
16
17
|
|
|
17
18
|
const $ = (id) => document.getElementById(id);
|
|
18
19
|
|
|
@@ -127,12 +128,12 @@ export function initMenubar() {
|
|
|
127
128
|
'menu-open-skills-studio': 'skills',
|
|
128
129
|
'menu-skills-new': 'skills',
|
|
129
130
|
'menu-skills-import': 'skills',
|
|
130
|
-
'menu-open-automation-studio': 'automations',
|
|
131
|
-
'menu-automations-schedule-new': 'automations',
|
|
132
|
-
'menu-automations-quick-timer': 'automations',
|
|
133
|
-
'menu-automations-schedule-groups': 'automations',
|
|
134
|
-
'menu-automations-new': 'automations',
|
|
135
|
-
'menu-automations-import': 'automations',
|
|
131
|
+
'menu-open-automation-studio': 'automations',
|
|
132
|
+
'menu-automations-schedule-new': 'automations',
|
|
133
|
+
'menu-automations-quick-timer': 'automations',
|
|
134
|
+
'menu-automations-schedule-groups': 'automations',
|
|
135
|
+
'menu-automations-new': 'automations',
|
|
136
|
+
'menu-automations-import': 'automations',
|
|
136
137
|
'menu-terminal-claude': 'terminal',
|
|
137
138
|
'menu-terminal-codex': 'terminal',
|
|
138
139
|
'menu-terminal-gemini': 'terminal',
|
|
@@ -316,34 +317,34 @@ function wireAutomationsMenu() {
|
|
|
316
317
|
emit('automations:open');
|
|
317
318
|
});
|
|
318
319
|
}
|
|
319
|
-
const schedulesItem = $('menu-automations-schedules');
|
|
320
|
-
if (schedulesItem) {
|
|
321
|
-
schedulesItem.addEventListener('click', () => {
|
|
322
|
-
closeAll();
|
|
323
|
-
emit('automations:open-schedules');
|
|
324
|
-
});
|
|
325
|
-
}
|
|
326
|
-
const newScheduleItem = $('menu-automations-schedule-new');
|
|
327
|
-
if (newScheduleItem) {
|
|
328
|
-
newScheduleItem.addEventListener('click', () => {
|
|
329
|
-
closeAll();
|
|
330
|
-
emit('automations:open-schedules', { action: 'new-schedule' });
|
|
331
|
-
});
|
|
332
|
-
}
|
|
333
|
-
const quickTimerItem = $('menu-automations-quick-timer');
|
|
334
|
-
if (quickTimerItem) {
|
|
335
|
-
quickTimerItem.addEventListener('click', () => {
|
|
336
|
-
closeAll();
|
|
337
|
-
emit('automations:open-schedules', { action: 'quick-timer' });
|
|
338
|
-
});
|
|
339
|
-
}
|
|
340
|
-
const scheduleGroupsItem = $('menu-automations-schedule-groups');
|
|
341
|
-
if (scheduleGroupsItem) {
|
|
342
|
-
scheduleGroupsItem.addEventListener('click', () => {
|
|
343
|
-
closeAll();
|
|
344
|
-
emit('automations:open-schedules', { tab: 'groups' });
|
|
345
|
-
});
|
|
346
|
-
}
|
|
320
|
+
const schedulesItem = $('menu-automations-schedules');
|
|
321
|
+
if (schedulesItem) {
|
|
322
|
+
schedulesItem.addEventListener('click', () => {
|
|
323
|
+
closeAll();
|
|
324
|
+
emit('automations:open-schedules');
|
|
325
|
+
});
|
|
326
|
+
}
|
|
327
|
+
const newScheduleItem = $('menu-automations-schedule-new');
|
|
328
|
+
if (newScheduleItem) {
|
|
329
|
+
newScheduleItem.addEventListener('click', () => {
|
|
330
|
+
closeAll();
|
|
331
|
+
emit('automations:open-schedules', { action: 'new-schedule' });
|
|
332
|
+
});
|
|
333
|
+
}
|
|
334
|
+
const quickTimerItem = $('menu-automations-quick-timer');
|
|
335
|
+
if (quickTimerItem) {
|
|
336
|
+
quickTimerItem.addEventListener('click', () => {
|
|
337
|
+
closeAll();
|
|
338
|
+
emit('automations:open-schedules', { action: 'quick-timer' });
|
|
339
|
+
});
|
|
340
|
+
}
|
|
341
|
+
const scheduleGroupsItem = $('menu-automations-schedule-groups');
|
|
342
|
+
if (scheduleGroupsItem) {
|
|
343
|
+
scheduleGroupsItem.addEventListener('click', () => {
|
|
344
|
+
closeAll();
|
|
345
|
+
emit('automations:open-schedules', { tab: 'groups' });
|
|
346
|
+
});
|
|
347
|
+
}
|
|
347
348
|
const newItem = $('menu-automations-new');
|
|
348
349
|
if (newItem) {
|
|
349
350
|
newItem.addEventListener('click', () => {
|
|
@@ -370,7 +371,34 @@ function wireTerminalMenu() {
|
|
|
370
371
|
'menu-terminal-codex': () => emit('terminal:open', { profile: 'codex' }),
|
|
371
372
|
'menu-terminal-gemini': () => emit('terminal:open', { profile: 'gemini' }),
|
|
372
373
|
'menu-terminal-opencode': () => emit('terminal:open', { profile: 'opencode' }),
|
|
373
|
-
'menu-check-cli-updates': () =>
|
|
374
|
+
'menu-check-cli-updates': async () => {
|
|
375
|
+
const [tools, syn] = await Promise.all([
|
|
376
|
+
forceCheckToolUpdates(),
|
|
377
|
+
forceCheckSynabunUpdate(),
|
|
378
|
+
]);
|
|
379
|
+
|
|
380
|
+
const updates = [];
|
|
381
|
+
for (const [key, info] of Object.entries(tools?.tools || {})) {
|
|
382
|
+
if (info?.updateAvailable) {
|
|
383
|
+
const label = `${TOOL_LABELS[key] || key} v${info.installed} → v${info.latest}`;
|
|
384
|
+
updates.push({ label });
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (syn?.updateAvailable) {
|
|
388
|
+
const srcLabel = syn.source === 'both' ? 'npm + GitHub' : syn.source === 'github' ? 'GitHub' : 'npm';
|
|
389
|
+
updates.push({ label: `SynaBun v${syn.current} → v${syn.latest}`, source: srcLabel });
|
|
390
|
+
}
|
|
391
|
+
|
|
392
|
+
const errors = [];
|
|
393
|
+
if (!tools) errors.push('CLI versions');
|
|
394
|
+
if (!syn) errors.push('SynaBun version');
|
|
395
|
+
|
|
396
|
+
showUpdateToast({
|
|
397
|
+
updates,
|
|
398
|
+
errors,
|
|
399
|
+
onClick: syn?.updateAvailable ? () => openSynabunUpdateModal() : null,
|
|
400
|
+
});
|
|
401
|
+
},
|
|
374
402
|
'menu-terminal-shell': () => emit('terminal:open', { profile: 'shell' }),
|
|
375
403
|
'menu-terminal-browser': () => emit('browser:open'),
|
|
376
404
|
'menu-terminal-youtube': () => emit('browser:open', { url: 'https://www.youtube.com' }),
|