@xingjisoft/neutrino 0.4.0 → 0.5.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/README.md +33 -397
- package/assets/neutrino.ico +0 -0
- package/assets/neutrino.svg +7 -0
- package/dist/agents.js +22 -3
- package/dist/app.js +218 -26
- package/dist/background.js +358 -0
- package/dist/bin.js +200 -42
- package/dist/config.js +7 -3
- package/dist/header.js +2 -1
- package/dist/llm/tools.js +3 -1
- package/dist/migration.js +33 -0
- package/dist/pro/config.js +135 -9
- package/dist/screens/agentConversation.js +48 -5
- package/dist/screens/agentHistory.js +4 -2
- package/dist/screens/settings.js +43 -2
- package/dist/screens/start.js +26 -14
- package/dist/screens/updatePrompt.js +200 -0
- package/dist/state.js +1 -0
- package/dist/terminal/restore.js +3 -12
- package/dist/tray.js +138 -0
- package/dist/ui.js +32 -16
- package/dist/update.js +213 -0
- package/dist/web/clientState.js +82 -0
- package/dist/web/hub.js +4 -0
- package/dist/web/server.js +330 -37
- package/dist/web/service.js +160 -0
- package/dist/web/session.js +24 -6
- package/dist/web/settings.js +15 -0
- package/dist/web/terminalBridge.js +250 -0
- package/package.json +2 -2
- package/web/README.md +102 -23
- package/web/app.js +558 -22
- package/web/i18n.js +34 -0
- package/web/index.html +71 -9
- package/web/settings.js +223 -46
- package/web/style.css +145 -78
- package/assets/pro/model-template.json +0 -376
package/web/style.css
CHANGED
|
@@ -549,13 +549,28 @@ svg {
|
|
|
549
549
|
color: var(--text-tertiary);
|
|
550
550
|
}
|
|
551
551
|
|
|
552
|
-
.
|
|
552
|
+
/* Sidebar row status: a finished turn, a turn in flight, or a pending approval. */
|
|
553
|
+
.session-state {
|
|
553
554
|
flex: none;
|
|
554
555
|
width: 6px;
|
|
555
556
|
height: 6px;
|
|
556
557
|
border-radius: 50%;
|
|
557
558
|
background: var(--accent);
|
|
558
|
-
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
.session-state.approval {
|
|
562
|
+
background: var(--amber);
|
|
563
|
+
animation: pulse-amber 1.6s ease-out infinite;
|
|
564
|
+
}
|
|
565
|
+
|
|
566
|
+
/* A running turn is a ring that keeps turning, never a coloured dot. */
|
|
567
|
+
.session-state.running {
|
|
568
|
+
width: 9px;
|
|
569
|
+
height: 9px;
|
|
570
|
+
background: none;
|
|
571
|
+
border: 1.5px solid rgba(122, 170, 255, 0.25);
|
|
572
|
+
border-top-color: var(--accent);
|
|
573
|
+
animation: spin 0.8s linear infinite;
|
|
559
574
|
}
|
|
560
575
|
|
|
561
576
|
.more {
|
|
@@ -597,6 +612,16 @@ svg {
|
|
|
597
612
|
border-bottom: 1px solid var(--border-soft);
|
|
598
613
|
}
|
|
599
614
|
|
|
615
|
+
/* Match the CLI's 500ms thinking phases across the full title bar. */
|
|
616
|
+
.main-header.is-thinking {
|
|
617
|
+
background-color: #28393d;
|
|
618
|
+
animation: header-thinking 1s steps(1, end) infinite;
|
|
619
|
+
}
|
|
620
|
+
|
|
621
|
+
.main-header.is-thinking .main-title h1 {
|
|
622
|
+
color: #99d9ea;
|
|
623
|
+
}
|
|
624
|
+
|
|
600
625
|
.main-title {
|
|
601
626
|
flex: 1;
|
|
602
627
|
min-width: 0;
|
|
@@ -1372,6 +1397,26 @@ svg {
|
|
|
1372
1397
|
|
|
1373
1398
|
/* --------------------------------------------------------------- composer */
|
|
1374
1399
|
|
|
1400
|
+
.agent-actions {
|
|
1401
|
+
display: flex;
|
|
1402
|
+
flex-shrink: 0;
|
|
1403
|
+
align-items: center;
|
|
1404
|
+
justify-content: flex-end;
|
|
1405
|
+
gap: 12px;
|
|
1406
|
+
padding: 12px clamp(16px, 4vw, 40px) max(18px, env(safe-area-inset-bottom));
|
|
1407
|
+
}
|
|
1408
|
+
|
|
1409
|
+
.agent-actions .form-feedback {
|
|
1410
|
+
flex: 1;
|
|
1411
|
+
min-width: 0;
|
|
1412
|
+
margin: 0;
|
|
1413
|
+
overflow-wrap: anywhere;
|
|
1414
|
+
}
|
|
1415
|
+
|
|
1416
|
+
.agent-actions button {
|
|
1417
|
+
flex-shrink: 0;
|
|
1418
|
+
}
|
|
1419
|
+
|
|
1375
1420
|
.composer {
|
|
1376
1421
|
flex-shrink: 0;
|
|
1377
1422
|
padding: 0 clamp(16px, 4vw, 40px) 18px;
|
|
@@ -1386,6 +1431,7 @@ svg {
|
|
|
1386
1431
|
|
|
1387
1432
|
.composer-card {
|
|
1388
1433
|
display: flex;
|
|
1434
|
+
flex-wrap: wrap;
|
|
1389
1435
|
align-items: flex-end;
|
|
1390
1436
|
gap: 8px;
|
|
1391
1437
|
padding: 8px 8px 8px 16px;
|
|
@@ -1404,7 +1450,7 @@ svg {
|
|
|
1404
1450
|
}
|
|
1405
1451
|
|
|
1406
1452
|
.composer textarea {
|
|
1407
|
-
flex: 1
|
|
1453
|
+
flex: 1 0 100%;
|
|
1408
1454
|
min-width: 0;
|
|
1409
1455
|
min-height: 36px;
|
|
1410
1456
|
max-height: 240px;
|
|
@@ -1428,8 +1474,6 @@ svg {
|
|
|
1428
1474
|
outline: none;
|
|
1429
1475
|
}
|
|
1430
1476
|
|
|
1431
|
-
.pro-mode .composer-card { flex-wrap: wrap; }
|
|
1432
|
-
.pro-mode .composer textarea { flex: 1 0 100%; }
|
|
1433
1477
|
.pro-preset-control { position: relative; margin-left: auto; align-self: center; }
|
|
1434
1478
|
.pro-preset-control > summary {
|
|
1435
1479
|
display: flex; align-items: center; gap: 10px; padding: 7px 10px;
|
|
@@ -1466,20 +1510,20 @@ svg {
|
|
|
1466
1510
|
border-radius: 50%; background: rgba(255, 255, 255, .18);
|
|
1467
1511
|
}
|
|
1468
1512
|
.pro-slider-stop.is-filled { background: rgba(255, 255, 255, .35); }
|
|
1469
|
-
#pro-preset-range {
|
|
1513
|
+
#pro-preset-range, #model-intensity {
|
|
1470
1514
|
position: relative; display: block; width: 100%; height: 40px; margin: 0; padding: 0;
|
|
1471
1515
|
-webkit-appearance: none; appearance: none; border: 0; border-radius: 999px; background: transparent; cursor: pointer;
|
|
1472
1516
|
}
|
|
1473
|
-
#pro-preset-range::-webkit-slider-runnable-track { height: 24px; border: 0; background: transparent; }
|
|
1474
|
-
#pro-preset-range::-webkit-slider-thumb {
|
|
1517
|
+
#pro-preset-range::-webkit-slider-runnable-track, #model-intensity::-webkit-slider-runnable-track { height: 24px; border: 0; background: transparent; }
|
|
1518
|
+
#pro-preset-range::-webkit-slider-thumb, #model-intensity::-webkit-slider-thumb {
|
|
1475
1519
|
-webkit-appearance: none; appearance: none; width: 28px; height: 28px; margin-top: -2px;
|
|
1476
1520
|
border: 0; border-radius: 50%; background: #fff;
|
|
1477
1521
|
}
|
|
1478
|
-
#pro-preset-range::-moz-range-track { height: 24px; border: 0; background: transparent; }
|
|
1479
|
-
#pro-preset-range::-moz-range-progress { background: transparent; }
|
|
1480
|
-
#pro-preset-range::-moz-range-thumb { width: 28px; height: 28px; border: 0; border-radius: 50%; background: #fff; }
|
|
1481
|
-
#pro-preset-range:focus-visible { outline-offset: 2px; }
|
|
1482
|
-
#pro-preset-range:disabled { cursor: default; }
|
|
1522
|
+
#pro-preset-range::-moz-range-track, #model-intensity::-moz-range-track { height: 24px; border: 0; background: transparent; }
|
|
1523
|
+
#pro-preset-range::-moz-range-progress, #model-intensity::-moz-range-progress { background: transparent; }
|
|
1524
|
+
#pro-preset-range::-moz-range-thumb, #model-intensity::-moz-range-thumb { width: 28px; height: 28px; border: 0; border-radius: 50%; background: #fff; }
|
|
1525
|
+
#pro-preset-range:focus-visible, #model-intensity:focus-visible { outline-offset: 2px; }
|
|
1526
|
+
#pro-preset-range:disabled, #model-intensity:disabled { cursor: default; }
|
|
1483
1527
|
.pro-preset-ticks { position: relative; height: 24px; margin: 6px 14px 16px; }
|
|
1484
1528
|
.pro-preset-ticks button {
|
|
1485
1529
|
position: absolute; transform: translateX(-50%); border: 0; background: transparent;
|
|
@@ -1554,6 +1598,15 @@ svg {
|
|
|
1554
1598
|
height: 18px;
|
|
1555
1599
|
}
|
|
1556
1600
|
|
|
1601
|
+
#send .pause-icon,
|
|
1602
|
+
#send.is-pause .send-icon {
|
|
1603
|
+
display: none;
|
|
1604
|
+
}
|
|
1605
|
+
|
|
1606
|
+
#send.is-pause .pause-icon {
|
|
1607
|
+
display: block;
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1557
1610
|
#send:hover {
|
|
1558
1611
|
background: var(--primary-hover);
|
|
1559
1612
|
}
|
|
@@ -1892,40 +1945,18 @@ svg {
|
|
|
1892
1945
|
|
|
1893
1946
|
/* ----------------------------------------------------- model and settings */
|
|
1894
1947
|
|
|
1895
|
-
.model-picker {
|
|
1896
|
-
|
|
1897
|
-
|
|
1898
|
-
|
|
1899
|
-
align-items: flex-end;
|
|
1900
|
-
gap: 10px;
|
|
1901
|
-
padding: 10px clamp(16px, 4vw, 32px) 12px;
|
|
1902
|
-
border-bottom: 1px solid var(--border-soft);
|
|
1903
|
-
}
|
|
1904
|
-
|
|
1905
|
-
.model-picker label {
|
|
1948
|
+
.model-picker { min-width: 0; max-width: min(75%, 340px); }
|
|
1949
|
+
.model-picker > summary span { min-width: 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
|
|
1950
|
+
.model-picker-fields { display: grid; gap: 12px; margin-bottom: 18px; }
|
|
1951
|
+
.model-picker-fields label {
|
|
1906
1952
|
display: flex;
|
|
1907
1953
|
flex-direction: column;
|
|
1908
1954
|
gap: 5px;
|
|
1909
|
-
flex: 0 1 170px;
|
|
1910
1955
|
min-width: 0;
|
|
1911
|
-
color: var(--text-
|
|
1956
|
+
color: var(--text-tertiary);
|
|
1912
1957
|
font-size: 11px;
|
|
1913
1958
|
}
|
|
1914
|
-
|
|
1915
|
-
.model-picker label:nth-child(2) {
|
|
1916
|
-
flex-grow: 1;
|
|
1917
|
-
max-width: 300px;
|
|
1918
|
-
}
|
|
1919
|
-
|
|
1920
|
-
.model-picker .control {
|
|
1921
|
-
height: 34px;
|
|
1922
|
-
}
|
|
1923
|
-
|
|
1924
|
-
.model-picker .form-feedback {
|
|
1925
|
-
flex: 1 1 200px;
|
|
1926
|
-
align-self: center;
|
|
1927
|
-
margin: 0;
|
|
1928
|
-
}
|
|
1959
|
+
.model-picker-card .form-feedback { margin: 0; }
|
|
1929
1960
|
|
|
1930
1961
|
select,
|
|
1931
1962
|
.settings-fields input[type="password"],
|
|
@@ -1942,10 +1973,6 @@ select,
|
|
|
1942
1973
|
transition: border-color var(--fast), background-color var(--fast);
|
|
1943
1974
|
}
|
|
1944
1975
|
|
|
1945
|
-
.model-picker select {
|
|
1946
|
-
height: 34px;
|
|
1947
|
-
}
|
|
1948
|
-
|
|
1949
1976
|
select {
|
|
1950
1977
|
appearance: none;
|
|
1951
1978
|
padding-right: 32px;
|
|
@@ -2302,11 +2329,6 @@ select option {
|
|
|
2302
2329
|
display: none;
|
|
2303
2330
|
}
|
|
2304
2331
|
|
|
2305
|
-
/* Sit below the model row instead of covering it. */
|
|
2306
|
-
#model-picker:not(.hidden) + #plan-card {
|
|
2307
|
-
top: 138px;
|
|
2308
|
-
}
|
|
2309
|
-
|
|
2310
2332
|
.plan-card-head {
|
|
2311
2333
|
display: flex;
|
|
2312
2334
|
align-items: center;
|
|
@@ -2659,6 +2681,56 @@ select option {
|
|
|
2659
2681
|
flex: 1;
|
|
2660
2682
|
}
|
|
2661
2683
|
|
|
2684
|
+
/* One-time background-residency invitation. The orbit badge is the regular
|
|
2685
|
+
console's own mark, so the offer reads as part of the same product. */
|
|
2686
|
+
.background-dialog {
|
|
2687
|
+
width: min(460px, calc(100vw - 24px));
|
|
2688
|
+
}
|
|
2689
|
+
|
|
2690
|
+
.background-header {
|
|
2691
|
+
align-items: center;
|
|
2692
|
+
justify-content: flex-start;
|
|
2693
|
+
gap: 14px;
|
|
2694
|
+
border-bottom: 0;
|
|
2695
|
+
padding-bottom: 18px;
|
|
2696
|
+
}
|
|
2697
|
+
|
|
2698
|
+
.background-mark {
|
|
2699
|
+
display: flex;
|
|
2700
|
+
flex: none;
|
|
2701
|
+
align-items: center;
|
|
2702
|
+
justify-content: center;
|
|
2703
|
+
width: 46px;
|
|
2704
|
+
height: 46px;
|
|
2705
|
+
color: var(--accent);
|
|
2706
|
+
background: var(--surface-1);
|
|
2707
|
+
border: 1px solid var(--border-soft);
|
|
2708
|
+
border-radius: 13px;
|
|
2709
|
+
}
|
|
2710
|
+
|
|
2711
|
+
.background-mark svg {
|
|
2712
|
+
width: 24px;
|
|
2713
|
+
height: 24px;
|
|
2714
|
+
}
|
|
2715
|
+
|
|
2716
|
+
.background-copy {
|
|
2717
|
+
min-width: 0;
|
|
2718
|
+
}
|
|
2719
|
+
|
|
2720
|
+
.background-copy h2 {
|
|
2721
|
+
font-size: 15px;
|
|
2722
|
+
line-height: 1.55;
|
|
2723
|
+
font-weight: 600;
|
|
2724
|
+
}
|
|
2725
|
+
|
|
2726
|
+
.background-feedback:empty {
|
|
2727
|
+
display: none;
|
|
2728
|
+
}
|
|
2729
|
+
|
|
2730
|
+
.background-actions {
|
|
2731
|
+
border-top: 1px solid var(--border-soft);
|
|
2732
|
+
}
|
|
2733
|
+
|
|
2662
2734
|
/* Folder picker */
|
|
2663
2735
|
.folder-sheet {
|
|
2664
2736
|
max-height: calc(100vh - 32px);
|
|
@@ -3032,6 +3104,18 @@ html.pro-transitioning body::before {
|
|
|
3032
3104
|
|
|
3033
3105
|
/* -------------------------------------------------------------- animations */
|
|
3034
3106
|
|
|
3107
|
+
@keyframes header-thinking {
|
|
3108
|
+
0%,
|
|
3109
|
+
100% {
|
|
3110
|
+
background-color: #28393d;
|
|
3111
|
+
border-bottom-color: rgba(153, 217, 234, 0.45);
|
|
3112
|
+
}
|
|
3113
|
+
50% {
|
|
3114
|
+
background-color: var(--bg);
|
|
3115
|
+
border-bottom-color: var(--border-soft);
|
|
3116
|
+
}
|
|
3117
|
+
}
|
|
3118
|
+
|
|
3035
3119
|
@keyframes blink {
|
|
3036
3120
|
0%,
|
|
3037
3121
|
49% {
|
|
@@ -3067,6 +3151,12 @@ html.pro-transitioning body::before {
|
|
|
3067
3151
|
}
|
|
3068
3152
|
}
|
|
3069
3153
|
|
|
3154
|
+
@keyframes spin {
|
|
3155
|
+
to {
|
|
3156
|
+
transform: rotate(360deg);
|
|
3157
|
+
}
|
|
3158
|
+
}
|
|
3159
|
+
|
|
3070
3160
|
@media (prefers-reduced-motion: reduce) {
|
|
3071
3161
|
.pro-slider-meteors { display: none; }
|
|
3072
3162
|
*,
|
|
@@ -3195,27 +3285,6 @@ html.pro-transitioning body::before {
|
|
|
3195
3285
|
height: 34px;
|
|
3196
3286
|
}
|
|
3197
3287
|
|
|
3198
|
-
.model-picker {
|
|
3199
|
-
gap: 8px;
|
|
3200
|
-
padding: 10px 12px;
|
|
3201
|
-
max-height: 30vh;
|
|
3202
|
-
max-height: 30dvh;
|
|
3203
|
-
overflow: auto;
|
|
3204
|
-
}
|
|
3205
|
-
|
|
3206
|
-
.model-picker label {
|
|
3207
|
-
flex: 1 1 calc(50% - 8px);
|
|
3208
|
-
}
|
|
3209
|
-
|
|
3210
|
-
.model-picker label:nth-child(2) {
|
|
3211
|
-
max-width: none;
|
|
3212
|
-
}
|
|
3213
|
-
|
|
3214
|
-
.model-picker .control {
|
|
3215
|
-
flex: 1 1 calc(50% - 8px);
|
|
3216
|
-
height: 38px;
|
|
3217
|
-
}
|
|
3218
|
-
|
|
3219
3288
|
.messages {
|
|
3220
3289
|
padding: 16px 14px 20px;
|
|
3221
3290
|
}
|
|
@@ -3237,6 +3306,11 @@ html.pro-transitioning body::before {
|
|
|
3237
3306
|
border-radius: 20px;
|
|
3238
3307
|
}
|
|
3239
3308
|
|
|
3309
|
+
.model-picker-card {
|
|
3310
|
+
right: -48px;
|
|
3311
|
+
width: min(390px, calc(100vw - 32px));
|
|
3312
|
+
}
|
|
3313
|
+
|
|
3240
3314
|
.composer textarea {
|
|
3241
3315
|
max-height: min(220px, 25dvh);
|
|
3242
3316
|
}
|
|
@@ -3382,13 +3456,6 @@ html.pro-transitioning body::before {
|
|
|
3382
3456
|
overflow-y: auto;
|
|
3383
3457
|
}
|
|
3384
3458
|
|
|
3385
|
-
.model-picker {
|
|
3386
|
-
flex-shrink: 1;
|
|
3387
|
-
min-height: 44px;
|
|
3388
|
-
padding-top: 6px;
|
|
3389
|
-
padding-bottom: 6px;
|
|
3390
|
-
}
|
|
3391
|
-
|
|
3392
3459
|
.messages {
|
|
3393
3460
|
min-height: 40px;
|
|
3394
3461
|
padding-top: 8px;
|