pinokiod 7.3.9 → 7.3.11

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.
Files changed (52) hide show
  1. package/kernel/bin/brew.js +12 -2
  2. package/kernel/bin/caddy.js +24 -20
  3. package/kernel/bin/huggingface.js +2 -2
  4. package/kernel/bin/setup.js +2 -3
  5. package/kernel/bin/uv.js +13 -6
  6. package/kernel/connect/index.js +5 -1
  7. package/kernel/connect/providers/huggingface/index.js +213 -75
  8. package/kernel/environment.js +16 -1
  9. package/kernel/router/localhost_home_router.js +7 -0
  10. package/kernel/shell.js +1 -5
  11. package/kernel/util.js +1 -0
  12. package/package.json +1 -1
  13. package/server/index.js +75 -33
  14. package/server/public/common.js +52 -88
  15. package/server/public/install.js +20 -2
  16. package/server/public/layout.js +1 -1
  17. package/server/public/nav.js +3 -1
  18. package/server/public/style.css +1455 -521
  19. package/server/public/tab-link-popover.css +162 -18
  20. package/server/public/tab-link-popover.js +230 -21
  21. package/server/public/task-launcher.css +182 -91
  22. package/server/public/terminal-settings.js +227 -50
  23. package/server/public/universal-launcher.css +42 -33
  24. package/server/public/urldropdown.css +284 -0
  25. package/server/views/app.ejs +1718 -352
  26. package/server/views/autolaunch.ejs +4 -5
  27. package/server/views/checkpoints.ejs +223 -50
  28. package/server/views/connect/huggingface.ejs +406 -325
  29. package/server/views/connect.ejs +0 -1
  30. package/server/views/github.ejs +277 -324
  31. package/server/views/index.ejs +65 -8
  32. package/server/views/install.ejs +134 -65
  33. package/server/views/logs.ejs +9 -8
  34. package/server/views/net.ejs +341 -64
  35. package/server/views/network.ejs +85 -63
  36. package/server/views/partials/main_sidebar.ejs +249 -24
  37. package/server/views/plugins.ejs +141 -3
  38. package/server/views/settings.ejs +103 -7
  39. package/server/views/setup.ejs +0 -5
  40. package/server/views/skills.ejs +0 -1
  41. package/server/views/task_list.ejs +0 -1
  42. package/server/views/terminal.ejs +285 -60
  43. package/server/views/terminals.ejs +346 -6
  44. package/server/views/tools.ejs +828 -1691
  45. package/test/caddy-install.test.js +53 -0
  46. package/test/connect-setup.test.js +16 -0
  47. package/test/github-connection.test.js +1 -1
  48. package/test/huggingface-bin.test.js +4 -4
  49. package/test/huggingface-connect.test.js +73 -0
  50. package/test/main-sidebar.test.js +31 -0
  51. package/test/shell-run-template.test.js +5 -1
  52. package/test/uv-bin.test.js +29 -0
@@ -105,15 +105,15 @@ body.dark.connect-page.task-launcher-page::before {
105
105
  body.plugin-detail-page .swal2-popup.pinokio-modern-modal {
106
106
  padding: 0 !important;
107
107
  border: 1px solid var(--task-border) !important;
108
- border-radius: 14px !important;
108
+ border-radius: 8px !important;
109
109
  background: var(--task-panel) !important;
110
- box-shadow: 0 26px 72px rgba(15, 23, 42, 0.22) !important;
110
+ box-shadow: 0 18px 50px rgba(15, 23, 42, 0.16) !important;
111
111
  color: var(--task-text) !important;
112
112
  overflow: hidden !important;
113
113
  }
114
114
 
115
115
  body.dark.plugin-detail-page .swal2-popup.pinokio-modern-modal {
116
- box-shadow: 0 30px 84px rgba(0, 0, 0, 0.46) !important;
116
+ box-shadow: 0 24px 72px rgba(0, 0, 0, 0.42) !important;
117
117
  }
118
118
 
119
119
  body.plugin-detail-page .swal2-popup.pinokio-modern-modal .swal2-html-container.pinokio-modern-html {
@@ -127,16 +127,16 @@ body.plugin-detail-page .swal2-popup.pinokio-modern-modal .swal2-html-container.
127
127
  }
128
128
 
129
129
  body.plugin-detail-page .pinokio-modern-close.swal2-close {
130
- top: 14px !important;
131
- right: 14px !important;
132
- width: 36px;
133
- height: 36px;
130
+ top: 12px !important;
131
+ right: 12px !important;
132
+ width: 28px;
133
+ height: 28px;
134
134
  margin: 0;
135
135
  border: 1px solid var(--task-border);
136
- border-radius: 10px;
137
- background: color-mix(in srgb, var(--task-panel) 94%, var(--task-soft));
136
+ border-radius: 6px;
137
+ background: transparent;
138
138
  color: var(--task-muted) !important;
139
- font-size: 30px;
139
+ font-size: 22px;
140
140
  line-height: 1;
141
141
  }
142
142
 
@@ -156,23 +156,23 @@ body.plugin-detail-page .pinokio-modal-surface {
156
156
  body.plugin-detail-page .pinokio-modal-header {
157
157
  display: flex;
158
158
  align-items: flex-start;
159
- gap: 12px;
160
- padding: 18px 20px 14px;
159
+ gap: 10px;
160
+ padding: 14px;
161
161
  border-bottom: 1px solid var(--task-border);
162
162
  }
163
163
 
164
164
  body.plugin-detail-page .pinokio-modal-icon {
165
- width: 38px;
166
- height: 38px;
165
+ width: 32px;
166
+ height: 32px;
167
167
  flex: 0 0 auto;
168
168
  display: inline-flex;
169
169
  align-items: center;
170
170
  justify-content: center;
171
171
  border: 1px solid var(--task-border);
172
- border-radius: 10px;
172
+ border-radius: 7px;
173
173
  background: color-mix(in srgb, var(--task-panel) 92%, var(--task-soft));
174
- color: var(--task-accent);
175
- font-size: 15px;
174
+ color: var(--task-muted);
175
+ font-size: 14px;
176
176
  }
177
177
 
178
178
  body.plugin-detail-page .pinokio-modal-heading {
@@ -183,9 +183,9 @@ body.plugin-detail-page .pinokio-modal-heading {
183
183
  }
184
184
 
185
185
  body.plugin-detail-page .pinokio-modal-title {
186
- font-size: 15px;
186
+ font-size: 16px;
187
187
  line-height: 1.25;
188
- font-weight: 700;
188
+ font-weight: 600;
189
189
  color: var(--task-text);
190
190
  }
191
191
 
@@ -197,7 +197,7 @@ body.plugin-detail-page .pinokio-modal-subtitle {
197
197
 
198
198
  body.plugin-detail-page .pinokio-modal-body,
199
199
  body.plugin-detail-page .pinokio-modal-body--iframe {
200
- padding: 16px 20px 20px;
200
+ padding: 12px 14px 14px;
201
201
  background: transparent;
202
202
  }
203
203
 
@@ -207,7 +207,7 @@ body.plugin-detail-page .pinokio-modal-body--iframe iframe {
207
207
  height: min(64vh, 540px);
208
208
  min-height: 360px;
209
209
  border: 1px solid var(--task-border);
210
- border-radius: 12px;
210
+ border-radius: 7px;
211
211
  background: color-mix(in srgb, var(--task-panel) 90%, var(--task-soft));
212
212
  }
213
213
 
@@ -235,28 +235,30 @@ body.plugin-detail-page .pinokio-modal-body--iframe iframe {
235
235
  }
236
236
 
237
237
  .task-library-page .task-shell-header {
238
- padding: 0 28px 12px;
238
+ padding: 12px 18px 14px;
239
239
  }
240
240
 
241
241
  .task-library-page .task-title {
242
- font-size: clamp(28px, 3.2vw, 38px);
242
+ font-size: 22px;
243
+ line-height: 1.12;
244
+ letter-spacing: 0;
243
245
  }
244
246
 
245
247
  .task-library-page .task-description {
246
- margin-top: 6px;
248
+ margin-top: 4px;
247
249
  font-size: 12px;
248
- line-height: 1.45;
250
+ line-height: 1.4;
249
251
  }
250
252
 
251
253
  .task-container {
252
254
  flex: 1;
253
255
  min-width: 0;
254
- padding: 20px 28px 32px;
256
+ padding: 0;
255
257
  box-sizing: border-box;
256
258
  }
257
259
 
258
260
  body.task-page .task-shell {
259
- width: min(980px, 100%);
261
+ width: 100%;
260
262
  margin: 0;
261
263
  background: transparent;
262
264
  border: 0;
@@ -314,27 +316,28 @@ body.task-page .task-shell {
314
316
  }
315
317
 
316
318
  body.plugin-page .task-shell {
317
- width: min(1140px, 100%);
319
+ width: 100%;
318
320
  }
319
321
 
320
322
  body.connect-page .task-shell {
321
- width: min(980px, 100%);
323
+ width: 100%;
322
324
  }
323
325
 
324
326
  .task-shell-header {
325
327
  position: static;
326
328
  top: auto;
327
329
  z-index: auto;
328
- padding: 4px 28px 18px;
330
+ padding: 12px 18px 14px;
329
331
  display: grid;
330
332
  grid-template-columns: minmax(0, 1fr) auto;
331
- gap: 20px 24px;
332
- align-items: flex-start;
333
+ gap: 16px 24px;
334
+ align-items: center;
333
335
  border-bottom: 1px solid var(--task-border);
334
336
  }
335
337
 
336
338
  .task-shell-header .task-title {
337
339
  display: block;
340
+ margin: 0;
338
341
  padding: 0;
339
342
  }
340
343
 
@@ -359,15 +362,15 @@ body.connect-page .task-shell {
359
362
  align-items: center;
360
363
  justify-content: flex-start;
361
364
  gap: 12px;
362
- margin-bottom: 6px;
365
+ margin-bottom: 4px;
363
366
  }
364
367
 
365
368
  .task-eyebrow {
366
369
  margin: 0;
367
370
  color: var(--task-accent);
368
- font-size: 11px;
371
+ font-size: 10px;
369
372
  font-weight: 700;
370
- letter-spacing: 0.12em;
373
+ letter-spacing: 0.08em;
371
374
  text-transform: uppercase;
372
375
  }
373
376
 
@@ -387,9 +390,10 @@ body.connect-page .task-shell {
387
390
 
388
391
  .task-title {
389
392
  margin: 0;
390
- font-size: clamp(26px, 3vw, 34px);
391
- line-height: 1.08;
392
- letter-spacing: -0.045em;
393
+ font-size: 22px;
394
+ line-height: 1.12;
395
+ letter-spacing: 0;
396
+ font-weight: 760;
393
397
  }
394
398
 
395
399
  .task-detail-page .task-title {
@@ -398,10 +402,14 @@ body.connect-page .task-shell {
398
402
  }
399
403
 
400
404
  .task-description {
401
- margin: 10px 0 0;
405
+ margin: 4px 0 0;
402
406
  color: var(--task-muted);
403
- font-size: 14px;
404
- line-height: 1.55;
407
+ font-size: 12px;
408
+ line-height: 1.4;
409
+ }
410
+
411
+ body.task-page .task-shell-header .task-description {
412
+ max-width: none;
405
413
  }
406
414
 
407
415
  .task-header-badges {
@@ -488,7 +496,7 @@ body.connect-page .task-shell {
488
496
  }
489
497
 
490
498
  .task-shell-body {
491
- padding: 12px 28px 12px;
499
+ padding: 28px 28px 32px;
492
500
  display: grid;
493
501
  gap: 0;
494
502
  }
@@ -1628,15 +1636,53 @@ body.dark .task-link-button.danger {
1628
1636
  }
1629
1637
 
1630
1638
  .setup-shell {
1631
- width: min(1120px, 100%);
1639
+ width: 100%;
1640
+ }
1641
+
1642
+ body.setup-page .task-shell-header {
1643
+ padding-bottom: 14px;
1644
+ }
1645
+
1646
+ body.setup-page .task-shell-header-main {
1647
+ max-width: 820px;
1648
+ }
1649
+
1650
+ body.setup-page .task-title {
1651
+ font-size: 22px;
1652
+ line-height: 1.12;
1653
+ letter-spacing: 0;
1654
+ font-weight: 760;
1655
+ }
1656
+
1657
+ body.setup-page .task-description {
1658
+ max-width: 76ch;
1659
+ font-size: 12px;
1660
+ line-height: 1.4;
1661
+ }
1662
+
1663
+ body.setup-page .task-badge {
1664
+ min-height: 22px;
1665
+ border-radius: 7px;
1666
+ background: transparent;
1667
+ }
1668
+
1669
+ body.setup-page .task-badge-warning {
1670
+ border-color: rgba(180, 83, 9, 0.26);
1671
+ background: transparent;
1672
+ color: #92400e;
1673
+ }
1674
+
1675
+ body.dark.setup-page .task-badge-warning {
1676
+ border-color: rgba(251, 191, 36, 0.28);
1677
+ color: #f5d69a;
1632
1678
  }
1633
1679
 
1634
1680
  .setup-layout {
1635
1681
  display: grid;
1636
- grid-template-columns: minmax(0, 1fr) 320px;
1637
- gap: 36px;
1682
+ grid-template-columns: minmax(0, 1fr) 300px;
1683
+ gap: 32px;
1638
1684
  align-items: start;
1639
- padding-top: 18px;
1685
+ padding-top: 16px;
1640
1686
  }
1641
1687
 
1642
1688
  .setup-requirements-section {
@@ -1646,23 +1692,28 @@ body.dark .task-link-button.danger {
1646
1692
 
1647
1693
  .setup-requirement-list {
1648
1694
  display: grid;
1649
- gap: 10px;
1695
+ gap: 0;
1696
+ border-top: 1px solid var(--task-border);
1697
+ border-bottom: 1px solid var(--task-border);
1650
1698
  }
1651
1699
 
1652
1700
  .setup-requirement-row {
1653
1701
  display: grid;
1654
1702
  grid-template-columns: minmax(0, 1fr) auto;
1655
- gap: 16px;
1703
+ gap: 14px;
1656
1704
  align-items: center;
1657
- padding: 14px 16px;
1658
- border: 1px solid var(--task-border);
1659
- border-radius: 14px;
1660
- background: color-mix(in srgb, var(--task-panel) 94%, var(--task-soft));
1705
+ padding: 12px 0;
1706
+ border: 0;
1707
+ border-top: 1px solid var(--task-border);
1708
+ background: transparent;
1661
1709
  }
1662
1710
 
1663
1711
  .setup-requirement-row.needs-update {
1664
- border-color: color-mix(in srgb, var(--task-accent) 18%, var(--task-border-strong));
1665
- background: color-mix(in srgb, var(--task-accent) 8%, var(--task-panel));
1712
+ background: transparent;
1713
+ }
1714
+
1715
+ .setup-requirement-row:first-child {
1716
+ border-top: 0;
1666
1717
  }
1667
1718
 
1668
1719
  .setup-requirement-copy {
@@ -1670,17 +1721,17 @@ body.dark .task-link-button.danger {
1670
1721
  }
1671
1722
 
1672
1723
  .setup-requirement-name {
1673
- font-size: 14px;
1724
+ font-size: 13px;
1674
1725
  font-weight: 700;
1675
- letter-spacing: -0.02em;
1726
+ letter-spacing: 0;
1676
1727
  color: var(--task-text);
1677
1728
  word-break: break-word;
1678
1729
  }
1679
1730
 
1680
1731
  .setup-requirement-detail {
1681
- margin-top: 4px;
1732
+ margin-top: 3px;
1682
1733
  color: var(--task-muted);
1683
- font-size: 12px;
1734
+ font-size: 11px;
1684
1735
  line-height: 1.45;
1685
1736
  }
1686
1737
 
@@ -1688,50 +1739,83 @@ body.dark .task-link-button.danger {
1688
1739
  display: inline-flex;
1689
1740
  align-items: center;
1690
1741
  justify-content: center;
1691
- gap: 8px;
1692
- min-height: 30px;
1693
- padding: 0 11px;
1694
- border: 1px solid var(--task-border);
1695
- border-radius: 999px;
1696
- background: color-mix(in srgb, var(--task-panel) 88%, var(--task-soft));
1742
+ gap: 6px;
1743
+ min-height: 26px;
1744
+ padding: 0;
1745
+ border: 0;
1746
+ border-radius: 0;
1747
+ background: transparent;
1697
1748
  color: var(--task-muted);
1698
- font-size: 11px;
1749
+ font-size: 10px;
1699
1750
  font-weight: 700;
1700
1751
  letter-spacing: 0.01em;
1701
1752
  white-space: nowrap;
1702
1753
  }
1703
1754
 
1755
+ .setup-requirement-state i {
1756
+ font-size: 10px;
1757
+ }
1758
+
1704
1759
  .setup-requirement-row.is-installed .setup-requirement-state {
1705
- color: var(--task-text);
1760
+ color: var(--task-muted);
1706
1761
  }
1707
1762
 
1708
1763
  .setup-requirement-row.needs-update .setup-requirement-state {
1709
- border-color: color-mix(in srgb, var(--task-accent) 24%, var(--task-border-strong));
1710
- background: color-mix(in srgb, var(--task-accent) 10%, var(--task-panel));
1711
- color: color-mix(in srgb, var(--task-accent) 70%, var(--task-text));
1764
+ color: #92400e;
1765
+ }
1766
+
1767
+ body.dark .setup-requirement-row.needs-update .setup-requirement-state {
1768
+ color: #f5d69a;
1712
1769
  }
1713
1770
 
1714
1771
  .setup-actions-column {
1715
1772
  position: sticky;
1716
- top: 18px;
1773
+ top: 20px;
1717
1774
  align-self: start;
1775
+ padding-left: 24px;
1776
+ border-left: 1px solid var(--task-border);
1718
1777
  }
1719
1778
 
1720
1779
  .setup-action-card {
1721
1780
  margin: 0;
1722
- padding: 18px 0 0;
1781
+ padding: 0;
1723
1782
  border-top: 0;
1724
1783
  }
1725
1784
 
1726
1785
  .setup-summary-grid {
1727
- margin-top: 2px;
1786
+ display: grid;
1787
+ grid-template-columns: 1fr;
1788
+ gap: 7px;
1789
+ margin-top: 6px;
1790
+ }
1791
+
1792
+ .setup-summary-grid .task-meta-chip {
1793
+ display: flex;
1794
+ align-items: baseline;
1795
+ justify-content: space-between;
1796
+ gap: 14px;
1797
+ padding: 0;
1798
+ border: 0;
1799
+ border-radius: 0;
1800
+ background: transparent;
1801
+ }
1802
+
1803
+ .setup-summary-grid .task-meta-chip-label {
1804
+ margin-bottom: 0;
1805
+ letter-spacing: 0.04em;
1806
+ }
1807
+
1808
+ .setup-summary-grid .task-meta-chip-value {
1809
+ font-size: 12px;
1810
+ color: var(--task-text);
1728
1811
  }
1729
1812
 
1730
1813
  .setup-primary-button {
1731
1814
  width: 100%;
1732
1815
  min-height: 40px;
1733
- margin-top: 18px;
1816
+ margin-top: 16px;
1734
1817
  font-size: 12px;
1818
+ border-radius: 8px;
1735
1819
  }
1736
1820
 
1737
1821
  .setup-install-form {
@@ -1740,9 +1824,9 @@ body.dark .task-link-button.danger {
1740
1824
 
1741
1825
  .setup-secondary-actions {
1742
1826
  display: grid;
1743
- gap: 10px;
1744
- padding-top: 16px;
1745
- margin-top: 16px;
1827
+ gap: 8px;
1828
+ padding-top: 14px;
1829
+ margin-top: 14px;
1746
1830
  border-top: 1px solid var(--task-border);
1747
1831
  }
1748
1832
 
@@ -1752,6 +1836,9 @@ body.dark .task-link-button.danger {
1752
1836
 
1753
1837
  .setup-secondary-actions .task-button {
1754
1838
  justify-content: flex-start;
1839
+ min-height: 30px;
1840
+ border-radius: 7px;
1841
+ color: var(--task-muted);
1755
1842
  }
1756
1843
 
1757
1844
  .setup-reset-loading {
@@ -1782,26 +1869,28 @@ body.dark .task-link-button.danger {
1782
1869
  width: min(480px, 100%);
1783
1870
  display: flex;
1784
1871
  align-items: center;
1785
- gap: 16px;
1786
- padding: 20px;
1787
- border: 1px solid var(--task-border);
1788
- border-radius: 16px;
1789
- background: color-mix(in srgb, var(--task-panel) 94%, var(--task-soft));
1872
+ gap: 14px;
1873
+ padding: 16px 0;
1874
+ border: 0;
1875
+ border-top: 1px solid var(--task-border);
1876
+ border-bottom: 1px solid var(--task-border);
1877
+ border-radius: 0;
1878
+ background: transparent;
1790
1879
  box-sizing: border-box;
1791
1880
  }
1792
1881
 
1793
1882
  .setup-loading-icon {
1794
- width: 42px;
1795
- height: 42px;
1883
+ width: 36px;
1884
+ height: 36px;
1796
1885
  flex: 0 0 auto;
1797
1886
  display: inline-flex;
1798
1887
  align-items: center;
1799
1888
  justify-content: center;
1800
1889
  border: 1px solid var(--task-border);
1801
- border-radius: 12px;
1802
- background: color-mix(in srgb, var(--task-panel) 92%, var(--task-soft));
1803
- color: var(--task-accent);
1804
- font-size: 16px;
1890
+ border-radius: 8px;
1891
+ background: transparent;
1892
+ color: var(--task-muted);
1893
+ font-size: 14px;
1805
1894
  }
1806
1895
 
1807
1896
  .setup-loading-copy {
@@ -2266,7 +2355,7 @@ body.plugin-page .plugin-card {
2266
2355
  padding: 15px;
2267
2356
  border-radius: 16px;
2268
2357
  border: 1px solid var(--task-border);
2269
- background: color-mix(in srgb, var(--task-panel) 96%, var(--task-soft));
2358
+ background: transparent;
2270
2359
  color: var(--task-text);
2271
2360
  text-decoration: none;
2272
2361
  transition: background 140ms ease, border-color 140ms ease, transform 140ms ease;
@@ -2274,7 +2363,7 @@ body.plugin-page .plugin-card {
2274
2363
 
2275
2364
  body.plugin-page .plugin-card:hover,
2276
2365
  body.plugin-page .plugin-card:focus-within {
2277
- background: color-mix(in srgb, var(--task-panel) 88%, var(--task-soft));
2366
+ background: color-mix(in srgb, var(--task-text) 5%, transparent);
2278
2367
  border-color: var(--task-border-strong);
2279
2368
  transform: translateY(-1px);
2280
2369
  }
@@ -2286,7 +2375,7 @@ body.plugin-page .plugin-card .plugin-icon {
2286
2375
  border-radius: 12px;
2287
2376
  object-fit: cover;
2288
2377
  flex-shrink: 0;
2289
- background: color-mix(in srgb, var(--task-panel) 90%, white);
2378
+ background: color-mix(in srgb, var(--task-text) 5%, transparent);
2290
2379
  border: 1px solid var(--task-border);
2291
2380
  }
2292
2381
 
@@ -2363,7 +2452,7 @@ body.plugin-page .plugin-empty {
2363
2452
  padding: 22px;
2364
2453
  border-radius: 16px;
2365
2454
  border: 1px dashed var(--task-border-strong);
2366
- background: color-mix(in srgb, var(--task-panel) 96%, var(--task-soft));
2455
+ background: transparent;
2367
2456
  }
2368
2457
 
2369
2458
  body.plugin-page .plugin-install-trigger {
@@ -3049,6 +3138,8 @@ body.dark .plugin-option .option-icon {
3049
3138
  top: 12px;
3050
3139
  order: -1;
3051
3140
  z-index: 2;
3141
+ padding-left: 0;
3142
+ border-left: 0;
3052
3143
  }
3053
3144
 
3054
3145
  .setup-action-card {